139

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

पहला संकलक क्या लिखा जिसने बाइनरी निर्देशों में कुछ परिवर्तित किया?

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

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

+0

संभावित डुप्लिकेट [जब कोई नई प्रोग्रामिंग भाषा लिखता है, तो वे इसे क्या लिखते हैं?] (Http://stackoverflow.com/questions/1629513/when-someone-writes-a-new-programming-language- वे क्या करते हैं-वे-लिखते-इन-इन) – nawfal

उत्तर

114

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

पहला कार्यक्रम बिल्कुल इस फैशन - हाथ से लिखे गए ऑपोड में किया गया था।

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

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

+17

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

+2

@ जस्ट उस समय दर्द होना चाहिए जब SO आसपास नहीं था :) – joaerl

+1

तो, कंप्यूटर विकसित हुए जैसे हम मनुष्यों के पास हैं! –

8

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

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

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

+0

प्रश्न पहले संकलक के बारे में है, सामान्य रूप से पहले कार्यक्रम नहीं, कार्यक्रम कभी-कभी कंपाइलर्स होने के बावजूद; दोनों का इतिहास समान नहीं है। (एक समानता: जब जानवरों के जानवर होने के बावजूद धरती पर पहली बार दिखाई देने वाले सवाल का जवाब नहीं है, तो बिल्लियों के जानवरों के बावजूद पृथ्वी पर पहली बिल्लियों दिखाई देने पर सवाल का जवाब नहीं है।) –

38

कृपया पढ़ें के बारे में compiler bootstrapping और the history of compiler writing

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

9

पहला संकलक क्या लिखा जिसने बाइनरी निर्देशों में कुछ परिवर्तित किया?

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

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

+0

लिंक अभी 404 लगता है, किसी भी मामले में, ऊपर "अनुग्रह" ग्रेस हूपर है। – ShiDoiSi

+1

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

+1

इस @mehaase कारण है कि यह "संकलक" कहा जाता है। यह दिनचर्या का एक संकलन बना देता है, जिनमें से प्रत्येक है (संभावित) मशीन भाषा में प्रत्यक्ष रूप से लिखा। – Elazar

22

वोज ने अपनी सार्वजनिक वार्ता में से एक में कहा कि जब वह शुरू हुआ, तो वह एक कंपाइलर बर्दाश्त नहीं कर सका, इसलिए उसने कागज पर बाइनरी से संकलित किया। यदि आप कुछ और जंगली देखना चाहते हैं, तो Bill Gates and Paul Allen wrote the BASIC for the Altair 8800.

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

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

+2

बिक्री पिच बनाने के बाद अल्टेयर BASIC इंटरप्रेटर लेखन? विमान की सवारी पर बूटस्ट्रैप को अल्बुकर्क को कोडिंग करना? यह हास्यास्पद लगता है। और आनंद। –

+2

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

28

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

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

+17

downvote, हाँ? शायद एक रचनाकार। –

+0

या शायद ईर्ष्या? :) –

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