क्या हर भाषा C में लिखी गई है?


180

कभी-कभी विभिन्न भाषाओं (C / C ++, C #) में प्रोग्रामिंग करते समय, यह विचार मेरे दिमाग में आता है:

  • क्या प्रत्येक और हर भाषा सी प्रोग्रामिंग भाषा में लिखी गई है?
  • क्या C भाषा सभी भाषाओं की माता / पिता है?
  • क्या प्रत्येक अवधारणा ( OOP , आदि) C में लागू की गई है?

क्या मैं सही दिशा में हूँ?


58
@XLAnt: कई (हो सकता है यहां तक ​​कि सबसे) सी संकलक सी में लिखे गए हैं
जोर्ग डब्ल्यू मित्तग

32
@ नील: सी ++ किसी भी चीज़ को संकलित नहीं करता है। C ++ एक भाषा है। भाषाएँ संकलन नहीं करतीं, संकलनकर्ता करते हैं।
जोर्ग डब्ल्यू मित्तग

12
@XLAnt: मुझे ऐसा नहीं लगता। लेकिन पहले ओबेरॉन संकलक, उदाहरण के लिए, ओबरन में लिखा गया था और फिर हाथ-अनुवादित (जो संकलन का एक रूप है, मुझे लगता है) फोरट्रान के लिए। इस संकलक को फिर एक फोरट्रान संकलक के साथ संकलित किया गया था, जिसके परिणामस्वरूप ओबेरॉन संकलक का उपयोग ओबेरॉन संकलक को संकलित करने के लिए किया गया था और उस बिंदु से, संकलक के पिछले संस्करण का उपयोग अगले एक को संकलित करने के लिए किया गया था।
जोर्ग डब्ल्यू मित्तग

18
@ नील यह वास्तव में पांडित्य नहीं है। यह सटीक है: एक भाषा एक युक्ति है। यह एक संकलक के रूप में, एक दुभाषिया, एक संकर, आदि के रूप में लागू किया जा सकता है। आप एक भाषा के लिए एक संकलक लिख सकते हैं, लेकिन संकलक भाषा नहीं है। मुझे लगता है कि समस्या भ्रामक है क्योंकि ऐसी भाषाएं हैं जिनके लिए इसके संदर्भ कार्यान्वयन को छोड़कर कहीं भी कोई कल्पना नहीं है। लेकिन उन मामलों में भी, मैं भाषा पर बहस करूँगा (यानी लेखक के मन में आदर्श था) कार्यान्वयन / संकलक / दुभाषिया / आदि से अलग है।
एंड्रेस एफ।

21
Downvoters: यह एक स्पष्ट जवाब के साथ एक बहुत ही उचित सवाल है। कि उत्तर "नहीं" है, कोई कारण नहीं है। इसके बजाय, जवाब देने और समझाने पर विचार करें।
एंड्रेस एफ।

जवाबों:


207

नहीं।

OCaml, Haskell, Lisp बोलियाँ जैसे स्कीम, और कई अन्य भाषाओं का उपयोग अक्सर शौक भाषाओं के विकास में किया जाता है।

कई भाषाओं को C में लागू किया गया है क्योंकि यह एक सर्वव्यापी भाषा है, और लीकर-पार्सर जनरेटर (जैसे कि याक और बाइसन) जैसे संकलक-लेखन उपकरण अच्छी तरह से समझे जाते हैं और लगभग सर्वव्यापी के रूप में।

लेकिन C स्वयं मूल रूप से C में विकसित नहीं हो सका जब इसे पहली बार बनाया गया था। यह वास्तव में, मूल रूप से बी भाषा का उपयोग करके विकसित किया गया था । पहले की भाषाओं (जैसे फोरट्रान) को आमतौर पर सी असेंबली से पहले एक देशी विधानसभा भाषा या यहां तक ​​कि मशीन कोड का उपयोग करके बूटस्ट्रैप किया गया था।

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

सी कहानी का एक छोटा सा हिस्सा है, इन विचारों के अस्तित्व में आने के दशकों बाद।


40
हालांकि यह सच है कि पहले C कंपाइलर स्पष्ट रूप से C में नहीं लिखे जा सकते थे, अब यह निश्चित रूप से संभव है।
रीहैब

17
@ क्रेब प्रभु और सच। GCC C में लिखा गया है और GCC का उपयोग करके संकलित किया गया है ।
डार्कहॉग

9
बेशक, CCC को अब C ++ में फिर से लिखा जा रहा है, लेकिन यह उतना महत्वपूर्ण नहीं है जितना कि यह तथ्य है कि पहला C कंपाइलर C. में नहीं लिखा जा सकता है
ग्रेफेड

10
@greyfade gcc कुछ समय से C नहीं है। यह "अब दोबारा लिखा जा रहा है" यह "सी" दो वर्षों में C ++ में लिखा गया है (इसका इससे भी पुराना है, हालांकि, जब विलय हुआ तो इसे C ++ में स्थानांतरित कर दिया गया)।

13
@greyfade "C नहीं है, लेकिन C ++ सुविधाओं के साथ" C ++ की परिभाषा की तरह है?
कुटलुमाइक

91

क्या प्रत्येक भाषा C भाषा में लिखी गई है?

एक भाषा अमूर्त गणितीय नियमों और प्रतिबंधों का एक सेट है ("अगर मैं यह लिखता हूं , तो ऐसा होता है")। यह वास्तव में कुछ भी नहीं लिखा है।

यह निर्दिष्ट किया जाता है, आमतौर पर अंग्रेजी के एक औपचारिक उपसमुच्चय, गणितीय संकेतन और शायद कुछ विशेष विनिर्देश भाषा के मिश्रण में। वाक्यविन्यास अक्सर EBNF या ABNF के एक प्रकार में निर्दिष्ट किया जाता है ।

उदाहरण के लिए, यहाँ forISO रूबी भाषा विशिष्टता से अभिव्यक्ति के विनिर्देश दिए गए हैं:

.311.5.2.3.4 forअभिव्यक्ति

वाक्य - विन्यास

  • for- अभिव्यक्ति for for-variable [यहाँ कोई लाइन-टर्मिनेटर नहीं है] in अभिव्यक्ति do-clause end
  • for-variable बाएं-हाथ-साइड | एकाधिक-बाएँ-हाथ-साइड

शब्दार्थ

एक अभिव्यक्ति का मूल्यांकन इस प्रकार किया जाता है:

  1. अभिव्यक्ति का मूल्यांकन करें । यदि अभिव्यक्ति का मूल्यांकन ब्रेक-एक्सप्रेशन , नेक्स्ट-एक्सप्रेशन या रिडो-एक्सप्रेशन द्वारा समाप्त किया जाता है , तो व्यवहार अनिर्दिष्ट होता है। अन्यथा, Oपरिणामी मूल्य होने दें ।
  2. चलो Eहोना प्राथमिक-विधि-मंगलाचरण फार्म के प्राथमिक अभिव्यक्ति [कोई लाइन टर्मिनेटर यहाँ] .each do | ब्लॉक पैरामीटर-सूची | ब्लॉक शरीर end है, जहां का मूल्य प्राथमिक अभिव्यक्ति है O, ब्लॉक पैरामीटर सूची है तक- चर , ब्लॉक-शरीर है यौगिक बयान का do-खंड

    मूल्यांकन करना E; हालाँकि, यदि कोई ब्लॉक जिसका ब्लॉक-बॉडी है, तो इस मूल्यांकन के दौरान फॉर-एक्सप्रेशन के डू-क्लॉज का कंपाउंड-स्टेटमेंट कहा जाता है, स्टेप c को छोड़कर the11.3.3 में स्टेप्स) और स्टेप e) 4) करेगा इस कॉल के मूल्यांकन के लिए लिया जाएगा।

  3. के मान के लिए अभिव्यक्ति मंगलाचरण के परिणामस्वरूप मूल्य है।

