5

मैं वर्तमान में एक पालतू प्रोग्रामिंग भाषा (सीखने के उद्देश्यों के लिए) में काम कर रहा हूं, और पिछले साल से बहुत सारे शोधों से गुज़र चुका हूं, और मुझे लगता है कि अंत में इसका समय शुरू हो गया है इस तरह के एक languague की अवधारणाओं मॉडलिंग। सबसे पहले मैं इसे कुछ मध्यवर्ती रूपों, जैसे कि जेवीएम या .NET बाइटकोड को संकलित करना चाहता हूं, लक्ष्य बहु-प्रारूप/वास्तुकला का लक्ष्य है। दूसरा, मैं चाहता हूं कि यह तेज़ हो (मेरे मन में कई अन्य चीजें भी हैं, लेकिन इस विषय का उन पर चर्चा करने का उद्देश्य नहीं है)।वर्चुअल मशीन के रूप में एलएलवीएम का उपयोग करना - मल्टीप्लाफार्म और मल्टीआर्किटेक्चर कोडिंग

सबसे अच्छा विकल्प है कि मेरे मन में आए थे: संकलित JVM बाईटकोड के लिए और क्रम पर्यावरण, संकलित .NET बाईटकोड के रूप में OpenJDK का उपयोग करें और क्रम पर्यावरण, संकलित LLVM आईआर के रूप में मोनो का उपयोग करें और क्रम पर्यावरण के रूप में LLVM का उपयोग ।

जैसा कि आपने कल्पना की हो, मैंने एलएलवीएम चुना है। क्यूं कर? क्योंकि यह तेजी से तेज है। मैंने सी ++ एन-बॉडी कोड का उपयोग करके थोड़ा बेंचमार्क किया, और मेरी मशीन में 7 इंच को एलआईआईआईआईटी आईआर के साथ हासिल किया, इसके विपरीत क्लैंग देशी संकलित कोड के साथ 27 के साथ (मुझे पता है कि पहले आईआरजी मशीन कोड बनाते हैं)।

तो, मेरा प्रश्न यह है: क्या एलएलवीएम मूल टूलसेट (मुझे केवल एलआईआई की आवश्यकता है) का कोई पुनर्वितरण योग्य संस्करण है जिसका मैं उपयोग कर सकता हूं? या मुझे अपना खुद का संकलन करना होगा? यदि उत्तरार्द्ध, क्या आप मुझे यह कैसे करने के बारे में कोई संकेत दे सकते हैं? अगर मुझे वास्तव में ऐसा करना है, तो मैं सोच रहा हूं कि उन्हें मेरी मशीन (इंटेल मैक) से क्रॉस-कंपाइल करना है, और कुछ इंस्टॉलर उत्पन्न करना (कहें, लोकप्रिय लिनक्स डिस्ट्रोज़ और .pkg के लिए विंडोज़,। आरपीएम और .deb के लिए एक। एमएसआई मैक)। याद रखें, मुझे केवल एलएलवीएम का न्यूनतम सबसेट चाहिए, जैसे कि यह सबसेट "एलआईआई" का उपयोग कर वीएम की तरह काम करने में सक्षम है। यहां वास्तविक सवाल यह है कि एक सामान्य वर्चुअल मशीन के रूप में एलएलवीएम का उपयोग कैसे करें।

+0

एलएलवीएम प्रोजेक्ट में एक अनुमोदित लाइसेंस है; ऐसा लगता है कि आपको ** कोर लाइब्रेरी ** वितरित करने की आवश्यकता है। –

+0

@RobertHarvey जो मैंने सोचा है, खरीदते हैं, मुझे कोई संकेत नहीं है कि कहां से शुरू किया जाए। – Salvia

+0

यह कहने के बिना चला जाता है कि आपको दस्तावेज़ को पढ़ने की आवश्यकता होगी, और चूंकि आपने अपना निर्णय पहले से ही कर लिया है ... मैं स्वयं एलएलवीएम के साथ काम करने के बारे में उत्साहित हूं; हां, मैंने अभी तक प्रलेखन नहीं पढ़ा है। –

उत्तर

4

सबसे पहले, मुझे लगता है कि सभी 3 विकल्प - एलएलवीएम आईआर + एलएलवीएम, जावा बाइटकोड + ओपनजेडीके, और .NET सीआईएल + मोनो - उत्कृष्ट विकल्प हैं, और मैं उनके बीच निर्णय लेने से सहमत हूं कि यह आसान नहीं है।

यदि आप एलएलवीएम के लिए जाते हैं और आप बस lli का उपयोग करना चाहते हैं, तो आप अपने लक्ष्य प्लेटफॉर्म पर एलएलवीएम संकलित कर सकते हैं और परिणामी lli को अपने वितरण के साथ निष्पादन योग्य पैक कर सकते हैं, इसे काम करना चाहिए।

एलएलवीएम के माध्यम से एक जेआईटी कंपाइलर लिखने का एक और तरीका एक निष्पादन इंजन - see the handy examples in the Kaleidoscope tutorial का उपयोग करना है। इसका मतलब है कि आप अपना खुद का प्रोग्राम लिखते हैं जो आपकी खुद की भाषा को जेआईटी-संकलित करेगा, इसे एलएलवीएम के साथ स्थिर रूप से जोड़ने के दौरान आप जो भी प्लेटफार्म चाहते हैं उसे संकलित करें, और उसके बाद इसे वितरित करें।

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

+0

धन्यवाद, आपके द्वारा लिंक किया गया लेख बहुत उपयोगी था, मैं इसे शुरुआती बिंदु के रूप में उपयोग कर सकता हूं। – Salvia

+0

लिंक टूटा हुआ है – rraallvv

+0

@rraallvv निश्चित, धन्यवाद! – Oak

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