2009-12-29 13 views
18

पायथन में, अगर मैं स्रोतों के बिना एक आवेदन देना चाहता हूं तो मैं इसे बाइटकोड में संकलित कर सकता हूं .pyc, क्या रूबी में ऐसा कुछ करने का कोई तरीका है?क्या रूबी को पाइथन के साथ बाइट कोड को संकलित करना संभव है?

उत्तर

2

एमआरआई व्याख्याकर्ता के साथ नहीं, नहीं।

कुछ नए वीएम काम पर हैं जहां यह टेबल पर है, लेकिन इन बिंदुओं पर इनका व्यापक रूप से उपयोग नहीं किया जाता है (या यहां तक ​​कि उपयोग करने के लिए भी तैयार)।

3

हालांकि रूबी का 1.9 यारवी वीएम एक बाइट-कोड कंपाइलर है, मुझे विश्वास नहीं है कि यह बाइट कोड को डिस्क पर डंप कर सकता है। आप वैकल्पिक कंपाइलर, Rubinius पर विचार करना चाहेंगे, मुझे विश्वास है कि इसमें यह क्षमता है। आपको ध्यान रखना चाहिए कि बाइट-कोड पीईसी फाइलें (और मुझे लगता है कि रूबी बराबर) बहुत आसानी से "डिकंपील्ड" हो सकता है।

38

मैं प्रश्न में एक much more detailed answer to this question लिखा था "Can Ruby, PHP, or Perl create a pre-compiled file for the code like Python?"

जवाब है: यह निर्भर करता है। रूबी भाषा में बाइटकोड और/या बाइटकोड चलाने के लिए कोई प्रावधान नहीं है। इसमें बाइटकोड प्रारूप का कोई भी प्रभाव नहीं है। इसका कारण सरल है: भाषा कार्यान्वयनकर्ताओं के लिए यह बहुत सीमित होगा यदि उन्हें एक विशिष्ट बाइटकोड प्रारूप, या यहां तक ​​कि बाइटकोड का उपयोग करने के लिए मजबूर किया गया था। उदाहरण के लिए, XRuby और JRuby JVM बाइटकोड, Ruby.NET और IronRuby संकलन सीआईएल बाइटकोड के लिए संकलित, पिछला करने के लिए कार्डिनल संकलन, स्मॉलटॉक/एक्स बाइटकोड के लिए छोटे रूबी संकलन, मैमलेव जेमस्टोन/एस बाइटकोड के लिए संकलित करता है। इन सभी कार्यान्वयनों के लिए, वर्तमान में उपयोग किए जाने वाले किसी भी अन्य बाइटकोड प्रारूप का उपयोग करने के लिए यह बेवकूफ होगा, क्योंकि उनका पूरा बिंदु अन्य भाषा कार्यान्वयनों के साथ अंतःक्रिया कर रहा है जो समान बाइटकोड प्रारूप का उपयोग करते हैं।

मैक्रूबी के लिए सिमर: यह देशी कोड को संकलित करता है, बाइटकोड नहीं। फिर, बाइटकोड का उपयोग बेवकूफ होगा, क्योंकि गोलों में से एक आईफोन पर रूबी चलाने के लिए है, जो कि बहुत अधिक देशी कोड की आवश्यकता है।

और निश्चित रूप से एमआरआई है, जो एक शुद्ध एएसटी-चलने वाली स्क्रिप्ट दुभाषिया है और इस प्रकार बाइटकोड प्रारूप नहीं है।

कहा जा रहा है, वहाँ हैं कुछ रूबी क्रियान्वयन जो बाईटकोड से करने के लिए और लोड हो रहा है संकलन अनुमति देते हैं। Rubinius उदाहरण के लिए, अनुमति देता है। (वास्तव में, यह के बाद से अपने रूबी संकलक रूबी में लिखा है, और, पकड़ने -22 हल करने के लिए इस प्रकार संकलक पहले Rubinius बाईटकोड को संकलित किया जाना चाहिए है कि कार्यक्षमता है।)

YARV भी बचा सकता है और बाइटकोड लोड करें, हालांकि लोडिंग कार्यक्षमता वर्तमान में अक्षम है जब तक कि बाइटकोड सत्यापनकर्ता लागू नहीं किया जाता है जो उपयोगकर्ताओं को हेरफेर बाइटकोड लोड करने से रोकता है जो दुर्घटनाग्रस्त हो सकता है या अन्यथा दुभाषिया को तोड़ सकता है।

