2012-01-19 9 views
5

से संकलित करना मैं एक साधारण भाषा के लिए एक अग्रभाग बनाना चाहता हूं जो जीएचसी कोर का उत्पादन करेगी। मैं फिर इस आउटपुट को लेना चाहता हूं और इसे सामान्य जीएचसी पाइपलाइन के माध्यम से चलाऊंगा। this page के अनुसार, यह ghc कमांड से सीधे संभव नहीं है। मुझे आश्चर्य है कि कोई ऐसा करने का तरीका है।जीएचसी कोर

मैं आदर्श रूप से ghc-api को कुछ फ़ंक्शन कॉल की उम्मीद कर रहा हूं लेकिन मैं किसी भी सुझाव के लिए भी खुला हूं जिसमें जीएचसी के स्रोत में हैकिंग शामिल नहीं है। कोई संकेतक मदद करेगा!

+0

"वर्तमान में (संस्करण 6.8.2 के रूप में), जीएचसी में बाहरी कोर फ़ाइलों में स्रोत के रूप में पढ़ने की क्षमता नहीं है।" आपको _internal_ कोर में एक प्रस्तुति देना होगा और जीएचसी को पास करना होगा, मुझे डर है। आपके लिए मैं आशा करता हूं कि मैं अत्यधिक निराशावादी हूं, लेकिन मेरा मानना ​​है कि आपको ghc-api को कुछ कॉलों की आवश्यकता होगी। –

उत्तर

5

बाहरी कोर फ़ाइलों को पढ़ने का कोई तरीका नहीं है, चाहे ghc कमांड या एपीआई के माध्यम से। क्षमा करें :(

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

+1

आपके पास हास्केल-जो-मूल रूप से पहले से ही कोर के लिए संकलित करने के लिए बेहतर भाग्य हो सकता है। –

9

ध्यान दें कि कोर एक स्पष्ट रूप से टाइप की गई भाषा है, जो अन्य भाषाओं से उत्पन्न करना मुश्किल हो सकता है (जीएचसी प्रकार चेकर I सभी प्रकारों को नफरत है इसलिए इसमें कोई समस्या नहीं है)। उदाहरण के लिए, हमेशा की तरह पहचान समारोह (id = \x -> x :: forall a. a -> a)

id = \(a :: *) (x :: a) -> a 

जहां a तरह * का एक प्रकार चर रहा है हो जाता है। यह टाइप-लेवल forall बाइंडिंग के लिए टर्म-स्तरीय प्लेस धारक है। इसी प्रकार, id पर कॉल करते समय आपको इसे पहला तर्क के रूप में एक प्रकार देने की आवश्यकता है, इसलिए हास्केल अभिव्यक्ति (id 42) को (id Int 42) में अनुवादित किया जाता है। इस तरह के प्रकार बाइंडिंग और प्रकार के अनुप्रयोग जेनरेट किए गए मशीन कोड में मौजूद नहीं होंगे, लेकिन वे संकलक परिवर्तनों को सत्यापित करने के लिए उपयोगी हैं।

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

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