क्या आश्रित प्रकार के लिए कंपाइलर एक इंट्रिप्टर की तुलना में बहुत कठिन है?


12

मैं इस ट्यूटोरियल की तरह आश्रित प्रकारों को लागू करने के बारे में कुछ सीख रहा हूं , लेकिन उनमें से ज्यादातर दुभाषियों को लागू कर रहे हैं। मेरा सवाल यह है कि ऐसा लगता है कि आश्रित प्रकार के लिए एक कंपाइलर को लागू करना एक कंपाइलर की तुलना में बहुत कठिन है, क्योंकि आप वास्तव में प्रकार की जाँच के लिए निर्भर प्रकार के तर्कों का मूल्यांकन कर सकते हैं।

इसलिए

  • क्या मेरी भोली छाप सही है?
  • यदि यह सही है, तो किसी भी उदाहरण / संसाधनों पर निर्भर प्रकार का समर्थन करने वाली एक सांख्यिकीय रूप से जाँच की गई भाषा को लागू करने के बारे में?

नहीं, जैसा कि आप एक ज्ञात समस्या पर निर्भर प्रकार के संकलन समस्या को कम कर सकते हैं: (1) एक दुभाषिया का उपयोग करके कार्यक्रम की जांच करें; (2) कार्यक्रम को OCaml / Haskell / जो भी हो उसे निकालें; (3) संकलन का उपयोग कर ocamloptया GHC :-) (यह Coq और Agda दृष्टिकोण है, वैसे।)
xrq

जवाबों:


13

यह एक दिलचस्प सवाल है! जैसा कि एंथनी का जवाब बताता है, एक गैर-निर्भर कार्यात्मक भाषा को संकलित करने के लिए सामान्य दृष्टिकोण का उपयोग कर सकता है, बशर्ते आपके पास पहले से ही टाइप-चेकिंग के लिए शर्तों का मूल्यांकन करने के लिए दुभाषिया हो

यह एडविन ब्रैडी द्वारा लिया गया दृष्टिकोण है। अब यह वैचारिक रूप से सरल है, लेकिन यह प्रकार की जाँच करते समय संकलन के गति लाभों को खो देता है। यह कई शिष्टाचार में संबोधित किया गया है।

सबसे पहले, एक आभासी मशीन को लागू कर सकता है जो रूपांतरण जांच करने के लिए मक्खी पर बाइट-कोड के लिए शब्दों को संकलित करता है। बिन्यामीनvm_compute ग्रीगोइरे द्वारा Coq में लागू किए जाने के पीछे यह विचार है । जाहिरा तौर पर इस सटीक विषय पर डिर्क क्लेब्लैट द्वारा यह थीसिस भी है , लेकिन एक आभासी मशीन के बजाय वास्तविक मशीन कोड नीचे।

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


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

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

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

1
मुझे आश्चर्य है कि अगर फ्यूचरामा अनुमानों की तकनीक का इस्तेमाल दुभाषिया को प्रभावी ढंग से करने के लिए किया जा सकता है, तो प्रभावी रूप से एक संकलक के साथ समाप्त हो सकता है?
स्टीवन शॉ

1
केवल एक चीज जो मैंने देखी है वह है Unison unisonweb.org/2017-10-13/scala-world.html
Steven Shaw

10

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.