अल्गोल

ऐल्गॉल (कलनविधि भाषा के लिए संक्षिप्त) अनिवार्य प्रोग्रामिंग कंप्यूटर प्रोग्रामिंग भाषाओं का एक परिवार है जिसे मूल रूप से 1958 में विकसित किया गया था। ऐल्गॉल ने कई अन्य भाषाओं को बहुत अधिक प्रभावित किया और एसोसिएशन फॉर कंप्यूटिंग मशीनरी (ACM) द्वारा पाठ्यपुस्तकों और शैक्षणिक स्रोतों में तीस से अधिक वर्षों के लिए उपयोग की जाने वाली कलनविधि विवरण के लिए मानक विधि थी।

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

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

तीन प्रमुख विशिष्टताएँ थीं, जिनका नाम उन वर्षों के नाम पर रखा गया था जिन्हें वे पहली बार प्रकाशित किए गए थे: ऐल्गॉल 68 ऐल्गॉल 60 से काफी अलग है और अच्छी तरह से प्राप्त नहीं हुआ था, इसलिए सामान्य तौर पर ऐल्गॉल का अर्थ ऐल्गॉल 60 और इसकी बोलियाँ हैं।
 * ऐल्गॉल 58 - अंतर्राष्ट्रीय बीजगणितीय भाषा के लिए मूल रूप से IAL कहलाने का प्रस्ताव है।
 * ऐल्गॉल 60 - पहली बार 1961 में X1 ऐल्गॉल 60 के रूप में लागू किया गया। संशोधित 1963।
 * ऐल्गॉल 68 - लचीली सरणियों, स्लाइस, समानता, ऑपरेटर पहचान सहित नए तत्वों को पेश किया। संशोधित 1973।

इतिहास
1958 में ज्यूरिख में स्विस फेडरल इंस्टीट्यूट ऑफ टेक्नोलॉजी (cf. ऐल्गॉल 58) में एक बैठक में यूरोपीय और अमेरिकी कंप्यूटर वैज्ञानिकों की एक समिति द्वारा ऐल्गॉल को संयुक्त रूप से विकसित किया गया था। इसने तीन अलग-अलग सिंटैक्स निर्दिष्ट किए: एक संदर्भ सिंटैक्स, एक प्रकाशन सिंटैक्स और एक कार्यान्वयन सिंटैक्स। अलग-अलग सिंटैक्स ने इसे अलग-अलग भाषाओं के लिए दशमलव बिंदुओं (अल्पविराम बनाम अवधि) के लिए अलग-अलग कीवर्ड नामों और सम्मेलनों का उपयोग करने की अनुमति दी।

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

जॉन बैकस ने विशेष रूप से ऐल्गॉल 58 के लिए प्रोग्रामिंग भाषाओं का वर्णन करने के लिए बैकस नॉर्मल फॉर्म विधि विकसित की। इसे ऐल्गॉल 60 के लिए पीटर नौर द्वारा संशोधित और विस्तारित किया गया था, और डोनाल्ड नुथ के सुझाव पर बैकस-नौर फॉर्म का नाम बदल दिया गया। पीटर नौर: एएलजीओएल बुलेटिन के संपादक के रूप में मैं भाषा की अंतरराष्ट्रीय चर्चाओं में खींचा गया था और नवंबर 1959 में यूरोपीय भाषा डिजाइन समूह का सदस्य बनने के लिए चुना गया था। इस क्षमता में मैं एएलजीओएल 60 रिपोर्ट का संपादक था, जिसे निर्मित किया गया था। जनवरी 1960 में पेरिस में ऐल्गॉल 60 की बैठक के परिणामस्वरूप।

निम्नलिखित लोगों ने पेरिस में बैठक में भाग लिया (1 से 16 जनवरी तक) एलन पेर्लिस ने बैठक का एक विशद वर्णन दिया: बैठकें थकाऊ, अंतहीन और उत्साहजनक थीं। जब किसी के अच्छे विचारों को दूसरों के बुरे विचारों के साथ छोड़ दिया गया तो वह उत्तेजित हो गया। फिर भी, परिश्रम पूरी अवधि के दौरान बना रहा। 13 उत्कृष्ट था।
 * फ्रेडरिक एल. बाउर, पीटर नौर, हेंज रटिशौसर, क्लॉस सेमेलसन, बर्नार्ड वाउक्विस, एड्रियान वैन विजनगार्डन, और माइकल वुडगर (यूरोप से)
 * जॉन बैकस|जॉन डब्ल्यू.बैकस, जूलियन ग्रीन (कंप्यूटर वैज्ञानिक), चार्ल्स काट्ज, जॉन मैक्कार्थी (कंप्यूटर वैज्ञानिक), एलन पर्लिस|एलन जे. पर्लिस, और जोसेफ हेनरी वेगस्टीन (यूएसए से)।