लेकिन, ज़ाहिर है, इनमें से दोनों का अपना बाइटकोड प्रारूप है और एक-दूसरे को समझ नहीं आता है (न ही tinyrb या RubyGoLightly's या ...) इसके अलावा, इनमें से किसी भी प्रारूप को JVM या CLR और उपाध्यक्ष द्वारा समझा जाता है विपरीत।

हालांकि, संपूर्ण बिंदु अप्रासंगिक है क्योंकि, जैसा कि मार्क इंगित करता है, आप हमेशा बाइट कोड को इंजीनियर कर सकते हैं, खासकर सीपीथॉन, पायपी, रूबिनीस, याएआरवी, टिनरब, रूबीगोलाइटली जैसे मामलों में, जहां बाइटकोड प्रारूप विशेष रूप से था स्रोत भाषा के बहुत करीब होने के लिए डिज़ाइन किया गया है।

आम तौर पर इस तरह से कोड की रक्षा करना असंभव है। कारण सरल है: आप चाहते हैं कि मशीन कोड को निष्पादित करने में सक्षम हो। (अन्यथा इसे पहली जगह में लिखने का क्या मतलब है?) हालांकि, कोड को निष्पादित करने के लिए, मशीन को कोड कोड को समझना चाहिए। चूंकि मशीनें इंसानों की तुलना में बहुत अधिक हैं, यह इस प्रकार है कि मशीन द्वारा समझा जा सकता है कि किसी भी कोड को मानव द्वारा समझा जा सकता है, भले ही वह कोड स्रोत फ़ॉर्म, बाइटकोड, असेंबली, देशी कोड या एक में हो पंच कार्ड का डेक।

केवल एक व्यावहारिक तकनीकी समाधान है: यदि आप पूरे निष्पादन पाइपलाइन नियंत्रित करते हैं, यानी अपने स्वयं के सीपीयू, अपने स्वयं के कंप्यूटर, अपने खुद के ऑपरेटिंग सिस्टम, अपने खुद के संकलक, अपने खुद के दुभाषिया, और इसके आगे और उपयोग का निर्माण उन सभी की रक्षा करने के लिए मजबूत क्रिप्टोग्राफ़ी, फिर और केवल तो हो सकता है कि आप अपने कोड की सुरक्षा कर सकें। हालांकि, उदाहरण के लिए माइक्रोसॉफ्ट ने एक्सबॉक्स 360 के साथ कड़ी मेहनत की, यहां तक ​​कि यह सब कुछ कर रहा है और ग्रह पर कुछ सबसे अच्छे क्रिप्टोग्राफरों और गणितज्ञों को भर्ती करना, सफलता की गारंटी नहीं देता है।

केवल असली समाधान एक तकनीकी लेकिन एक सामाजिक एक नहीं है: जैसे ही आप अपने कोड लिखा है, यह स्वचालित रूप से पूरी तरह से कॉपीराइट कानून द्वारा संरक्षित है बिना आप एक ही बात करने के लिए हो रही है। बस। आपका कोड सुरक्षित है।

+0

नामक एक उपकरण के साथ अपाचे बिलाव या Jboss पर तैनात करने के लिए एक .war फ़ाइल में अपना पूरा सामान संकलन कर सकते हैं वहाँ एक performace प्रभाव/कोई बाइट के साथ जुड़े लागत है कोड पीढ़ी? –

+0

@ मिथ 17: सैद्धांतिक रूप से हां, लेकिन व्यावहारिक रूप से, यह लगभग पूरी तरह से नगण्य है। –

+0

आईफोन पर रूबी चलाना मैक्रूबी के लक्ष्यों में से एक नहीं है - इसलिए नाम ** मैक ** रूबी। आईओएस विकास के लिए [रूबीमोशन] (http://www.rubymotion.com/) है, जो कि कई लोगों द्वारा विकसित किया गया है। – anthropomorphic

0

आप JRuby का उपयोग करते हैं, तो आप अपने रूबी कोड जावा .class फ़ाइलें (अपने रेल सामान सहित) में उन लोगों के साथ निष्पादित करने के लिए संकलन कर सकते हैं (खुला) बॉक्स से बाहर जेडीके!

तुम भी "गाने वाला"

https://rubygems.org/gems/warbler/

संबंधित मुद्दे

 संबंधित मुद्दे