पुराने बेसिक (और शायद अन्य भाषाओं) ने स्रोत कोड के भाग के रूप में लाइन नंबरों का उपयोग क्यों किया?
मेरा मतलब है, क्या समस्याओं को हल करने की कोशिश की?
पुराने बेसिक (और शायद अन्य भाषाओं) ने स्रोत कोड के भाग के रूप में लाइन नंबरों का उपयोग क्यों किया?
मेरा मतलब है, क्या समस्याओं को हल करने की कोशिश की?
जवाबों:
बेसिक को इसकी समकालीन भाषाओं के संदर्भ में लेने की आवश्यकता है: प्रारंभिक फोरट्रान, कोबोल और असेंबली।
जब मैं लेबल के बिना 6502 असेंबली पर डबिंग कर रहा था , इसका मतलब यह था कि जब आपने पाया कि आपको कसकर पैक कोड के बीच में एक निर्देश जोड़ने की आवश्यकता है (मैंने बाद में एनओपी एस जोड़ा ) तो आपको पूरी तरह से कूदने और फिर से बनाने की आवश्यकता थी। पतों। यह समय लेने वाला था।
फोरट्रान एक पंक्तिबद्ध संख्या आधारित प्रणाली थी जो कि BASIC से पहले थी। फोरट्रान में, शाखाएँ के लिए लक्ष्य के लिए इस्तेमाल किए जाने वाले स्तंभ संख्या 1-5 एक पंक्ति संख्या थी। फोरट्रान के साथ महत्वपूर्ण बात यह थी कि कंपाइलर बेसिक दुभाषिया की तुलना में थोड़ा अधिक बुद्धिमान थे और कुछ निर्देशों को जोड़ने के लिए कुछ कार्डों को छिद्रित करने और उन्हें सही जगह पर डेक में रखने की बात थी।
दूसरी ओर, बेसिक को अपने सभी निर्देशों का आदेश देना पड़ा। 'पिछली पंक्ति की निरंतरता' की अवधारणा की अधिकता नहीं थी। इसके बजाय, एपलेसॉफ्ट बेसिक में (व्यापक रूप से इस्तेमाल की जाने वाली बोलियों में से एक जिससे मैं परिचित हूं और उस पर जानकारी पा सकता हूं) स्मृति में प्रत्येक पंक्ति का प्रतिनिधित्व किया गया था:
NN NN TT TT AA BB CC DD .. .. 00
अगली पंक्ति के पते के लिए इसमें दो बाइट्स थे ( NN NN
)। इस लाइन की लाइन संख्या के लिए दो बाइट्स ( TT TT
), और फिर AA BB CC DD .. ..
लाइन मार्कर ( 00
) के अंत के बाद टोकन ( ) की एक सूची । (यह ऐप्पल // ई के अंदर पेज 84-88 से है )
उस मेमोरी प्रतिनिधित्व को देखते हुए महसूस करने के लिए एक महत्वपूर्ण बिंदु यह है कि लाइनों को ऑर्डर से बाहर मेमोरी में संग्रहीत किया जा सकता है। स्मृति की संरचना संरचना में एक 'अगली पंक्ति' सूचक के साथ जुड़ी हुई सूची की थी। इससे दो लाइनों के बीच नई लाइनों को जोड़ना आसान हो गया - लेकिन आपको इसे ठीक से काम करने के लिए प्रत्येक पंक्ति को नंबर देना था।
कई बार जब BASIC के साथ काम करते हैं, तो आप वास्तव में BASIC में ही काम कर रहे थे । विशेष रूप से, एक दिया गया स्ट्रिंग या तो एक पंक्ति संख्या और आधार निर्देश था, या मूल दुभाषिया के लिए एक कमांड RUN
या LIST
। इससे कोड को आदेशों से अलग करना आसान हो गया - सभी कोड संख्याओं से शुरू होते हैं।
जानकारी के ये दो टुकड़े पहचानते हैं कि संख्याओं का उपयोग क्यों किया गया था - आप 16 बिट्स में बहुत सारी जानकारी प्राप्त कर सकते हैं। स्ट्रिंग आधारित लेबल अधिक जगह लेगा और ऑर्डर करने के लिए कठिन हैं। संख्याओं को समझने में आसान, समझने योग्य और आसान तरीके से काम करना आसान है।
बाद में BASIC बोलियाँ जहाँ आप हर समय दुभाषिया में नहीं थे, हर पंक्ति के साथ दूर करने में सक्षम थे और इसके बजाय केवल उन रेखाओं की संख्या की आवश्यकता थी जो शाखा लक्ष्य थीं। प्रभाव में, लेबल।
] CALL -936
* F666 G
$ ...
हां, एफपी बुनियादी के साथ शुरू करने के लिए।
] PRINT "FOO"
को मूल रूप से दुभाषिया द्वारा चलाया गया था। यह एक बयान है। यदि आप इसे बाद में चलाना चाहते हैं, तो आप ] 10 PRINT "FOO"
और फिर करेंगे ] RUN
। AppleSoft BASIC वातावरण में, हर BASIC स्टेटमेंट को तुरंत या देरी से चलाया जा सकता है - केवल कुछ ही कमांड थे जो DOS द्वारा प्रदान किए गए थे जो कि मान्य BASIC स्टेटमेंट नहीं थे। अब एक बयान और बाद में एक बयान के बीच अंतर लाइन नंबर था। आप संबंधित पंक्ति संख्या को फिर से दर्ज करके विलंबित विवरण को भी संशोधित कर सकते हैं। आप एक लाइन पर कई स्टेटमेंट भी डाल सकते हैं::
प्रारंभिक माइक्रो कंप्यूटर पर संपादन लाइन आधारित था। आप स्रोत कोड में केवल स्वतंत्र रूप से इधर-उधर नहीं जा सकते थे और संपादित नहीं कर सकते थे। आपके पास स्क्रीन के नीचे एक एकल पंक्ति थी जहां आप कमांड टाइप कर सकते हैं और कोड दर्ज कर सकते हैं। स्क्रीन के बाकी हिस्से में केवल कोड-लिस्टिंग और कमांड आउटपुट था। यदि आप " EDIT 90
" लिखे गए प्रोग्राम में पंक्ति 90 को संपादित करना चाहते हैं , और लाइन की सामग्री 90
एकल-पंक्ति संपादन बफर में प्रवेश कर गई है। जब आपने अपनी हिट दर्ज की गई लाइन को संपादित किया था, और प्रोग्राम लिस्टिंग को अपडेट किया गया था। तो आपको प्रोग्राम को संपादित करने में सक्षम होने के लिए लाइन नंबरों की आवश्यकता थी।
जब कोड संपादक और अधिक उन्नत हो गए और आपको कोड सूची में कर्सर को इधर-उधर ले जाने की अनुमति दी, तो आपको लाइन नंबरों की आवश्यकता नहीं थी।
यदि आप 80 के 8-बिट होम माइक्रो कंप्यूटर की BASIC बोलियों के बारे में सोच रहे हैं, तो उन कंप्यूटरों में टेक्स्ट एडिटर नहीं थे (जब तक कि आपने कुछ वर्ड प्रोसेसर एप्लिकेशन नहीं खरीदा है)। संपूर्ण बुनियादी कार्यक्रम स्रोत कोड "एक संपादक में खुला" रखने का कोई तरीका नहीं था, जैसे आज प्रोग्रामिंग करते समय आपके पास होगा। प्रोग्रामर प्रोग्राम के बारे में सोर्स कोड फ़ाइल, या टेक्स्ट, वास्तव में सोच भी नहीं सकता है।
तो, आपको यह बताने का मौका देता है कि आपके सिर में रेखाओं के बिना एक सरल कार्यक्रम है:
FOR I=1 TO 42
PRINT I
NEXT I
आप अपने कंप्यूटर को बूट करें। आपके पास एक "तैयार" या ऐसा कुछ है, और कर्सर अगली पंक्ति में बैठा है। यह विभिन्न स्क्रिप्टिंग भाषाओं के आज के REPL वातावरण की तरह है , हालांकि वास्तव में कड़ाई से आधारित नहीं है, स्क्रीन आधारित अधिक पसंद है। तो आज की REPLs की तरह नहीं, लेकिन करीब।
अब यदि आप प्रोग्राम में प्रवेश करना शुरू करते हैं, तो आपको पहली पंक्ति के बाद त्रुटि हो सकती है, क्योंकि BASIC दुभाषिया इसे तुरंत निष्पादित करने की कोशिश करता है (और भूल जाता है), और यह लूप को समाप्त करने के लिए NEXT के बिना कोई मतलब नहीं है। यह टेक्स्ट एडिटर नहीं है जहाँ आप टेक्स्ट एडिट करते हैं, यह वह जगह है जहाँ आप कंप्यूटर को कमांड देते हैं!
तो आपको कहने का कोई तरीका चाहिए, यह प्रोग्राम लाइन है, इसे स्टोर करें! आपके पास एक विशेष कमांड या सिर्फ एक प्रतीक हो सकता है जो बताता है कि हे, यह प्रोग्राम लाइन है, इसे स्टोर करें। आइए इसकी कल्पना करें:
#FOR I=1 TO 42
#PRINT I
#NEXT I
ठीक है, अब हमारे काल्पनिक बेसिक दुभाषिया ने कार्यक्रम को संग्रहीत किया और आप इसे चला सकते हैं। लेकिन अब आप प्रिंट लाइन को संपादित करना चाहते हैं। आप इसे कैसे करते हो? आप टेक्स्ट एडिटर में नहीं हैं, आप कर्सर को लाइन में नहीं ले जा सकते हैं और उसे संपादित नहीं कर सकते हैं। या आप LET COUNT=COUNT+1
लूप में एक और लाइन जोड़ना चाहते हैं । आप कैसे इंगित करते हैं कि नई लाइन कहाँ डाली जानी चाहिए?
लाइन नंबर इसे बहुत आसान तरीके से हल करते हैं, यदि नहीं तो कलंकी तरीके से। यदि आप पहले से मौजूद संख्या के साथ एक प्रोग्राम लाइन दर्ज करते हैं, तो पुरानी लाइन बदल जाती है। अब स्क्रीन-आधारित REPL पर्यावरण उपयोगी हो जाता है, क्योंकि आप स्क्रीन पर प्रोग्राम लिस्टिंग के लिए कर्सर ले जा सकते हैं, स्क्रीन पर लाइन संपादित करें और इसे स्टोर करने के लिए ENTER दबाएँ। ऐसा लगता है कि आप लाइन का संपादन कर रहे हैं, जब वास्तव में आप स्क्रीन पर पाठ संपादित कर रहे होते हैं और फिर स्क्रीन से नए के साथ पूरी लाइन को बदल देते हैं। इसके अलावा, यदि आप अप्रयुक्त संख्याओं को बीच में छोड़ देते हैं तो नई लाइनें सम्मिलित करना आसान हो जाता है। प्रदर्शित करना:
10 FOR I=1 TO 42
20 PRINT I
30 NEXT I
परिवर्तनों के साथ लाइन 20 में फिर से प्रवेश करने और नई लाइनें जोड़ने के बाद, यह हो सकता है
5 LET COUNT=0
10 FOR I=1 TO 42
20 PRINT "Index", I
25 LET COUNT=COUNT+1
30 NEXT I
वहाँ लाभ (या अभिशाप है, क्योंकि यह एक भाषा निर्माण के रूप में लाइन नंबरों का उपयोग करने में सक्षम होने के लिए, कम से कम GOTO
और GOSUB
आदेशों के लक्ष्य के रूप में प्रसिद्ध बेसिक स्पेगेटी कोड को सक्षम करता है) । इसे लेबल द्वारा प्रतिस्थापित किया जा सकता है, लेकिन BASIC दुभाषिया में लागू करने के लिए लाइन नंबरों का उपयोग करना बहुत सरल है, जो कि अभी भी 80 के दशक के 8-बिट होम कंप्यूटर में एक निश्चित बोनस था।
अधिक महत्वपूर्ण रूप से, उपयोगकर्ता अनुभव के दृष्टिकोण से, कोड को संपादित करने के लिए लाइन नंबर वास्तव में आश्चर्यजनक रूप से आसान लेकिन पूर्ण इंटरफ़ेस हैं। नया कोड डालने के लिए एक संख्या के साथ शुरू होने वाली एक पंक्ति टाइप करें। LIST 100-200
100-200 तक लाइनें दिखाने के लिए उपयोग करें । एक पंक्ति को संपादित करने के लिए, इसे स्क्रीन पर सूचीबद्ध करें, स्क्रीन पर पाठ संपादित करें, और फिर से लाइन दर्ज करें। एक पंक्ति को हटाने के लिए, इसे खाली होने के लिए संपादित करें, बस इसके बाद कुछ भी नहीं के साथ लाइन नंबर दें। इसका वर्णन करने वाला एक पैराग्राफ। पुराने पाठ संपादकों जैसे कि डॉस के एडलिन , या यूनिक्स के ईडी या पूर्व के उपयोग का वर्णन करने की कोशिश करें : आपको केवल एक पैराग्राफ (केवल मामूली हाइपरबोले) की आवश्यकता है, यह समझाने के लिए कि उपयोगकर्ता कैसे उनसे बाहर निकल सकता है, जब गलती से शुरू हुआ!
अन्य उत्तर बताते हैं कि लाइन नंबर कैसे आए। मैं यहां कवर करने की कोशिश कर रहा हूं, क्यों लाइन नंबर तब तक जीवित रहे जब तक उन्होंने किया, कैसे वे एक वास्तविक दुनिया की समस्या को हल करते रहे: उन्होंने वास्तविक संपादक के बिना वास्तविक प्रोग्रामिंग करने का एक तरीका बहुत ही सरल तरीके से पेश किया। एक बार उचित, आसान-से-उपयोग पूर्ण-स्क्रीन पाठ संपादक कोड को संपादित करने के लिए मुख्यधारा का तरीका बन गया, दोनों के साथ हार्डवेयर सीमाएं गायब हो गईं और जब नई चीजों को अपनाने वाले लोगों की जड़ता दूर हो गई, तो लाइन नंबर आधारित बेसिक बोलियां काफी तेजी से उपयोग के साथ गायब हो गईं, क्योंकि मुख्य प्रयोज्य समस्या जो उन्होंने हल की थी वह अब कोई मुद्दा नहीं है।
बेसिक विकसित होने के स्थान और युग में, सबसे अच्छा उपलब्ध I / O डिवाइस एक टेलेटाइप था। किसी प्रोग्राम को एडिट करना (कागज पर) पूरे प्रोग्राम की एक सूची, या उसके दिलचस्प भाग को सूचीबद्ध करके, और फिर लाइन नंबर के साथ रिप्लेसमेंट लाइन्स टाइप करके किया गया था।
यही कारण है कि डिफ़ॉल्ट लाइन नंबरिंग 10 तक थी, इसलिए मौजूदा लाइनों के बीच अप्रयुक्त संख्याएं होंगी।
ren
'कमांड' था, जिसे फिर से बनाना था । एक ठेठ मंगलाचरण था ren 10, 10
(दस से शुरू फिर से अंकित करना, दस से incrementing - डिफ़ॉल्ट व्यवहार करता है, तो एक टाइप ren
। The goto
और gosub
और then (linenumber)
। आदेशों स्वचालित रूप से अपडेट किया जाएगा लेकिन यह निश्चित रूप से जल्द से जल्द बुनियादी बातों में उपलब्ध नहीं था लेकिन IIRC, एप्पल में उपलब्ध था। इंटेगर बेसिक, अप्लेसॉफ्ट एफपी बेसिक, टीआई बेसिक / एक्सटेंडेड बेसिक, एमएस बेसिक / जीडब्ल्यू बेसिक, इत्यादि
"लाइन नंबर" का अर्थ कुछ अलग चीजें हैं।
सबसे पहले, ध्यान रखें कि "लाइनों" की अवधारणा हमेशा के लिए नहीं रही है। इस युग में कई प्रोग्रामिंग भाषाओं में छिद्रित कार्ड का उपयोग किया गया था , और अनुक्रम संख्या (आमतौर पर कार्ड के अंतिम कुछ कॉलम) में आपको उचित क्रम में अपना डेक ठीक करने में मदद मिली यदि आपने इसे गिरा दिया, या कार्ड रीडर में कुछ भयानक हुआ। स्वचालित रूप से ऐसा करने के लिए मशीनें थीं।
GOTO
बयानों के लक्ष्य के रूप में उपयोग के लिए लाइन नंबर एक पूरी तरह से अलग अवधारणा है। फोरट्रान IV में, वे वैकल्पिक थे, और कथन से पहले (कॉलम 1-5 में)। फ्री-फॉर्म लेबल की तुलना में इसे लागू करने में आसान होने के अलावा, गणना और असाइन किए गए GOTO की अवधारणा भी थी , जिसने आपको मनमाने ढंग से लाइन नंबर पर कूदने की अनुमति दी थी। यह कुछ सबसे आधुनिक प्रोग्रामिंग भाषाएं नहीं थीं (हालांकि switch
कथन करीब आते हैं), लेकिन कोडांतरक प्रोग्रामर के लिए एक परिचित चाल थी।
BASIC को FORTRAN से प्राप्त किया गया था, और इसे लागू करने और समझने के लिए सरल होने का इरादा था, इसलिए प्रत्येक "लाइन" को एक लाइन नंबर (दोनों अनुक्रमण के लिए और GOTO
/ GOSUB
बयानों के लक्ष्य के रूप में ) के लिए मजबूर करना संभवतः उस कारण के लिए बनाया गया एक डिज़ाइन निर्णय था।
goto array_of_labels[some_computation()];
GOTO
(या ASSIGN
) और मूल उर्फ अंकगणित उर्फ थ्रेवे के लक्ष्यों के लिए लेबल की आवश्यकता होती है IF
, और (और शायद ही कभी इस्तेमाल किया जाता है) वैकल्पिक रिटर्न CALL
, और प्रकार के लक्ष्य (यकीनन सीमांकक) DO
और FORMAT
बयान। अन्य बयानों पर वे वैकल्पिक थे।
GOTO 1000+N*100
एक switch
स्टेटमेंट का अनुकरण करने के लिए लिख सकते हैं ।
मैंने COBOL में प्रोग्रामिंग शुरू की जिसमें प्रत्येक पंक्ति के 1-6 कॉलम में लाइन नंबर का उपयोग किया गया था। क्योंकि 1970 के दशक में कोई आईडीई नहीं था, सब कुछ छिद्रित कार्ड के माध्यम से किया गया था और यह पहचानने के लिए कि मूल स्रोत में कौन सी लाइनें बदलनी हैं और कौन सी नई लाइनें जोड़ी गई थीं, यह पहचानने के लिए लाइन नंबर का उपयोग किया गया था। हम अधिक संख्याओं में जोड़ने के लिए कमरा देने के लिए 100 की संख्या में वृद्धि करते थे।
बेसरिक फोरट्रान की तुलना में बाद में बेस-टर्मिनल युग में आया। इसमें रीड-एग्ज-प्रिंट-लूप का माहौल दिखाया गया था जो कार्ड के डेक की तुलना में अधिक इंटरैक्टिव था।
मैंने 24 अक्षर वाले एक लाइन डिस्प्ले पर, BASIC में, प्रोग्राम करना सीखा । पंक्ति संख्याएँ यह निर्दिष्ट करने का एक स्वाभाविक तरीका था कि आप कहाँ जाना चाहते हैं, चाहे एक का संपादन हो या दूसरों के बीच डालने का।
मैं वास्तव में कल्पना नहीं कर सकता कि आप इसे कैसे करेंगे।
एक बिंदु जिसका किसी ने अभी तक उल्लेख नहीं किया है, वह यह है कि शुरुआती लोगों के लिए कार्यक्रम प्रवाह के बारे में तर्क करना आसान है जहां शाखा लक्ष्य स्पष्ट हैं। इसलिए मैच (संभवत: नेस्टेड) BEGIN / END स्टेटमेंट्स (या जो भी ब्लॉक डेलीमीटर उपयोग किए गए थे) से मिलान करने के बजाय, यह बहुत स्पष्ट था कि कंट्रोल फ्लो कहां गया। यह संभवतः बेसिक के लक्षित श्रोताओं के लिए उपयोगी था (यह शुरुआत का सर्व-उद्देश्यीय प्रतीक निर्देश है, आखिरकार)।
डार्टमाउथ टाइम शेयरिंग सिस्टम ने एक टेलेटाइप इंटरफ़ेस का उपयोग किया। इस प्रकार यह एक कमांड आधारित इंटरफ़ेस का उपयोग करता है। मूल रूप से, लाइन नंबरों का उपयोग केवल कार्यक्रम को संपादित करने के साधन के रूप में किया जाता था। आप एक पंक्ति संख्या का उपयोग करके सम्मिलित, प्रतिस्थापित या हटा सकते हैं। ऐसा नहीं लगता है कि शुरुआती संस्करण में गोटो बयानों के लिए लाइन नंबर का उपयोग किया गया था, लेकिन यह बाद में भाषा के अतिरिक्त था।