ऐल्गॉल 60 ने इसके बाद आने वाली कई भाषाओं को प्रेरित किया। टोनी होरे ने टिप्पणी की, यहां एक ऐसी भाषा है जो अपने समय से बहुत आगे है कि यह न केवल अपने पूर्ववर्तियों पर बल्कि इसके लगभग सभी उत्तराधिकारियों पर भी सुधार था रेफरी>प्रोग्रामिंग लैंग्वेज डिजाइन पर संकेत, गाड़ी। होरे, दिसंबर 1973. पृष्ठ 27. (इस कथन को कभी-कभी गलत तरीके से एडजर डब्ल्यू. डिजस्ट्रा के लिए जिम्मेदार ठहराया जाता है, जो पहले एल्गोल 60 कंपाइलर को लागू करने में भी सम्मिलित था।)  योजना प्रोग्रामिंग भाषा, लिस्प का एक संस्करण जिसने ब्लॉक को अपनाया ऐल्गॉल की संरचना और लेक्सिकल स्कोप, ऐल्गॉल को श्रद्धांजलि में इसके मानक दस्तावेजों के लिए एल्गोरिदमिक लैंग्वेज स्कीम पर संशोधित रिपोर्ट शब्दों को भी अपनाया। रेफरी नाम = r3rs >

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

आईएएल कार्यान्वयन समयरेखा
तिथि करने के लिए ऐल्गॉल 60 के कम से कम 70 संवर्द्धन, विस्तार, व्युत्पत्ति और उपभाषाएं हुई हैं।

बरोज़ बोलियों में ESPOL और NEWP जैसी विशेष बूटस्ट्रैपिंग बोलियाँ सम्मिलित थीं। बाद वाला अभी भी यूनिसिस एमसीपी सिस्टम सॉफ्टवेयर के लिए उपयोग किया जाता है।

गुण
आधिकारिक तौर पर परिभाषित ऐल्गॉल 60 में कोई I/O सुविधा नहीं थी। कार्यान्वयन ने स्वयं को ऐसे तरीकों से परिभाषित किया जो शायद ही कभी एक दूसरे के साथ संगत थे। इसके विपरीत, ऐल्गॉल 68 ने ट्रांसपुट (इनपुट/आउटपुट) सुविधाओं की एक विस्तृत लाइब्रेरी की पेशकश की।

ऐल्गॉल 60 ने पैरामीटर पासिंग के लिए दो मूल्यांकन योजनयों की अनुमति दी: सामान्य कॉल-बाय-वैल्यू और कॉल-बाय-नेम। कॉल-बाय-रेफरेंस के विपरीत कॉल-बाय-नेम के कुछ प्रभाव हैं। उदाहरण के लिए, पैरामीटर को मान या संदर्भ के रूप में निर्दिष्ट किए बिना, ऐसी प्रक्रिया विकसित करना असंभव है जो दो पैरामीटर के मानों को स्वैप कर देगी यदि वास्तविक पैरामीटर जो एक पूर्णांक चर और एक सरणी है जो उसी पूर्णांक चर द्वारा अनुक्रमित है फ़ंक्शन में स्वैप (i, A [i]) पर पॉइंटर पास करने के बारे में सोचें। अब जब हर बार स्वैप का संदर्भ दिया जाता है, तो इसका पुनर्मूल्यांकन किया जाता है। कहो मैं: = 1 और ए [i]: = 2, इसलिए हर बार स्वैप का संदर्भ दिया जाता है, यह मूल्यों के अन्य संयोजन को लौटाएगा ([1,2], [2,1], [1,2] और इसी तरह ). इसी तरह की स्थिति वास्तविक तर्क के रूप में पारित एक यादृच्छिक कार्य के साथ होती है।

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

