अल्गोल

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

इस अर्थ में अधिकांश आधुनिक भाषाओं का वाक्य-विन्यास ऐल्गॉल की तरह होता है, यह तीन अन्य उच्च-स्तरीय प्रोग्रामिंग भाषाओं की तुलना में यकीनन अधिक प्रभावशाली थी, जिनमें से यह लगभग समकालीन थी फोरट्रान, लिस्प और कोबोल। इसे फोरट्रान के साथ कुछ कथित समस्याओं से बचने के लिए प्रतिरूपित किया गया था और अंततः PL/I, सिमुला, BCPL, B, पास्कल, और C. सहित कई अन्य प्रोग्रामिंग भाषाओं को जन्म दिया।

ऐल्गॉल ने ब्लॉक (प्रोग्रामिंग) और ... उनका परिसीमन करने के लिए जोड़े। यह लेक्सिकल स्कोप के साथ नेस्टेड फलन परिभाषाओं को लागू करने वाली पहली भाषा भी थी। इसके अतिरिक्त, यह पहली प्रोग्रामिंग भाषा थी, जिसने औपचारिक भाषा की परिभाषा पर विस्तृत ध्यान दिया और एल्गोल 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 जनवरी तक बैठक में भाग लिया था। एलन पेर्लिस ने बैठक का एक विशद वर्णन दिया। बैठकें थकाऊ, अंतहीन और उत्साहजनक थीं। जब किसी के अच्छे विचारों को दूसरों के बुरे विचारों के साथ छोड़ दिया गया तो वह उत्तेजित हो गया था। फिर भी, परिश्रम पूरी अवधि के दौरान उत्कृष्ट बना रहा था।
 * फ्रेडरिक एल. बाउर, पीटर नौर, हेंज रटिशौसर, क्लॉस सेमेलसन, बर्नार्ड वाउक्विस, एड्रियान वैन विजनगार्डन, और माइकल वुडगर (यूरोप से)
 * जॉन बैकस.जॉन डब्ल्यू.बैकस, जूलियन ग्रीन (कंप्यूटर वैज्ञानिक), चार्ल्स काट्ज, जॉन मैक्कार्थी (कंप्यूटर वैज्ञानिक), एलन पर्लिस. एलन जे. पर्लिस, और जोसेफ हेनरी वेगस्टीन (यूएसए से)।

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

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

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

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

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

ऐल्गॉल 60 ने पैरामीटर पासिंग के लिए दो मूल्यांकन योजनयों की अनुमति दी: सामान्य कॉल-बाय-वैल्यू और कॉल-बाय-नेम। कॉल-बाय-रेफरेंस के विपरीत कॉल-बाय-नेम के कुछ प्रभाव होता हैं। उदाहरण के लिए पैरामीटर को मान या संदर्भ के रूप में निर्दिष्ट किए बिना, ऐसी प्रक्रिया विकसित करना असंभव होता है, जो दो पैरामीटर के मानों को स्वैप कर देगी। यदि वास्तविक पैरामीटर एक पूर्णांक चर और एक सरणी है जो उसी पूर्णांक चर द्वारा अनुक्रमित होता है फलन में स्वैप (i, A [i]) पर पॉइंटर पास करने के बारे में सोचें। जब हर बार स्वैप का संदर्भ दिया जाता है, तो इसका पुनर्मूल्यांकन किया जाता है। उदाहरण मै i = 1 और A [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 सुविधा नहीं होती थी, इसलिए ऐल्गॉल में कोई पोर्टेबल हैलो वर्ल्ड प्रोग्राम नहीं है। अगले तीन उदाहरण बरोज़ एक्सटेंडेड ऐल्गॉल में हैं। परस्पर संवादात्मक टर्मिनल पर पहले दो प्रत्यक्ष आउटपुट वे चलते हैं। पहला C के समान एक वर्ण सरणी का उपयोग करता है। तथा भाषा सरणी पहचानकर्ता को सरणी के सूचक के रूप में उपयोग करने की अनुमति देती है, और इसलिए एक REPLACE कथन में।

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

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

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

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

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