यहाँ Scala के प्रकार अनुरूपता नियमों से एक अलग उदाहरण दिया गया है:

बहुरूपी प्रकार [ 1 ए : एल 1 <: यू 1 ,…, ए एन >: एल एन <: यू एन ] टी बहुरूपी प्रकार के अनुरूप है [a1>: L: 1 <: U ic 1 ,…, a n >: L < n <: U: n ] T assum यदि, L ′ 1 <: a 1 <: U: 1 , ..., L ′ n <: a n : n <: U′n किसी के पास T </ T है: ' और एल मैं <: एल' मैं और यू ' मैं<: I i for i ∈ {1,…, n}


क्या सी भाषा माँ / सभी भाषाओं की जनक है?

नहीं ऐसा नहीं है। C बहुत युवा है। बहुत सारी पुरानी भाषाएं हैं। चूंकि समय यात्रा शारीरिक रूप से असंभव है, इसलिए सी के लिए उन पुरानी भाषाओं पर जो भी प्रभाव पड़ा है, उसके लिए बस असंभव है।

  • प्लांकालुक (1943)
  • स्पीडकोडिंग (1953)
  • फोरट्रान (1954)
  • आईपीएल (1956)
  • लिस्प (1958)
  • अल्गोल (1958)
  • COBOL (1959)
  • JOVIAL (1960)
  • एपीएल (1962)
  • SIMULA (1962)
  • SNOBOL (1962)
  • CPL (1963)
  • बेसिक (1964)
  • पीएल / I (1964)
  • आरपीजी (1964)
  • BCPL (1966)
  • ISWIM (1966)
  • MUMPS (1967)
  • फोर्थ (1968)
  • लोगो (1968)
  • REFAL (1968)
  • बी (1969)
  • BLISS (1970)
  • पास्कल (1971)
  • केआरएल (1971)
  • स्मॉलटॉक (1972)