ऐल्गॉल 68 को एड्रियन वैन विंजार्डन द्वारा आविष्कृत एक दो-स्तरीय व्याकरण औपचारिकता का उपयोग करके परिभाषित किया गया था और जो उनके नाम पर आधारित है। वैन विजनार्डन व्याकरण एक संदर्भ-मुक्त व्याकरण का उपयोग करता है जो कि एक विशेष ऐल्गॉल 68 प्रोग्राम को पहचानने वाली प्रस्तुतियों का एक अनंत सेट उत्पन्न करता है; विशेष रूप से, वे उस तरह की आवश्यकताओं को व्यक्त करने में सक्षम होते हैं, जो कई अन्य प्रोग्रामिंग भाषा मानकों में शब्दार्थ के रूप में लेबल किए गए हैं और उन्हें अस्पष्टता-प्रवण प्राकृतिक भाषा गद्य में व्यक्त किया जाना है, और फिर संकलक में औपचारिक पार्सर भाषा से जुड़े तदर्थ कोड के रूप में लागू किया गया है।

ऐल्गॉल 60
जिस तरह से बोल्ड टेक्स्ट को लिखा जाना है, वह कार्यान्वयन पर निर्भर करता है, उदाहरण के लिए 'INTEGER'—उद्धरण चिह्न सम्मिलित होते हैं तथा पूर्णांक के लिए इसे स्ट्रॉपिंग के रूप में जाना जाता है। procedure Absmax(a) Size:(n, m) Result:(y) Subscripts:(i, k); value n, m; array a; integer n, m, i, k; real y; comment The absolute greatest element of the matrix a, of size n by m  is transferred to y, and the subscripts of this element to i and k; begin integer p, q;   y := 0; i := k := 1; for p := 1 step 1 until n do for q := 1 step 1 until m do if abs(a[p, q]) > y then begin y := abs(a[p, q]); i := p; k := q         end end Absmax इलियट 803 ऐल्गॉल का उपयोग करके टेबल बनाने का एक उदाहरण यहां दिया गया है।

फ़्लोटिंग पॉइंट एल्गोल परीक्षण BEGIN REAL A,B,C,D' READ D' FOR A:= 0.0 STEP D UNTIL 6.3 DO   BEGIN PRINT PUNCH(3),££L??' B := SIN(A)' C := COS(A)' PRINT PUNCH(3),SAMELINE,ALIGNED(1,6),A,B,C' END' END' PUNCH(3) टेप पंच के अतिरिक्त टेलीप्रिंटर को आउटपुट भेजता है। SAMELINE सामान्य रूप से तर्कों के बीच मुद्रित कैरिज return + लाइन फीड को दबा देता है। ALIGNED(1,6) दशमलव बिंदु के पहले 1 अंक और 6 के साथ आउटपुट के प्रारूप को नियंत्रित करता है।

ऐल्गॉल 68
निम्नलिखित कोड नमूने उपरोक्त ऐल्गॉल 60 कोड नमूने के ऐल्गॉल 68 संस्करण हैं।

ऐल्गॉल 68 कार्यान्वयन ने स्ट्रॉपिंग के लिए ऐल्गॉल 60 के दृष्टिकोण का उपयोग किया। ऐल्गॉल 68 के स्थितिमें बोल्ड टाइपफेस वाले टोकन आरक्षित शब्द, प्रकार (मोड) या ऑपरेटर हैं। proc abs max = ([,]real a, ref real y, ref int i, k)real: comment The absolute greatest element of the matrix a, of size ⌈a by 2⌈a is transferred to y, and the subscripts of this element to i and k; comment begin real y := 0; i := ⌊a; k := 2⌊a; for p from ⌊a to ⌈a do for q from 2⌊a to 2⌈a do if abs a[p, q] > y then y := abs a[p, q]; i := p; k := q    fi od od; y end # abs max # नोट: किसी सरणी की निचली (⌊) और ऊपरी (⌈) सीमाएं, और सरणी स्लाइसिंग, सीधे प्रोग्रामर के लिए उपलब्ध हैं। floating point ऐल्गॉल68 test: ( real a,b,c,d;  # printf – sends output to the file stand out. #  # printf($p$); – selects a new page #  printf(($pg$, Enter d: ));   read(d);  for step from 0 while a:=step*d; a <= 2*pi do   printf($l$); # $l$ - selects a new line. #   b := sin(a);   c := cos(a);   printf(($z-d.6d$,a,b,c)) # formats output with 1 digit before and 6 after the decimal point. #  od )

