5

मैं एक कस्टम वीएम के लिए विभिन्न संभावनाओं का मूल्यांकन कर रहा हूं, और मैंने एलएलवीएम को दूसरे प्रश्न से बाहर कर दिया। चूंकि मैं अभी भी एम्बेडेड भाषा वीएम के मूल्यांकन पर काम कर रहा हूं, इसलिए मैं इसे अभी जांच/जांच नहीं सकता हूं। मैं एलएलवीएम/CLANG के बारे में निम्नलिखित जानकारी जानना चाहता हूं:कस्टम बाइटकोड वीएम के लिए एलएलवीएम/CLANG का उपयोग कर प्रोग्राम का आकार क्या है?

  • क्या यह विंडोज पर अच्छी तरह से समर्थित है? या सोलारिस? (क्रॉस-प्लेटफ़ॉर्म मेरे लिए एक प्लस है)
  • यदि मैं सी-जैसी भाषा के साथ अपना स्वयं का/कस्टम वीएम लिखना चाहता हूं, तो मुझे इस परियोजना में क्या शामिल करने की आवश्यकता होगी? (एलएलवीएम/CLANG अनुभाग या घटक, आदि)
  • मैं स्पष्ट कारणों से एक संकलक को वीएम से अलग रखूंगा (एक दुभाषिया लिखना नहीं)। आवश्यक घटकों का आकार क्या होगा? क्या मैं उन्हें गतिशील रूप से जोड़ने के बजाय प्रोग्राम में 'इन' बना सकता हूं?
  • क्या मैं जेआईटी से बच सकता हूं? मैं एक बाइटकोड वीएम रखना चाहता हूं जो मूल रूप से मूल कोड में अनुवाद नहीं करता है। इससे मदद मिलेगी जब प्लेटफ़ॉर्म पर जेआईटी समर्थित नहीं है (मौजूदा सिस्टम अनुमतियों वाले पूर्व सिस्टम जो Wx/rwx मेमोरी मैपिंग की अनुमति नहीं देते हैं)।

मुझे पता है कि क्लैमव एंटीवायरस उदाहरण के लिए एलएलवीएम/क्लैंग द्वारा समर्थित गतिशील/रनटाइम हस्ताक्षर का समर्थन करने के लिए बाइटकोड का उपयोग करता है। हालांकि मुझे नहीं पता कि इस और/या ट्यूटोरियल या दस्तावेज़ीकरण को लागू करने के लिए एक मौजूदा सुविधा है जो ऐसी चीज को लागू करने की प्रक्रिया के माध्यम से आपको मार्गदर्शन करती है।

धन्यवाद! :)

उत्तर

5

क्लैंग सी ++ सहित सी-जैसी भाषाओं के लिए एक पार्सर है। यदि आपकी भाषा सी-जैसी है (यानी, जावा नहीं है) तो आप अपनी भाषा के लिए समर्थन जोड़ सकते हैं, जो जानता है कि एलएलवीएम आईआर कैसे तैयार किया जाए।

एलएलवीएम को जेआईटी की आवश्यकता नहीं है, और आमतौर पर स्थैतिक रूप से जुड़ा हुआ है। एलएलवीएम पुस्तकालय प्रदान करता है जो एलएलवीएम आईआर के अनुकूलन और कोड पीढ़ी का प्रदर्शन करता है। जेआईटी के लिए बस डिस्क पर स्मृति के लिए कोड उत्पन्न करने के लिए है। क्लैंग + एलएलवीएम का सामान्य उपयोग जीसीसी के लिए ड्रॉप-इन प्रतिस्थापन के रूप में है, जो .o फाइलों को कोड उत्पन्न करता है।

आपकी आवश्यकता के आधार पर यह कितना बड़ा होगा। क्या आप सभी अनुकूलन चाहते हैं? क्या आप सभी लक्ष्यों को चाहते हैं (जीसीसी के विपरीत, एलएलवीएम को एक बाइनरी में जितनी चाहें उतनी बैकएंड के साथ बनाया जा सकता है)। चूंकि आपने एम्बेडेड का उल्लेख किया है, एक उदाहरण एंड्रॉइड है जो सेल फोन पर एलएलवीएम का उपयोग कर रहा है: http://android-developers.blogspot.com/2011/02/introducing-renderscript.html

विंडोज़ समर्थित है, तो आप हमारे सीएमके बिल्ड सिस्टम या mingw32 का उपयोग करके एमएसवीसी ++ के साथ एलएलवीएम बना सकते हैं। सोलारिस समर्थन अधिक iffy है, हम समय-समय पर इसे ठीक करने के लिए पैच प्राप्त करने के लिए उपयोग किया जाता है, लेकिन मैंने थोड़ी देर के लिए कोई नहीं देखा है।

अंत में, आप http://llvm.org/docs/tutorial पर ट्यूटोरियल पढ़ना चाह सकते हैं। यह एक जेआईटीटेड आरईपीएल भाषा का निर्माण करता है, लेकिन आधार स्थिर रूप से संकलित भाषा के लिए समान है। एक llvm :: JIT ऑब्जेक्ट का उपयोग करने के बजाय, आप Target.addPassesToEmitFile को कॉल करते हैं और इसे आउटपुट स्ट्रीम को लिखने के लिए कहते हैं। पूरी तरह से काम किए गए उदाहरण के लिए llvm/tools/llc/llc.cpp देखें (यह लंबा है; यदि आप llc के सभी विकल्पों का समर्थन नहीं करना चाहते हैं तो इसका केवल एक छोटा सा हिस्सा आवश्यक है)।

+0

धन्यवाद, मैंने आज से पहले यह जवाब नहीं दिया ...! – soze

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