पहले क्या आया, संकलक, या स्रोत?


17

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



1
उप सवालों में से एक यह अपने आप में एक सवाल था: कंप्यूटर के लिए लिखी गई पहली प्रोग्रामिंग भाषा क्या थी?
मार्क बूथ

निश्चित रूप से यह कुछ ऐसा है जिसे आप देख सकते हैं ?
कालेब

@ कालेब ने स्काईडान के उत्तर में टिप्पणियों को पढ़ा ..
डेविड

2
@ ब्रायन मान्य धारणा, लेकिन गलत निकला। यह चिकन-अंडे की समस्या बिल्कुल नहीं है, इसका बहुत ही स्पष्ट उत्तर है (संकेत: नीचे दिया गया सबसे उच्च मतदान गलत है)। स्रोत कोड लंबे समय तक संकलक की भविष्यवाणी करता है।
कोनराड रूडोल्फ

जवाबों:


30

इसका बहुत स्पष्ट उत्तर है, वास्तव में: स्रोत कोड पहले आया था - एक बड़े मार्जिन से।

तकनीकी विवरण देने से पहले, थोड़ा परिप्रेक्ष्य:

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

फोरट्रान पर विकिपीडिया लेख के इस उद्धरण पर विचार करें जो अनिच्छा संकलक का सामना करता है:

... पहला फोरट्रान कंपाइलर [था] अप्रैल 1957 में दिया गया। यह पहला ऑप्टिमाइज़िंग कंपाइलर था, क्योंकि ग्राहक उच्च स्तरीय प्रोग्रामिंग भाषा का उपयोग करने से हिचकते थे , जब तक कि उसका कंपाइलर कोड उत्पन्न नहीं कर सकता था, जिसका प्रदर्शन हाथ से कोडित असेंबली भाषा के बराबर था। । [जोर मेरा]

=> जब तक फोरट्रान कंपाइलर ने बाजार (1957) को हिट किया, तब तक लोग असेंबली भाषा और फोरट्रान दोनों में पहले से ही खुशी से प्रोग्रामिंग कर रहे थे।

यह मामला LISP ( हैकर्स और पेंटर्स से ) के लिए समान था :

स्टीव रसेल ने कहा, देखो, मैं इस निष्कासन का कार्यक्रम क्यों नहीं कर रहा हूं ... और मैंने उससे कहा, हो, हो, तुम अभ्यास के साथ सिद्धांत को भ्रमित कर रहे हो, यह प्रमाण पढ़ने के लिए है, कंप्यूटिंग के लिए नहीं। लेकिन उन्होंने आगे बढ़कर ऐसा किया। यही है, उन्होंने आईबीएम 704 मशीन कोड में मेरे पेपर में ईगल को संकलित किया, बग को ठीक किया, और फिर इसे एक लिस्प दुभाषिया के रूप में विज्ञापित किया, जो निश्चित रूप से था। तो उस समय लिस्प के पास अनिवार्य रूप से वह रूप था जो आज है ... "

एक बार फिर, न केवल स्रोत कोड (एलआईएसपी में) दुभाषिया की भविष्यवाणी करता है, बाद वाला पूर्व में भी निहित नहीं था।

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

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

इसे परिप्रेक्ष्य में रखने के लिए, 1930 के दशक से λ-पथरी होती है, और 1945 के आसपास प्लेंककल को विकसित किया गया था। इसके विपरीत, पहला फोरट्रान कंपाइलर 1957 में निकला (लेकिन फिर से फोरट्रान निर्दिष्ट होने के तीन साल बाद )।


बहुत बढ़िया जवाब! मुझे नहीं पता था कि कोड को हाथ से संकलित किया जाता था, लेकिन यह समझ में आता है।
CKB

10

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

पहली प्रोग्रामिंग भाषा के रूप में, मैंने तर्क दिया है कि यह बैबेज के विश्लेषणात्मक इंजन की मशीन भाषा थी (इस सवाल से कि कंप्यूटर के लिए पहली प्रोग्रामिंग भाषा क्या लिखी गई थी? )

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

इसके अलावा, एक संकलक आवश्यक नहीं है , बस सुविधाजनक है।

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

CPU के अधिक जटिल हो बेशक के रूप में, यह और अधिक मुश्किल हो जाता है, लेकिन एक साधारण अनुदेश सेट की तरह 6809 , या Z80 (सभी अजीब अनुक्रमित मोड अनदेखी) यहाँ तक कि एक के बिना अपेक्षाकृत आसान कार्यक्रम है कोडांतरक , अकेले एक उच्च स्तर की भाषा से एक संकलक।

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


1
क्या आपने वास्तव में उस विकिपीडिया लिंक पर स्रोत कोड की परिभाषा पढ़ी है जिसे आपने पोस्ट किया था? जैसा कि ऊपर कहा गया है, मशीन कोड स्रोत कोड नहीं है। और मशीन कोड! = विधानसभा। मशीन कोड पहले था।
13

@MarkBooth मुझे लगता है कि MIPS और AVR और भी सरल हैं ..
डेविड काउडेन