समयरेखा: हैलो वर्ल्ड
एक कार्यान्वयन से दूसरे कार्यान्वयन में कार्यक्रमों की विविधता और पोर्टेबिलिटी की कमी को क्लासिक हैलो वर्ल्ड प्रोग्राम द्वारा सरलता से प्रदर्शित किया जाता है।

ऐल्गॉल 58 (आईएएल)
ऐल्गॉल 58 में कोई I/O सुविधा नहीं थी।

अल जूल 60 परिवार
चूंकि ऐल्गॉल 60 में कोई I/O सुविधा नहीं थी, इसलिए ऐल्गॉल में कोई पोर्टेबल हैलो वर्ल्ड प्रोग्राम नहीं है। अगले तीन उदाहरण बरोज़ एक्सटेंडेड ऐल्गॉल में हैं। परस्पर संवादात्मक टर्मिनल पर पहले दो प्रत्यक्ष आउटपुट वे चलते हैं। पहला सी के समान एक वर्ण सरणी का उपयोग करता है। भाषा सरणी पहचानकर्ता को सरणी के सूचक के रूप में उपयोग करने की अनुमति देती है, और इसलिए एक REPLACE कथन में।

एक इनलाइन प्रारूप का उपयोग कर एक सरल प्रोग्राम:

डिस्प्ले स्टेटमेंट का उपयोग करने वाला एक और भी सरल प्रोग्राम। ध्यान दें कि इसका आउटपुट सिस्टम कंसोल ('एसपीओ') पर समाप्त होगा:

इलियट एल्गोल I/O का उपयोग करने वाला एक वैकल्पिक उदाहरण इस प्रकार है। इलियट ऐल्गॉल ने ओपन-स्ट्रिंग-कोट और क्लोज-स्ट्रिंग-कोट के लिए अलग-अलग वर्णों का उपयोग किया, जिसे यहां दर्शाया गया है तथा.

नीचे इलियट 803 एल्गोल (ए104) से एक संस्करण है। मानक इलियट 803 में पांच-छेद वाले पेपर टेप का उपयोग किया गया था और इस प्रकार केवल ऊपरी मामला था। कोड में किसी भी उद्धरण वर्ण का अभाव था इसलिए £ (यूके पाउंड साइन) का उपयोग खुले उद्धरण के लिए किया गया था और ? (प्रश्न चिह्न) करीबी उद्धरण के लिए। विशेष दृश्यों को दोहरे उद्धरण चिह्नों में रखा गया था (उदाहरण के लिए ££L?? ने टेलीप्रिंटर पर एक नई पंक्ति बनाई)। HIFOLKS'

BEGIN PRINT £HELLO WORLD£L??' END' ICT 1900 श्रृंखला ऐल्गॉल I/O संस्करण ने पेपर टेप या पंच कार्ड से इनपुट की अनुमति दी। पेपर टेप 'फुल' मोड में लोअर केस की अनुमति है। आउटपुट एक लाइन प्रिंटर के लिए था। ओपन और क्लोज कोट कैरेक्टर्स को '(' और ')' और स्पेस को % द्वारा दर्शाया गया था। [24] 'BEGIN' WRITE TEXT('('HELLO%WORLD')'); 'END'

ऐल्गॉल 68
ऐल्गॉल 68 कोड सामान्य रूप से लोअरकेस में आरक्षित शब्दों के साथ प्रकाशित किया गया था, लेकिन बोल्ड या रेखांकित किया गया। begin printf(($gl$, Hello, world! )) end ऐल्गॉल 68 रिपोर्ट की भाषा में इनपुट/आउटपुट सुविधाओं को सामूहिक रूप से ट्रांसपुट कहा जाता था।

ऐल्गॉल विशेष वर्णों की समयरेखा
ऐल्गॉल की कल्पना ऐसे समय में की गई थी जब चरित्र सेट विविध थे और तेजी से विकसित हो रहे थे; इसके अतिरिक्त, ऐल्गॉल-एस को परिभाषित किया गया था ताकि केवल अपरकेस अक्षरों की आवश्यकता हो।

