2012-02-08 13 views
16

जैसा कि मैं इसे समझता हूं, जीएचसी (शानदार ग्लासगो हास्केल कंपाइलर) हास्केल को "कोर" में संकलित करता है, और उसके बाद कोर को मशीन कोड में संकलित करता है। क्या यह एचएससीएल कोर को जीएचसी कोर के रूप में वितरित करने के लिए व्यावहारिक होगा, जैसे कि यह "बाइटकोड" था? क्या इस तरह के वितरण के लिए कोई फायदा होगा? क्यों या क्यों नहीं?जीएचसी कोर "बाइटकोड" के रूप में?

उत्तर

20

यह व्यावहारिक नहीं होगा; जीएचसी कोर पोर्टेबल नहीं है। उदाहरण के लिए, 32-बिट मशीन पर, 64-बिट अंकगणित को कोर में विदेशी फ़ंक्शन कॉल पर संकलित किया जाता है, लेकिन 64-बिट मशीन पर, यह देशी मशीन-शब्द अंकगणित का उपयोग करता है।

अधिक महत्वपूर्ण बात यह है कि जीएचसी वास्तव में पढ़ नहीं सकता कोर; यह इसे कुछ प्रारूपों में प्रिंट कर सकता है, लेकिन इनमें से किसी भी प्रारूप को पढ़ने के लिए कोई वास्तविक कोड नहीं है। मुझे यकीन नहीं है कि ऐसा करने में कोई बड़ी बाधा होगी, लेकिन यह कई सालों तक दस्तावेजी स्थिति है , इसलिए मैं जल्द ही किसी भी समय प्रदर्शित होने की उम्मीद नहीं करता।

कोर सामान्य रूप से हास्केल के बहुत करीब है; यह स्पष्ट नहीं है कि आप उस फॉर्म में कोड वितरित करने से क्या खरीदेंगे। हास्केल को कोर में बदलने के लिए जो समय लगता है वह आम तौर पर अंतिम कार्यक्रम को जोड़ने जैसी चीजों को करने के लिए कम समय से कम होता है, इसलिए यह आमतौर पर संकलन समय पर अधिक बचत नहीं करेगा।

इसके अलावा, हास्केल स्रोत कोड की तुलना में कोर को कम जांच की जाती है (हालांकि मुझे लगता है कि -dcore-lint इसे कम करेगा), और इसे प्रभावी ढंग से सैंडबॉक्स करना मुश्किल होगा (सुरक्षित हैस्केल है, लेकिन कोई सुरक्षित कोर नहीं है)। बेशक, बाइटकोड का स्रोत विश्वसनीय होने पर ये नुकसान लागू नहीं होते हैं।

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

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