4
@occulus - किस तरह से विधानसभा भाषा स्रोत कोड नहीं है ? विधानसभा भाषा एक मशीन कोड के लिए एक विधानसभा भाषा अनुदेश नक्शे और तुच्छता से किया जा सकता है इकट्ठे , अपने दिमाग में अगर आप अपने सेशन कोड तालिकाओं पता है। ईमानदारी से, इन दिनों बच्चे ... * 8 ')
मार्क बूथ

1
मेरे लिए, असेंबली लैंग्वेज है movl $0, -20(%rbp), जबकि मशीन कोड है C745EC00000000, और यह बाद वाला है (ठीक है, ऐसा कुछ) जो पहली बार मैन्युअल रूप से दर्ज किया गया था या पेपर टेप पर पढ़ा गया था। जैसे कि क्या मशीन कोड स्रोत कोड के रूप में गिना जाता है , मैं "जो भी आपकी नाव तैरता है" कहने के लिए इच्छुक हूं। यदि आप इसे मैन्युअल रूप से टॉगल कर रहे हैं, तो हाँ, मैं कहूंगा कि यह मायने रखता है।
जॉन बोडे

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

6

संकलक पहले था । यह सीधे मशीन कोड में लिखा गया था, क्योंकि स्रोत को संकलक के बिना संकलित नहीं किया जा सकता था।

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

मैं और अधिक विशिष्ट बात नहीं कह सकता, क्योंकि आपका प्रश्न बहुत व्यापक है।


20
यह भी तर्क दिया जा सकता है कि स्रोत पहले था, क्योंकि पहले "कंप्यूटर" के लिए स्रोत बाइनरी के बराबर था (यानी उन्हें सीधे मशीन-पठनीय भाषा में प्रोग्राम किया गया था)।
जोकिम सॉर

5
@Joachim परिभाषा से, स्रोत कोड मानव-पठनीय पाठ है जिसे संकलक द्वारा मशीन कोड में अनुवादित किया जाता है। मशीन कोड ही इसलिए सोर्स कोड नहीं है।
नरकोदनीलो

11
संकलक पहले था, लेकिन इसे जैविक तंत्रिका नेटवर्क में लागू किया गया था।
डेन

8
यह इतना अधिक मतदान क्यों है? यह गलत है। उच्च-स्तरीय भाषाओं में स्रोत कोड (विशेष रूप से λ-पथरी, प्लंकल्कुएल और एलआईएसपी) लंबे समय तक संकलक और दुभाषिया दोनों का अनुमान लगाता है। यह भी ध्यान में नहीं ले रहा है अर्द्ध औपचारिक कार्यक्रम Ada Lovelace ने लिखा है।
कोनराड रूडोल्फ

4
@SkyDan आपकी परिभाषा क्या है? मुझे कोई समझदार परिभाषा नहीं है जिसके लिए आपका उत्तर सही हो (दोनों के लिए "कंपाइलर" और "उच्च-स्तरीय भाषा में स्रोत कोड" - अकेले कम स्तर दें)।
कोनराड रूडोल्फ

4

संकलक से पहले दुभाषियों का अस्तित्व था इसलिए संकलक से पहले स्रोत कोड मौजूद था।

यहाँ कंप्यूटिंग के इतिहास पर कुछ बहुत ही दिलचस्प पेपर हैं । फोरट्रान II संकलक के लिए स्रोत कोड उपलब्ध होना चाहिए, लेकिन वे लिंक टूट गए हैं।

1954 के इस पत्र में व्हर्लविंड दुभाषिया का वर्णन किया गया है।


1

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

मैं और अधिक आधिकारिक के साथ जाने के लिए इच्छुक हूं, जैसे मार्क हरमन का पेपर "सोर्स कोड एनालिसिस और मैनिपुलेशन पर दसवें IEEE इंटरनेशनल वर्किंग कॉन्फ्रेंस में क्यों" सोर्स कोड विश्लेषण और हेरफेर हमेशा महत्वपूर्ण होगा "

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

और मुझे लगता है कि आपका उत्तर उस परिभाषा में निहित है - स्रोत कोड सबसे निश्चित रूप से पहले आया था।


"संभवतः एक संकलक पहले आया था" - केवल यदि आप "संकलित" को "एक स्वचालित उपकरण द्वारा अनुवादित" के रूप में परिभाषित करते हैं, बल्कि "हाथ से मशीन कोड में अनुवादित" के बजाय।
कोनराड रूडोल्फ

बहुत दिलचस्प पेपर। मुझे सोर्स कोड की वह परिभाषा पसंद है - हालाँकि यह मेरे सवाल को एक गैर-प्रश्न बनाती है ..
डेविड काउडेन

@KonradRudolph वह इकाई नहीं है जो संकलन करती है, चाहे वह मशीन, मानव या ईश्वरीय हस्तक्षेप हो, जिसे 'कंपाइलर' कहा जाता है?
कर्क ब्रॉडहर्स्ट

0

एल्गोरिदम को कागज पर हल किया गया था, फिर शारीरिक रूप से / यंत्रवत् (चलती तारों) को बदल दिया गया था। प्रोग्राम को बदलने के लिए आप तारों को हिलाते हैं और फिर से चलाते हैं।

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

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

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