एक संकलक की अनुवाद क्षमता के लिए एक अच्छा परीक्षण आत्म-संकलन है: किसी दिए गए संकलक को खुद को संकलित करने में कितना समय लगता है? C ++ के लिए यह बहुत लंबा समय (घंटे?) लेता है। तुलना करके, पास्कल / मोडुला -2 / ओबेरॉन संकलक एक से कम में खुद को संकलित करेगा एक आधुनिक मशीन [1] में सेकंड ।
गो इन भाषाओं से प्रेरित है, लेकिन इस दक्षता के कुछ मुख्य कारणों में शामिल हैं:
कुशल स्कैनिंग और पार्सिंग के लिए एक स्पष्ट रूप से परिभाषित वाक्यविन्यास है जो गणितीय रूप से ध्वनि है।
एक प्रकार-सुरक्षित और सांख्यिकीय रूप से संकलित भाषा जो मॉड्यूल सीमाओं के पार निर्भरता और प्रकार की जाँच के साथ अलग संकलन का उपयोग करती है, हेडर फ़ाइलों के अनावश्यक री-रीडिंग और अन्य मॉड्यूल के पुन: संकलन से बचने के लिए - जैसा कि सी / ++ + जैसे स्वतंत्र संकलन के विपरीत है। इस तरह के कोई भी क्रॉस-मॉड्यूल चेक कंपाइलर द्वारा नहीं किए जाते हैं (इसलिए उन सभी हेडर फ़ाइलों को बार-बार पढ़ने की आवश्यकता है, यहां तक कि एक सरल एक-लाइन "हैलो वर्ल्ड" प्रोग्राम के लिए भी)।
एक कुशल संकलक कार्यान्वयन (उदाहरण के लिए एकल-पास, पुनरावर्ती-वंशीय टॉप-डाउन पार्सिंग) - जो निश्चित रूप से ऊपर 1 और 2 द्वारा मदद करता है।
ये सिद्धांत पहले से ही 1970 और 1980 के दशक में मेसा, एडा, मोडुला -2 / ओबेरॉन और कई अन्य भाषाओं में पहले से ही ज्ञात और पूरी तरह से लागू किए गए हैं, और केवल अब (2010 के दशक में) गो (Google) जैसी आधुनिक भाषाओं में अपना रास्ता खोज रहे हैं , स्विफ्ट (Apple), C # (Microsoft) और कई अन्य।
चलो आशा करते हैं कि यह जल्द ही आदर्श होगा और अपवाद नहीं। वहां जाने के लिए दो चीजों का होना जरूरी है:
सबसे पहले, Google, Microsoft और Apple जैसे सॉफ़्टवेयर प्लेटफ़ॉर्म प्रदाताओं को एप्लिकेशन डेवलपर्स को नए संकलन पद्धति का उपयोग करने के लिए प्रोत्साहित करके शुरू करना चाहिए , जबकि उन्हें अपने मौजूदा कोड बेस को फिर से उपयोग करने के लिए सक्षम करना चाहिए। यह वही है जो अब Apple स्विफ्ट प्रोग्रामिंग भाषा के साथ करने की कोशिश कर रहा है, जो ऑब्जेक्टिव-सी के साथ सह-अस्तित्व में हो सकता है (क्योंकि यह समान रनटाइम वातावरण का उपयोग करता है)।
दूसरा, अंतर्निहित सॉफ़्टवेयर प्लेटफ़ॉर्मों को अंततः इन सिद्धांतों का उपयोग करते हुए समय के साथ फिर से लिखा जाना चाहिए, जबकि एक साथ मॉड्यूल पदानुक्रम को कम करने के लिए उन्हें कम अखंड बनाने के लिए। यह निश्चित रूप से एक विशाल कार्य है और एक दशक के बेहतर हिस्से को ले सकता है (यदि वे वास्तव में ऐसा करने के लिए पर्याप्त साहसी हैं - जो कि मैं Google के मामले में बिल्कुल भी सुनिश्चित नहीं हूं)।
किसी भी मामले में, यह वह प्लेटफ़ॉर्म है जो भाषा को अपनाने वाला है, न कि दूसरे तरीके से।
संदर्भ:
[१] http://www.inf.ethz.ch/personal/wirth/ProjectOberon/PO.System.pdf , पेज ६: "कंपाइलर लगभग ३ सेकंड में खुद को संकलित करता है"। यह भाव एक कम लागत वाले Xilinx संयमी -3 FPGA विकास बोर्ड के लिए 25 मेगाहर्ट्ज की घड़ी की आवृत्ति पर चल रहा है और मुख्य मेमोरी के 1 एमबीटी की विशेषता है। इससे एक कंपाइलर आसानी से 1 गीगाहर्ट्ज से ऊपर की घड़ी की आवृत्ति पर चलने वाले आधुनिक प्रोसेसर और मुख्य मेमोरी के कई GBytes (यानी Xilinx संयमी -3 GPGA बोर्ड की तुलना में अधिक शक्तिशाली के कई आदेश) के लिए "1 सेकंड से भी कम" को एक्सट्रपलेट किया , यहां तक कि जब I / O गति को ध्यान में रखा जाता है। पहले से ही 1990 में जब ओबेरॉन 25MHz NS32X32 प्रोसेसर पर 2-4 एमबीटीएस मुख्य मेमोरी के साथ चलाया गया, तो कंपाइलर ने कुछ ही सेकंड में खुद को संकलित कर लिया। वास्तव में प्रतीक्षा की धारणा कंपलीशन चक्र को पूरा कर सकता है फिर भी ओबेरॉन प्रोग्रामर के लिए पूरी तरह से अज्ञात था। विशिष्ट कार्यक्रमों के लिए, यह हमेशामाउस बटन से उंगली को हटाने में अधिक समय लगा, जिससे कंपाइलर की तुलना में कंपाइलर के इंतजार की तुलना में कंपाइल कमांड पूरी हो गई। यह वास्तव में तत्काल संतुष्टि था, लगभग शून्य प्रतीक्षा समय के साथ। और उत्पादित कोड की गुणवत्ता, भले ही हमेशा पूरी तरह से सबसे अच्छा संकलक के साथ सममूल्य पर उपलब्ध नहीं है, फिर भी अधिकांश कार्यों के लिए उल्लेखनीय रूप से अच्छा था और सामान्य रूप से काफी स्वीकार्य था।