1960: IFIP - ऐल्गॉल 60 भाषा और रिपोर्ट में कई गणितीय प्रतीक सम्मिलित थे जो आधुनिक कंप्यूटर और ऑपरेटिंग सिस्टम पर उपलब्ध हैं, लेकिन दुर्भाग्य से, उस समय अधिकांश कंप्यूटिंग सिस्टम पर असमर्थित थे। उदाहरण के लिए: ×, ÷, ≤, ≥, ≠, ¬, ∨, ∧, ⊂, ≡, ␣ और ⏨।

1961 सितंबर: ASCII - ASCII वर्ण सेट, तब विकास के प्रारंभिक चरण में, ऐल्गॉल के बूलियन ऑपरेटरों /\ और \/ का समर्थन करने के लिए इसमें \ (बैक स्लैश) वर्ण जोड़ा गया था।

1962: एल्कोर - इस कैरेक्टर सेट में असामान्य ᛭ सम्मिलित था रूनिक क्रॉस गुणन के लिए वर्ण और ⏨ दशमलव घातांक चिह्न फ़्लोटिंग पॉइंट नोटेशन के लिए।

1964: GOST - 1964 के सोवियत मानक GOST 10859 ने ऐल्गॉल में 4-बिट, 5-बिट, 6-बिट और 7-बिट वर्णों की एन्कोडिंग की अनुमति दी।

1968: ऐल्गॉल 68 रिपोर्ट - मौजूदा ऐल्गॉल वर्णों का उपयोग किया गया, और आगे अपनाया गया →, ↓, ↑, □, ⌊, ⌈, ⎩, ⎧, ○, ⊥, और ¢ वर्ण जो IBM 2741 कीबोर्ड पर पाए जा सकते हैं टाइपबॉल (या गोल्फ बॉल) प्रिंट हेड डाले गए (जैसे एपीएल गोल्फ बॉल)। ये 1960 के दशक के मध्य में उपलब्ध हुए जब ऐल्गॉल 68 का मसौदा तैयार किया जा रहा था। रिपोर्ट का रूसी, जर्मन, फ्रेंच और बल्गेरियाई में अनुवाद किया गया था, और बड़े वर्ण सेट वाली भाषाओं में प्रोग्रामिंग की अनुमति दी गई थी, उदाहरण के लिए, सोवियत BESM-4 के सिरिलिक वर्णमाला। ऐल्गॉल के सभी अक्षर भी यूनिकोड मानक का हिस्सा हैं और उनमें से अधिकांश कई लोकप्रिय फोंट में उपलब्ध हैं।

2009 अक्टूबर: यूनिकोड - फ़्लोटिंग पॉइंट नोटेशन के लिए  (दशमलव प्रतिपादक प्रतीक) को यूनिकोड 5.2 में ऐतिहासिक बुरान कार्यक्रम ऐल्गॉल सॉफ़्टवेयर के साथ पिछड़े संगतता के लिए जोड़ा गया था।

अग्रिम पठन

 * Brian Randell and L. J. Russell, ऐल्गॉल 60 Implementation: The Translation and Use of ऐल्गॉल 60 Programs on a Computer. Academic Press, 1964. The design of the Whetstone Compiler. One of the early published descriptions of implementing a compiler. See the related papers: Whetstone ऐल्गॉल Revisited, and The Whetstone KDF9 ऐल्गॉल Translator by Brian Randell
 * Revised Report on the Algorithmic Language ऐल्गॉल 60 by Peter Naur, et al. ऐल्गॉल definition
 * The European Side of the Last Phase of the Development of ऐल्गॉल 60 by Peter Naur
 * Revised Report on the Algorithmic Language ऐल्गॉल 60 by Peter Naur, et al. ऐल्गॉल definition
 * The European Side of the Last Phase of the Development of ऐल्गॉल 60 by Peter Naur
 * The European Side of the Last Phase of the Development of ऐल्गॉल 60 by Peter Naur

बाहरी संबंध

 * History of ऐल्गॉल at the Computer History Museum
 * Web enabled ऐल्गॉल-F compiler for small experiments
 * An online ऐल्गॉल compiler