2010-01-08 12 views
5

मैं सिर्फ सॉफ्टवेयर इंजीनियरिंग रेडियो (TRANSCRIPT: http://www.se-radio.net/transcript-57-compiletime-metaprogramming) में एपिसोड 57 को सुन रहा था, मैं केवल 40 मिनट में हूं, लेकिन मुझे आश्चर्य है कि सी कंपाइलर्स की भाषा क्यों है- जब कोई योजना सबसेट एक प्रतीत होता है बेहतर फिट? (या कुछ अन्य एचएलएल) क्यों सी कंपाइलरों की भाषा है- जब कोई योजना सबसेट बेहतर फिट प्रतीत होता है?

पी एस मूल रूप से LTU http://lambda-the-ultimate.org/node/3754

+6

आह ठीक है, एलटीयू में लोग बहुत कट्टर हैं: "यदि आप इसे योजना में प्रोग्राम नहीं कर सकते हैं, तो यह प्रोग्रामिंग के लायक नहीं है";) लिस्पस बहुत अच्छी भाषाएं हैं जो छोटी मात्रा में टेबल पर बहुत सारी सुविधाएं लाती हैं वाक्यविन्यास और कीवर्ड, लेकिन क्योंकि वे अंतर्निहित डेटाटाइप (बाइट, चार, लघु, int ...) के लिए पारदर्शी समर्थन प्रदान नहीं करते हैं, अधिकांश लोग प्रदर्शन में शीर्ष पर होने पर भरोसा नहीं करते हैं। –

+1

एक स्कीम सबसेट की अवधारणा मुझे साजिश देती है। मैंने सोचा कि यह पहले से ही एक बहुत ही कम भाषा थी। –

+0

@ डेविड: आर 5 आरएस और इसके वंशज (मैं ईआरआर 5 आरएस सोच रहा हूं) बहुत कम हैं, हां। दूसरों, ठीक है, जिनके बारे में आप बात करते हैं, वे गैर-न्यूनतम या अस्तित्वहीन हैं। :- पी http://www.xkcd.com/566/ –

उत्तर

12

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

+0

मेरे पास आपके लिए खंडन करने के आंकड़े नहीं हैं, लेकिन चिकन-एंड-अंडे की समस्या के कारण ऐसा लगता है: उस भाषा में कोई मौजूदा कंपाइलर उपलब्ध नहीं है, कैसे क्या उन कंपाइलरों को कभी भी नए वास्तुकला पर बनाया गया है? –

+4

@ करल स्मोट्रिकज़: ठीक है, सर्वव्यापी सी कंपाइलर जीसीसी सी में लिखा गया है इसी प्रकार एरलांग कंपाइलर एरलांग में लिखा गया है। और लिस्प eval समारोह, जो लिस्प संकलक है लिस्प में लिखा गया था जब लिस्प केवल एक सिद्धांत था जब तक कि एक स्नातक छात्र कोड को देखा और महसूस किया कि वह सीधे इसे असेंबली में अनुवादित कर सकता है। तो मुझे लगता है कि पहला व्यावहारिक लिस्प संकलक मानव द्वारा संकलित किया गया था। – slebetman

+11

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

3

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

संयोग से, मुझे यकीन नहीं है कि मैं आपके आधार से सहमत हूं ... सी निश्चित रूप से सबसे व्यापक रूप से तैनात भाषा है, लेकिन अन्य भाषा संकलक (उदाहरण के लिए एमआईटी-स्कीम) अक्सर उन भाषाओं में लागू होते हैं।

6

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

3

यह शायद कारकों के संयोजन है:

  1. सी compilers, लगभग हर मंच के लिए उपलब्ध हैं यह आसान एक नई भाषा के लिए एक नया संकलक का निर्माण करने के लिए बना।
  2. इतिहास: सी एक बहुत लोकप्रिय भाषा है, इसलिए यह समझ में आता है कि बहुत सी परियोजनाएं सी में हैं (परियोजना से कोई फर्क नहीं पड़ता)।
  3. योजना, विशेष रूप से, बहुत अलोकप्रिय है (सी की तुलना में)।
+0

अगर हम स्वीकार करते हैं (2), क्यों कोई भी पहली भाषा में एक अलग भाषा के लिए एक कंपाइलर लिखता है? अगर वे एक कंपाइलर लिखते हैं, तो हम मान सकते हैं कि वे सिर्फ एक भाषा से ज्यादा जानते हैं, इसलिए (3) किसी भी ठोस कारण की तरह नहीं लगते हैं। – Niki

+2

हम 2 स्वीकार कर सकते हैं, और अन्य सभी कंपाइलरों को हटा नहीं सकते हैं। मैं आपके तर्क को कम नहीं करता हूं। बीटल्स लोकप्रिय हैं, जो अन्य संगीतकारों की आवश्यकता और इच्छा को अस्वीकार नहीं करता है। –

+0

@nikie: सिर्फ इसलिए कि एक भाषा लोकप्रिय है इसका मतलब यह नहीं है कि दूसरों का बिल्कुल उपयोग नहीं किया जाता है। यदि 1 मिलियन प्रोग्रामर सी का उपयोग करते हैं, और योजना की तरह 1 हजार, और कुछ यादृच्छिक प्रोग्रामर ने योजना के लिए एक नया कंपाइलर लागू करने का निर्णय लिया है, तो यह कतरनी संख्याओं द्वारा सी प्रोग्रामर होने की अधिक संभावना है। इसके अलावा, बहुत से कंपाइलर्स स्वयं लोगों द्वारा उपयोग के लिए नहीं लिखे जाते हैं, लेकिन अन्य कारणों से (वाणिज्यिक उपयोग, एक नई भाषा सीखना, मज़ा, इत्यादि)। –

1

सी Flex and Yacc जो, एक संकलक के दृश्यपटल (पार्सर और lexer) को लागू करने के साथ मदद करता है, तो मैं सही याद उनके उत्पादन (ग कोड

+1

वाईएसीसी के कई प्रकार और उत्तराधिकारी हैं जो विभिन्न प्रकार की भाषाओं में आउटपुट कर सकते हैं। – Niki

+0

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

1

कई compilers आज सी के अलावा अन्य भाषाओं में लिखे गए हैं तक ही सीमित है है जैसे योजना)। उन्हें पोर्टेबल बनाने के लिए वे शुरू में सी कोड को लक्षित भाषा के रूप में उत्पन्न करते हैं।

0

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

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