2010-01-05 17 views
23

पर एक भाषा बूटस्ट्रैपिंग मैं एलएलवीएम के शीर्ष पर एक प्रोग्रामिंग भाषा कंपाइलर बूटस्ट्रैप कर रहा हूं। वर्तमान में मैं ज्यादातर सी के उप-समूह के लिए एक कंपाइलर लिख रहा हूं जो स्वयं संकलन है। जब मैं इसके साथ समाप्त करूँगा, तो मैं अपनी भाषा को सी से दूर रखूंगा, स्वयं संकलन को बनाए रखूंगा।एलएलवीएम

चूंकि संकलक स्वयं संकलन कर रहा है, इसलिए सी का उपयोग करने वाली किसी भी विशेषताओं को मुझे लागू करना होगा। तो यह निरंतर संतुलन है: यदि मैं बहुत सारी सुविधाओं का उपयोग करता हूं तो मुझे अधिक से अधिक लागू करना होगा, लेकिन यदि मैं पर्याप्त सुविधाओं को लागू नहीं करता हूं तो कोड लिखना मुश्किल होगा।

ऐसी एक विशेषता एलएलवीएम बाइंडिंग है। एलएलवीएम सी बाइंडिंग के बिना एलएलवीएम इंटरमीडिएट प्रस्तुति उत्पन्न करना मुश्किल है। हालांकि, अगर मैं एलएलवीएम बाइंडिंग करता हूं, तो मुझे सी को फिर से लागू करना होगा जब मैं सी

में मुझे कुछ कठिनाई हो रही है, इसलिए मैं वैकल्पिक समाधान ढूंढ रहा हूं। कोई विचार?

+0

क्या आप अपने संकलक लिख रहे हैं? सी? आप मशीन कोड संकलन के लिए एलएलवीएम का उपयोग कर रहे हैं? –

+0

मेरा कंपाइलर सी के सबसेट में लिखा गया है जो इसे संकलित करता है। क्षमा करें, मैंने इसे अच्छी तरह से समझाया नहीं। मेरी वर्तमान योजना एक फ़ाइल में एलएलवीएम इंटरमीडिएट प्रतिनिधित्व लिखना है और फिर इसे संकलित करने के लिए एलएलवीएम का उपयोग करना है, लेकिन यह जटिल है, और मैं क्लीनर समाधान की तलाश में हूं। – Imagist

+0

एलएलवीएम, पीछे की तरफ के लिए एक शानदार विकल्प है। मुझे इसके साथ बहुत अच्छा भाग्य मिला है। –

उत्तर

10

आप एलएलवीएम सी बाइंडिंग का उपयोग कर सकते हैं, लेकिन इसके लिए आपकी भाषा को पर्याप्त सी समझने की आवश्यकता है।

एक और विकल्प एलएलवीएम असेंबली भाषा (एक टेक्स्ट फ़ाइल) लिखना और एलएलएमएम का उपयोग करना है- इसे बिटकोड में बदलने के लिए।


संपादित करें:

मैं फिर से पढ़ आप सवाल, मुझे लगता है कि आप पहले से ही LLVM-रूप बनाम बंधन सामान को समझते हैं।

आपकी भाषा शायद समर्थन पुस्तकालयों आदि के लिए किसी भी तरह से बांधने में सक्षम होना चाहती है। सी के लिए सी बाइंडिंग का उपयोग करें और जब आप आगे बढ़ें तो अपनी बाइंडिंग लिखें।

+0

मैंने नहीं सोचा था कि सी बाइंडिंग एक * अस्थायी * समाधान हो सकता है। अच्छा विचार। – Imagist

1

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

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