पहला संकलक कैसे लिखा गया था?


166

मैंने चिकन और अंडे और बूटस्ट्रैपिंग के बारे में सुना। मेरे कुछ प्रश्न हैं।

पहले संकलक ने क्या लिखा है जो किसी चीज़ को द्विआधारी निर्देशों में परिवर्तित करता है?

क्या विधानसभा को द्विआधारी निर्देशों में संकलित या अनुवादित किया गया है?

... मुझे विश्वास करना मुश्किल होगा कि उन्होंने बाइनरी में एक कंपाइलर लिखा था।



@ नवाफ, यह एक नई प्रोग्रामिंग भाषा और पहले संकलक के बीच का अंतर है, इसलिए नहीं - यह डुप्लिकेट नहीं है

@PauliSudarshanTerho क्या अंतर है? प्रश्नों की भावना समान है। आप एक प्रोग्रामिंग भाषा नहीं लिख सकते हैं, यह प्रश्न पहले संकलक के बारे में बात कर रहा है।
नवाफाल

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

मुझसे सीखें - यह एक डुप्लिकेट है: stackoverflow.com/questions/4772768/…

जवाबों:


133

असेंबली निर्देश (आम तौर पर) ओपकोड के लिए एक प्रत्यक्ष मानचित्रण है, जो मशीन कोड के बाइट मान हैं (जो कि प्रोसेसर द्वारा सीधे व्याख्या की जा सकती हैं। एक तालिका से सीधे उन्हें देखकर opcodes में एक कार्यक्रम लिखना काफी संभव है (जैसे कि 6039 माइक्रोप्रोसेसर के लिए यह एक , उदाहरण के लिए) जो उन्हें विधानसभा के निर्देशों के साथ सूचीबद्ध करता है, और चीजों के लिए हाथ से निर्धारित स्मृति पते / ऑफसेट। कूदता है।

पहले कार्यक्रम बिल्कुल इसी अंदाज में किए गए - हाथ से लिखे गए ऑपकोड।

हालाँकि, अधिकांश समय असेंबलर का उपयोग असेंबली कोड को "कंपाइल" करने के लिए करना आसान होता है, जो इन ओपोड लुकअप को स्वचालित रूप से करता है, साथ ही नाम जंप लेबल्स, वगैरह के लिए पतों / ऑफसेट्स की गणना करने में सहायक होता है।

पहले असेम्बलर्स को हाथ से लिखा जाता था। उन असेंबलरों का उपयोग तब अधिक जटिल असेंबलरों को इकट्ठा करने के लिए किया जा सकता है, जो तब उच्च-स्तरीय भाषाओं के लिए लिखे गए कंपाइलरों को इकट्ठा करने के लिए उपयोग किया जा सकता है, और इसी तरह। टूल के अगले सेट के निर्माण को सरल बनाने के लिए उपकरण लिखने की पुनरावृति की इस प्रक्रिया को कहा जाता है (जैसा कि डेविड रेबिनोवित्ज़ ने अपने जवाब में बताया है) बूटस्ट्रैपिंग


18
मेरा पहला कंप्यूटर एक Z80-आधारित मशीन था, जिसके रोम मॉनिटर में मुझे एक ऑपरेटिंग सिस्टम (CP / M) की मूल बातें लाने के लिए बूटस्ट्रैप लोडर को हाथ से इकट्ठा करना था ताकि मैं बाकी के ऑपरेटिंग सिस्टम को एक कार्य प्रणाली में इकट्ठा कर सकूं। , एक डिस्क-आधारित बूटस्ट्रैप लोडर के साथ पूरा हुआ। मनोरंजन समय। तो हाँ, तुम बस ठीक इकट्ठा कर सकते हैं। यह धीमा और दर्दनाक है और त्रुटि-प्रवण है (यही कारण है कि हम चीजों को स्वचालित करते हैं) लेकिन यह संभव है।
JUST MY सही ओपिनियन

पहले लिंक टूट गया है।
ल्यूक

हाथ से लिखा हुआ। कैसे? तारों या छिद्रण कार्ड? मुझे लगता है कि उनके पास हेक्साडेसिमल कीपैड थे।

44

कृपया कंपाइलर बूटस्ट्रैपिंग और कंपाइलर लेखन के इतिहास के बारे में पढ़ें

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


36

अंडे लंबे समय से पहले मुर्गियों। ज्यादातर "चिकन और अंडा" समस्याओं का जवाब एक ही है: विकास। कुछ लोगों को जैविक विकास में भी विश्वास करने में परेशानी होती है, लेकिन अविश्वास एक तर्क नहीं है (google argumentum ad ignorantiam)।

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


24

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

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

यदि आप उस बाधा को तोड़ना चाहते हैं जो कंप्यूटर को जादू की तरह महसूस कर रही है, तो मैं चार्ल्स पेट्ज़ोल्ड और / या कम्प्यूटिंग सिस्टम के तत्वों द्वारा CODE को पढ़ने की अत्यधिक सलाह देता हूं । प्रोग्रामिंग के सिर्फ एक बुनियादी ज्ञान के साथ, इन अद्भुत सुलभ पुस्तकों में आपको ऊपर से नीचे तक कंप्यूटर की समझ होगी। जाहिर है, एक COMP नहीं मिल सकता है। विज्ञान। या ईई की डिग्री सिर्फ 2 पुस्तकों के बाद, लेकिन मैं एक स्व-सिखाया प्रोग्रामर के रूप में कह सकता हूं जो औपचारिक प्रशिक्षण से चूक गए: इन पुस्तकों ने मेरी दुनिया को हिलाकर रख दिया!


2
बिक्री पिच बनाने के बाद अल्टेयर बेसिक दुभाषिया लिखना? अल्बुकर्क के लिए विमान की सवारी पर बूटस्ट्रैपर्स को कोड करना? जो हास्यास्पद लगता है। और आनंद।
एहतेश चौधरी

2
@ शूरने: हा! वे बिंदु प्रासंगिक भी हैं, लेकिन मुझे इस बात का आभारी है कि कैसे उन्होंने बुनियादी व्याख्याकार बनाया और कैसे समूह ने इसे छोटे स्थान में गिरा दिया, यह सौंदर्य और आश्चर्यजनक प्रोग्रामिंग क्षमता / हैकरी की बात है।
दीना

10

पहले संकलक ने क्या लिखा है जो किसी चीज़ को द्विआधारी निर्देशों में परिवर्तित करता है?

एक मानव ने किया। A-0 सिस्टम के बारे में पढ़ें :

1952 में, ग्रेस हॉपर ने स्पेरी के लिए अपना पहला कंपाइलर पूरा किया, जिसे A-0 के नाम से जाना जाता है। A-0 सिस्टम निर्देशों का एक सेट था जो मशीन भाषा में प्रतीकात्मक गणितीय कोड का अनुवाद कर सकता था। A-0 के निर्माण में, वह उन सभी सबरूटीन को लेती थी जो वह वर्षों से एकत्र कर रहे थे और उन्हें टेप पर रखा था। प्रत्येक रूटीन को एक कॉल नंबर दिया जाता था, ताकि वह मशीन को टेप पर खोज सके। ग्रेस द्वारा वर्णित के अनुसार, "मुझे बस इतना करना था कि कॉल नंबरों के एक सेट को लिखना है, कंप्यूटर को टेप पर उन्हें खोजने दें, उन्हें लाएं और जोड़ दें। यह पहला संकलक था।"


1
लिंक अभी 404 लगता है, किसी भी मामले में, ऊपर "ग्रेस" ग्रेस हॉपर है।
वोल्कर स्टोलज़ सिप

2
मैंने सुना है कि हॉपर ने पहला संकलक लिखा था, लेकिन इसके ऊपर का वर्णन यह संकलक की तुलना में एक लिंकर की तरह ध्वनि करता है। फिर भी, अच्छी कहानी है। यह सोचना आश्चर्यजनक है कि एक समय था जब कंप्यूटर वैज्ञानिक संकलक के विचार के बारे में उलझन में थे ...
मार्क ई। हासे

1
@mehaase इसीलिए इसे "कंपाइलर" कहा जाता है। यह दिनचर्या का एक संकलन बनाता है, जिनमें से प्रत्येक मशीन भाषा में सीधे लिखा हुआ (संभावित) है।
एलाज़ार

@ MarkE.Haase जिन लोगों को हॉपर ने यहां निर्दिष्ट किया था, वे विशिष्ट गणना कार्यों के लिए कंप्यूटर का उपयोग करने वाले इंजीनियर और वैज्ञानिक थे; वे "कंप्यूटर वैज्ञानिक" नहीं थे। 1952 के आसपास मुट्ठी भर साइबरनेटिस्ट थे, लेकिन मुझे शक है कि वह उनमें से किसी से बात करती थी।
जिम बैटर

9

पहले प्रोग्राम मशीन कोड (असेंबली लैंग्वेज नहीं) में लिखे गए थे - वास्तविक संख्या स्विच का उपयोग करके कंप्यूटर मेमोरी में प्लग की गई थी। हम एक लंबा सफर तय कर चुके हैं ...

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

इन कार्यक्रमों का उपयोग कभी-कभी अन्य कार्यक्रमों को बनाने के लिए पाठ फ़ाइलों को संसाधित करने के लिए किया जाता है, और वॉइला प्रोग्रामिंग भाषाएं बनाई गई थीं।


प्रश्न पहले संकलक के बारे में है, सामान्य रूप से पहले कार्यक्रम नहीं, कार्यक्रमों के बावजूद कभी-कभी संकलक होते हैं; दोनों का इतिहास समान नहीं है। (एक सादृश्य: पृथ्वी पर पहली बार दिखाई देने वाले जानवर के सवाल का जवाब, इस सवाल का जवाब नहीं है कि बिल्लियों के जानवर होने के बावजूद पृथ्वी पर पहली बिल्लियाँ कब दिखाई दीं।)
जिम बेल्टर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.