C के आविष्कार से पहले ही वे सभी मौजूद थे। और कई अन्य लोगों में सी का कोई प्रभाव नहीं है, इसके अस्तित्व में होने के बाद भी। भाषाओं का PASCAL-परिवार (ALGOL-58, ALGOL-60, ALGOL-X, ALGOL-W, PASCAL, Modula-2, Oberon, Oberon-2, Active Oberon, Component Pascal) एक पूरी तरह से अलग वंश है। संपूर्ण लिस्प परिवार (LISP, फ्रांज लिस्प, इंटरलाइप, MacLisp, स्कीम, फ्लेवर, LOOPS, कॉमनवेलॉप्स, डायलन, कॉमन लिस्प, आर्क, क्लोजर, रैकेट, आदि) भी असंबंधित है। कार्यात्मक भाषाएं (ISWIM, KRL, मिरांडा, ML, SML, CAML, OCaml, F #, Haskell, Gofer, Clean) और पूरे भरोसेमंद रूप से टाइप किए गए परिवार (Agda, Coq, GURU, Idris) C से यथासंभव दूर हैं। यही बात स्मालटाक परिवार (स्मालटाक, सेल्फ, न्यूजक, अस, कोरज), लॉजिक प्रोग्रामिंग परिवार (प्लानर, प्रोलॉग, मर्करी), एसक्यूएल और कई अन्य लोगों के लिए भी लागू होती है।

प्रत्येक अवधारणा (ओओपी आदि) सभी सी भाषा में लागू है?

ओओ अवधारणाओं के साथ पहली भाषाएं सिमूला (1960) और स्मॉलटॉक (1972) थीं, लेकिन ऑब्जेक्ट-ओरिएंटेड सिस्टम 1953 तक (बिना उन्हें कॉल किए) बनाया गया था। फिर से, C के अस्तित्व में आने से बहुत पहले, इसलिए OO का C से कोई संबंध नहीं हो सकता है।



2
@leftaroundabout: यह एक बेहतरीन ब्लॉगपोस्ट है, जो वर्षों से मेरे पसंदीदा में से एक है।
जोर्ग डब्ल्यू मित्तग

1
@FrancisDavey: धन्यवाद। मैंने मेमोरी से सूची को संकलित करना शुरू किया, फिर मैंने उन तारीखों को जोड़ा जिन्हें मैंने उन्हें विकिपीडिया पर देखकर याद नहीं किया। उसके बाद, मुझे विकिपीडिया पर कई भाषाओं का समय मिला, और वहाँ से कुछ और भाषाओं को चुना। चूंकि BCPL पर लेख 1966 का हवाला देता है, लेकिन समयरेखा 1967 का हवाला देती है, मैंने ध्यान नहीं दिया कि मैंने पहले ही BCPL जोड़ लिया था। मैं नकल निकाल दूंगा।
जोर्ग डब्ल्यू मित्तग

1
आपकी सूची में, "htroF" पीछे की ओर वर्तनी नहीं है?
6

2
"समय यात्रा शारीरिक रूप से असंभव है" - यह एक अत्यधिक विवादास्पद दावा है। पाठ्यक्रम के इस उत्तर के मूल्य से अलग नहीं होता है।
कोनराड रुडोल्फ

50

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

  • पायथन ( CPython ) का संदर्भ कार्यान्वयन C में लिखा गया है (लेकिन अन्य भाषाओं में लिखे गए अन्य कार्यान्वयन हैं, जैसे Jython / Java, PyPy / Python, IronPython / C # ...)
  • PHP Zend Engine C में लिखा गया है
  • सन माइक्रोसिस्टम्स द्वारा विकसित बहुत पहले जावा कंपाइलर सी में लिखा गया था, लेकिन अब कक्षा के पुस्तकालयों को हमेशा जावा में लिखा जाता है (क्योंकि उन्हें जावा वीएम का उपयोग करके चलाने का इरादा है)। जेएनआई (जावा नेटिव इंटरफेस) का उपयोग करने वाले कुछ पुस्तकालयों को आंशिक रूप से अन्य भाषाओं में लिखा जा सकता है, क्योंकि उनका इरादा जेवीएम का उपयोग करना है।

    Sun / Oracle VM C ++ में लिखा गया है। BEA / Weblogic / Oracle VM को C. में लिखा गया है, लेकिन जावा, लिस्प, SmallTalk (IBM) में JVM लिखा हुआ है ...

  • पर्ल है कार्यान्वित एक कोर दुभाषिया, सी में लिखा के रूप में, एक साथ मॉड्यूल का एक बड़ा संग्रह, पर्ल और सी में लिखे साथ (लेकिन Pugs , पर्ल 6 प्रोग्रामिंग भाषा के लिए एक संकलक और दुभाषिया, हास्केल में लिखा है)
  • आधिकारिक रूप से रूबी दुभाषिया, जिसे अक्सर माटज़ रूबी दुभाषिया या MRI के रूप में संदर्भित किया जाता है, C में लिखा जाता है और अपनी रूबी-विशिष्ट आभासी मशीन का उपयोग करता है (लेकिन वहाँ JRuby, एक जावा कार्यान्वयन है जो जावा कंप्यूटर मशीन पर चलता है; रुबिनियस, एक C ++; bytecode वर्चुअल मशीन जो रनटाइम पर मशीन कोड के संकलन के लिए LLVM का उपयोग करती है ...)
  • R का लगभग 50% C में लिखा गया है
  • और, ज़ाहिर है, सी (सी) सी में लिखा गया है ! (लेकिन PDP-11 को लक्षित पहला C संकलक, B और कोडांतरक का मिश्रण था)।

कई कारण हैं कि सी को अक्सर क्यों चुना गया: प्रदर्शन, पोर्टेबिलिटी, अनुभव।

आखिरी शायद सबसे महत्वपूर्ण है: 1991 में पायथन की शुरुआत हुई थी, 1994/1995 में PHP, 1988 में पर्ल, 1995 में रूबी। उन वर्षों में जावा को अभी जारी किया गया था और C ++ अभी तक मानकीकृत नहीं हुआ था।


कुछ हद तक संबंधित:


5
संकलक / व्याख्याकार कार्यान्वयन के दृष्टिकोण से, C एक संदर्भ बिंदु है / है। इसके अलावा इसने प्रत्यक्ष या अप्रत्यक्ष रूप से कई बाद की भाषाओं (कम से कम वाक्यात्मक) को प्रभावित किया है।
manlio

2
बहुत जल्द, आप कह सकेंगे कि C # C # में लिखा गया था! (तरह की)
DLEh

1
अधिकांश मोनो (जिसमें C # कंपाइलर और कई / अधिकांश .NET बेस क्लास लाइब्रेरी शामिल हैं) C # में लिखा गया है।
चार्ली कियान

3
प्रश्न का उत्तर "C सभी भाषाओं की माता / पिता है?" "नहीं" है, इसलिए मुझे नहीं लगता कि यह बहुत सारे उदाहरण प्रदान करने में सहायक है जो सी में लिखे गए हैं। काउंटर-उदाहरणों से मदद मिलेगी, लेकिन आपके विकल्प अभी भी सी से उतारे गए हैं। उदाहरण के लिए, भले ही जावा, पायथन, आदि। अब स्व-होस्टिंग कर रहे हैं, वे अभी भी C से बूटस्ट्रैप थे, इसलिए वे C के "पोते" जैसे हैं। LISP, FORTRAN, ML और (बेशक) मशीन कोड जैसी भाषाएँ सही काउंटर-उदाहरण हैं, क्योंकि C कभी भी शामिल नहीं था। उनकी रचना।
वारबो

2
कई भाषाओं की आकांक्षा, अपने आप में जहाँ तक संभव हो, लागू की जानी है। हालाँकि, ऐसा लगता है कि अधिकांश भाषाएँ C पर निर्भर हैं क्योंकि अधिकांश भाषाओं को C को उपयोगी बनाने के लिए सक्षम होने की आवश्यकता है; आधुनिक ऑपरेटिंग सिस्टम एपीआई और उपयोगी पुस्तकालयों में अधिकांश सी बाइंडिंग हैं। आपको "आपके द्वारा लिखित" से क्या मतलब है, इसके बारे में भी सावधान रहना होगा। एक भाषा कार्यान्वयन में आमतौर पर कई भाग होते हैं: कम से कम एक संकलक और एक रनटाइम सिस्टम। ओएस के साथ बेहतर इंटरफ़ेस के लिए अक्सर रनटाइम सिस्टम को सी में लिखा जाता है।
छद्म नाम

10

नहीं, कुछ भाषाएँ पूर्व-तारीख सी। और कई सी के स्वतंत्र रूप से लागू की जाती हैं, उदाहरण के लिए देखें http://en.wikipedia.org/wiki/Lisp_%28programming_language%29


2
जावा के कई कार्यान्वयन हैं, अधिकांश जावा में लिखे गए हैं। उद्देश्य-सी का GNU कार्यान्वयन C (या C ++ में लिखा गया है, वे हाल ही में बदल गए हैं, मुझे विश्वास है), LLVM कार्यान्वयन C ++ में लिखा गया है, और C # में लिखा गया एक दुभाषिया हुआ करता था। पायथन के कई कार्यान्वयन हैं, एक RPython में लिखा गया है, एक जावा में, एक C # में, और एक में C. PHP में छह मुख्य कार्यान्वयन हैं, दो जावा में, दो C # में, एक C में और एक C ++ में।
जोर्ग डब्ल्यू मित्तग

1
सं। भाषा डिजाइनर निश्चित रूप से अन्य भाषाओं से प्रभावित होते हैं, लेकिन यदि वे चाहें तो उन प्रभावों को अनदेखा कर सकते हैं।
जोर्ग डब्ल्यू मित्तग

2
@FaizanRabbani भाषाएं, मूल रूप से प्रतिमानों, प्रतिमानों और समझौतों की अवधारणाएं और विकल्प हैं - बहुत बार "भाषा अन्य भाषाओं (भाषाओं) से निर्मित / अनुकूलित होती है, लेकिन इसके संकलक की कार्यान्वयन भाषा से पूरी तरह से संबंधित नहीं है; भाषा X को भाषा Y से लिया जा सकता है लेकिन C या कुछ और पूरी तरह से लागू किया जाता है - और अक्सर ऐसा ही होता है। और इस मामले में, 'वैचारिक पूर्वज' महत्वपूर्ण है, लेकिन संकलक भाषा सिर्फ एक प्रासंगिक प्रासंगिक तकनीकी बारीकियों है जो समय के साथ बदल सकती है।
पीटरिस

3
यह अंतिम लिंक अगर संदिग्ध मान का है - इसमें बहुत सारी गलतियाँ वास्तव में इसे गंभीरता से लेना है।
अज्ञात कोडर

4
@ एसबेस्टियनगोडलेट: हॉटस्पॉट जावा भाषा का कार्यान्वयन नहीं है। यह JVM बाइटकोड भाषा का कार्यान्वयन है। वे दो पूरी तरह से अलग भाषाएं हैं। जावा भाषा का सबसे अधिक उपयोग किया जाने वाला कार्यान्वयन javacओरेकल JDK / OpenJDK से मार्टिन ओडस्की (स्काला प्रसिद्धि के) द्वारा लिखा गया है, 100% जावा में, ग्रहण कम्पाइलर, 100% जावा में (आईबीएम की बाइक संकलक से व्युत्पन्न ), कंपाइलर से लिखा गया है । IBM का J9, Jikes और 100% जावा से भी लिया गया है। AFAIK, एकमात्र जावा कंपाइलर जो कुछ व्यापक उपयोग में जावा में नहीं लिखा गया है, वह GCJ है
Jörg W Mittag

4

अगर मैं ऐसा कर सकता हूं तो मैं यह टिप्पणी करूंगा, लेकिन मैं यहां नहीं जा सकता हूं:

C का एक कारण इतना सर्वव्यापी लगता है क्योंकि यह विकसित की गई शुरुआती भाषाओं में से एक है, और आधुनिक भाषाओं की एक विशाल मात्रा इसकी संरचना (जावा, गो, पीएचपी, पर्ल, आदि) से दूर है - ऐसा लगता है जैसे इससे ज्यादा जगह है।

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

यह सब कहने के बाद, आपके प्रश्न का उत्तर "नहीं" है। C ALGOL नामक भाषा से बना है, और ALGOL (FORTRAN, Lisp, COBOL) और C (कोई भी दिमाग में नहीं आता) दोनों के साथ कई प्रतियोगी थे। ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग, यकीनन प्रोग्रामिंग डिज़ाइन में सबसे बड़ा प्रतिमान है, सी के साथ उत्पन्न नहीं हुई - सी ++ के बावजूद एक बहुत लोकप्रिय ओओपी भाषा है (यह लिस्प या सिमुला 67 में पहली बार दिखा, जो आप पूछते हैं उसके आधार पर)। जब ओओपी के बारे में आया था, तब तक सी एक ऐसी लोकप्रिय भाषा थी जिसे पहले होने की आवश्यकता नहीं थी - यह इतना लोकप्रिय था कि सी ++ "विस्तार", इसलिए बोलना, प्राथमिक ओओपी भाषाओं में से एक बन गया। यह मुख्य रूप से अपने शक्तिशाली मेमोरी कंट्रोल फीचर्स के कारण आधुनिक उपयोग में रहता है (आप अपनी संरचनाओं को स्थापित करने वाली मेमोरी को सीधे आवंटित कर सकते हैं और हटा सकते हैं), इसे तंग मेमोरी बजट (वीडियो गेम सोचो) और इसके अत्यधिक अनुकूलित संकलक (जाहिर है संकलक के आधार पर) पर कार्यक्रम बनाने की अनुमति देता है। जाहिर है, यहां तक ​​कि जावा जेआईटी संकलन के रूप में इन सुविधाओं को भी नुकसान हो रहा है और इन-लैंग्वेज मेमोरी मैनेजर अधिक उन्नत हो जाते हैं।


1
ऐसा लगता नहीं है कि बनाए गए कुछ बिंदुओं पर पर्याप्त रूप से कुछ भी नहीं दिया गया है और पहले से बताए गए सवालों के जवाब में, विशेष रूप से शीर्ष एक में , एक संदिग्ध कथन के अलावा कि "C ALGOL नामक भाषा से दूर है"
gnat

4
ALGOL में C का आधार शायद ही संदिग्ध है ... cm.bell-labs.com/who/dmr/chist.html , en.wikipedia.org/wiki/C_%28programming_language%29 ) पर देखें
WebabeCoder

वास्तविक कहानी और अधिक जटिल और उस से दिलचस्प है, मैं कहूंगा कि जिस तरह से चीजें यहां रखी गई हैं, वह पाठकों के लिए शायद ही मददगार हो
gnat

3

बेशक नहीं। यदि सी पहले मौजूद नहीं था तो सी में पहला सी कंपाइलर कैसे लिखा जा सकता है? यह चिकन और अंडे की समस्या नहीं है।

किसी भाषा के पहले संकलक को लिखने के कई तरीके हैं जिन्हें बूटस्ट्रैपिंग कहा जाता है

इसके अलावा अधिकांश कंपाइलर स्वयं-होस्टिंग प्राप्त करने का प्रयास करते हैं , या स्वयं इसकी भाषा संकलित करते हैं, मुख्यतः भाषा और कंपाइलर को बढ़ावा देने के लिए


12
पहला ओबेरॉन संकलक ओबेरॉन में लिखा गया था । यह पूरी तरह से ठीक है, बशर्ते आप एक प्रोफेसर हों और आपके पास बहुत से ऐसे छात्र हों जो आपके लिए कंपाइलर का हाथ-अनुवाद करेंगे (जो प्रो। विरेन के पास था)।
जोर्ग डब्ल्यू मित्तग

@ जोर्ग ऊपर वर्णित बूटस्ट्रैपिंग लेख में उल्लेख किया गया था, इसलिए मैं यह लिखने से परेशान नहीं हूं क्योंकि यह प्रश्न C के बारे में है और कोई C संकलक उस तरह से नहीं लिखा गया था
phuclv

14
@ JörgWMittag - पहला स्वचालित ओबेरॉन कंपाइलर ओबेरॉन में लिखा गया था। वास्तविक पहला ओबेरॉन संकलक छात्रों का एक समूह था।
nnnnnn

4
@nnnnnn: मैं इस "छात्रों के झुंड" को एक दुभाषिया मानूंगा, न कि संकलक।
पाओलो एबरमन

4
@ पाओलो एबरमन एक और मानवीय तत्व जोड़ने के लिए: "कंप्यूटर" मूल रूप से एक नौकरी का शीर्षक था
6

2

यहाँ कुछ प्रोग्रामिंग भाषाओं कि सी में नहीं लिखा जाता है, भाषाओं के साथ-साथ वे की एक सूची है कर रहे हैं में लागू:

  • हास्केल - हास्केल
  • इदरीस - हास्केल
  • अडगा - हास्केल
  • क्लैश - हास्केल
  • प्योरस्क्रिप्ट - हास्केल
  • एल्म - हास्केल
  • बुध - बुध
  • जंग - जंग (शुरू में OCaml)
  • जा - जा
  • क्रिस्टल - क्रिस्टल
  • OCaml - OCaml
  • फ्रीज - फ्रीज + जावा
  • हेक्से - ओकेम्क्ल + हेक्से
  • स्काला - स्काला
  • फितर्क - हास्केल
  • एटीएस - एटीएस

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

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

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


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

पुनश्च।, सी में बहुत सारे मूल विचार नहीं थे। यदि आप सभी ब्लॉक-संरचित, प्रक्रियात्मक प्रोग्रामिंग भाषाओं की माँ / पिता की तलाश कर रहे हैं, तो आप ALGOL पर एक नज़र डाल सकते हैं ।
सोलोमन स्लो

लिस्प मैक्रोज़ C की तुलना में बहुत बेहतर थे, और ALGOL और स्मॉलटाक के पास कोड को व्यवस्थित करने में मदद करने के लिए ब्लॉक, क्लोज़र और नेस्टेड फ़ंक्शन थे। वास्तव में लिस्प को असेंबलर के लिए मैक्रो-प्रोसेसर के रूप में इस्तेमाल किया जा सकता था और सी। पॉलीमॉर्फिज्म से पहले बाहर आने वाले सी। सिमाला की तुलना में कम और तेज (एस-एक्सप्रेशन का कस्टम प्रसंस्करण) कोड बनाया गया था। लिस्प, एपीएल और स्मॉलटाक में "गोले" थे जो पूरी तरह कार्यात्मक थे (यूनेक्स के "श" बनाम "सी" के विपरीत शेल और प्रोग्राम्स के बीच एक ही कोड) व्याख्या किए गए और संकलित कोड को इंटरलेय होने की अनुमति देता है। लिस्प (rplaca / rplacd) में पॉइंटर्स आसान थे।
aoeu256

C का सबसे बड़ा लाभ यह था कि C के लिए "कंपाइलर" बनाना आसान था, और इसलिए यह अधिक आसानी से फैल सकता था ... एक वायरस की तरह, और C आधुनिक प्रोग्रामर का धन्यवाद प्रोग्राम बनाने के तरीके का कोई सुराग नहीं है (म्यूटेबिलिटी मॉड्युलैरिटी को नुकसान पहुँचाती है), क्रियाविशेषण / कॉम्बीनेटर / हायर-ऑर्डर फ़ंक्शंस की कोई धारणा नहीं है [मैन्युअल रूप से हर बार अपने छोरों को लिखें], और हमारे सीपीयू "वॉन न्यूमैन" अड़चन द्वारा सीमित हैं, हमारे ओएस सी में लिखे गए हैं, इसलिए हमें हमारी ज़रूरत है सीपीयू को पीछे की संगतता के लिए सी कोड चलाने के लिए।
aoeu256

1

प्रोग्रामिंग लैंग्वेज स्पेसिफिकेशन्स हैं (सॉफ्टवेयर नहीं!) आमतौर पर कुछ अंग्रेजी डॉक्यूमेंट में लिखे जाते हैं (कुछ औपचारिकता के साथ, उदाहरण के लिए ज्यादातर वाक्य रचना के लिए EBNF ; कभी-कभी उनके शब्दार्थ को भी औपचारिक रूप से औपचारिक कर दिया जाता है)।

उदाहरण के लिए, C11 को n1570 (जिसे आपको पढ़ना चाहिए) द्वारा परिभाषित किया गया है । योजना की कुछ बोली R5RS द्वारा परिभाषित की गई है (जिसे आपको भी पढ़ना चाहिए, यह बहुत अच्छी तरह से लिखा गया है)।

प्रोग्रामिंग भाषाओं को कुछ सॉफ्टवेयर द्वारा कार्यान्वित किया जा सकता है । कभी-कभी वह सॉफ़्टवेयर प्रोग्रामिंग भाषा में लिखा गया एक कंपाइलर होता है। बूटस्ट्रैपिंग कम्पाइलर के बारे में पढ़ें ।

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

अक्सर (लेकिन हमेशा नहीं) रनटाइम सिस्टम आंशिक रूप से सी (विशेष रूप से कचरा कलेक्टर ) में लिखा जाता है ।

ध्यान दें कि हड्डियां एक योजना संकलक और रनटाइम पूरी तरह से अपने आप में लिखी गई हैं (और आप पूरी तरह से बूटस्ट्रैप किए गए कार्यान्वयन के कई अन्य उदाहरण पा सकते हैं)।

BTW यह सी का उपयोग करने के लिए सुविधाजनक है संकलक की लक्ष्य भाषा

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

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