मैं Robocode इंजन का डेवलपर हूं। हम रोबोकोड बहुभाषी बनाना चाहते हैं और स्कैला अच्छा मैच प्रतीत होता है। हमारे पास स्कैला प्लगइन prototype here है।स्कैला रनटाइम की सुरक्षा
समस्या: क्योंकि उन रचनात्मक प्रोग्रामर रहे हैं, वे लड़ाई अलग अलग तरीकों से जीतने की कोशिश कर सकते हैं। साथ ही रोबोट ऑनलाइन डेटाबेस से डाउनलोड किए जाते हैं जहां कोई भी अपलोड कर सकता है। तो सुरक्षा में अंतर उपयोगकर्ता कंप्यूटर में सुरक्षा छेद का कारण बन सकता है। जावा में लिखे गए रोबोट प्रतिबंधित सैंडबॉक्स में चल रहे हैं। लगभग सबकुछ प्रतिबंधित है [नेटवर्क, जीयूआई, डिस्क (सीमित), धागे (सीमित), क्लासलोडर और प्रतिबिंब]। सैंडबॉक्स ब्राउज़र एप्लेट के समान है। हम SecurityManager, रोबोट प्रति कस्टम classloader, का उपयोग etc ...
दो तरीके कैसे Robocode में स्काला क्रम की मेजबानी के लिए कर रहे हैं:
1) सैंडबॉक्स के अंदर एक साथ इसे लोड रोबोट के साथ। हमारे लिए बहुत सुरक्षित, पसंदीदा समाधान। लेकिन यह स्कैला रनटाइम क्षमताओं को नुकसान पहुंचाएगा क्योंकि रनटाइम प्रतिबिंब का उपयोग करता है। शायद रनटाइम पर कक्षाएं उत्पन्न करता है? कुछ आंतरिक सफाई करने के लिए धागे का प्रयोग करें? JVM/internals तक पहुंच? (मैं भाषा की क्षमताओं को सीमित नहीं करना चाहूंगा)
2) स्केल रनटाइम का उपयोग बॉक्स के बाहर विश्वसनीय कोड के रूप में करें, पर जेडीके के समान स्तर पर सुरक्षा। दृश्यता (दुर्भावनापूर्ण) रोबोट। क्या स्कैला रनटाइम एपीआई सुरक्षित हैं? क्या उनके पास सुरक्षा गार्ड हैं? क्या कोई सुरक्षित तरीका है? क्या स्कैला रनटाइम में कोई सिंगलटन है, रोबोट के बीच संवाद करने के लिए दुर्व्यवहार किया जा सकता है? कोई भी concurency/थ्रेडपूल/मैसेजिंग जो थ्रेड अनुकरण कर सकता है? (क्या स्कैला रनटाइम के लिए कोई सुरक्षा ऑडिट है?)
3) रनटाइम के कुछ वर्गों और कुछ बाहर के बीच कुछ। रोबोट के लिए कौन से वर्ग/पैकेज दिखाना चाहिए/जो केवल निजी कार्यान्वयन हैं? (यह भविष्य समाधान लगता है)
प्रश्न: यह गणना और क्रम के कुछ हिस्सों जो बाकी हिस्सों से भरोसा दायरे में चलाना चाहिए अलग करने के लिए संभव है? विशिष्ट पैकेज और कक्षाएं? या बेहतर विचार?
मैं विशिष्ट उत्तर की तलाश में हूं, जो सुरक्षित समाधान का कारण बन जाएगा। यादृच्छिक विचारों का स्वागत है, लेकिन सम्मानित नहीं किया गया। scala email group पर चल रही चर्चा चल रही है। अभी तक कोई विशिष्ट जवाब नहीं है।
प्रतिबिंब और सरणी के बारे में धागे से लिंक: http://thread.gmane.org/gmane.comp.lang.scala.internals/2590 –
यहां कई अच्छे अंक हैं। आगे बढ़ने के लक्ष्य के बारे में, आप सही हैं, मुझे स्कैला के एकल संस्करण पर लॉक करने में खुशी है। "आह! के बारे में मैं इसे हल करने के लिए प्रतिबिंब का उपयोग करूंगा।" यह आपराधिक कृत्य है। मैं अपने उपयोगकर्ताओं/नए लोगों को हमारे समर्थन समूह में टूटा रनटाइम के बारे में शिकायत नहीं करना चाहूंगा, जिसका हमारे पास स्वामित्व नहीं है। यह मुझे स्पष्ट नहीं है कि रनटाइम कम से कम कुछ अपवाद को अपवाद रूपांतरित/परिवर्तित करेगा। क्या यह कम से कम AccessController.doPrivileged() ऐसे कार्यों के लिए करता है? –
आपको बाजार स्कैला लक्ष्य पर विचार करना होगा। प्रतिबिंब जावा वेब ढांचे और जेवीएम-आधारित गतिशील भाषाओं में काफी सर्वव्यापी है। रनटाइम बाइटकोड मैनिपुलेशन की तुलना में यह मामूली है, जो कि आम है। यह भी ध्यान रखें कि प्रतिबिंब का उपयोग आवश्यक रूप से रनटाइम या लाइब्रेरी तक सीमित नहीं है, बल्कि संकलक सामान्य उपयोगकर्ता कोड के भीतर कॉल को उत्सर्जित करता है। मुझे स्कैला स्रोत में एक्सेसकंट्रोलर का एक उदाहरण नहीं मिल रहा है, इसलिए मुझे लगता है कि यह ऐसी चीजों के बारे में बिल्कुल जागरूक नहीं है। –