सीएलयू (प्रोग्रामिंग लैंग्वेज): Difference between revisions
No edit summary |
No edit summary |
||
Line 1: | Line 1: | ||
{{Infobox programming language | {{Infobox programming language | ||
|name = | | name = सीएलयू | ||
|logo = | | logo = | ||
|paradigm = [[Multi-paradigm programming language|multi-paradigm]]: [[Object-oriented programming|object-oriented]], [[Procedural programming|procedural]] | | paradigm = [[Multi-paradigm programming language|multi-paradigm]]: [[Object-oriented programming|object-oriented]], [[Procedural programming|procedural]] | ||
|released = {{Start date and age|1975}} | | released = {{Start date and age|1975}} | ||
|designer = [[Barbara Liskov]] and her students | | designer = [[Barbara Liskov]] and her students | ||
|developer = [[Massachusetts Institute of Technology]] | | developer = [[Massachusetts Institute of Technology]] | ||
|latest release version = Native CLU 1.5 ([[SPARC]], [[VAX]]) / {{Start date and age|1989|05|26}}<ref name="Native">{{cite web |url=http://pmg.csail.mit.edu/~dcurtis/clu/ |title=CLU home page |website=Programming Methodology Group, Computer Science and Artificial Intelligence Laboratory |publisher=Massachusetts Institute of Technology |first=Dorothy |last=Curtis |date=2009-11-06 |access-date=2016-05-26}}</ref><br /> | | latest release version = Native CLU 1.5 ([[SPARC]], [[VAX]]) / {{Start date and age|1989|05|26}}<ref name="Native">{{cite web |url=http://pmg.csail.mit.edu/~dcurtis/clu/ |title=CLU home page |website=Programming Methodology Group, Computer Science and Artificial Intelligence Laboratory |publisher=Massachusetts Institute of Technology |first=Dorothy |last=Curtis |date=2009-11-06 |access-date=2016-05-26}}</ref><br /> | ||
Portable CLU / {{Start date and age|2009|11|06}}<ref name="Portable">{{cite web |url=ftp://ftp.lcs.mit.edu/pub/pclu |title=Index of /pub/pclu |website=Programming Methodology Group, Computer Science and Artificial Intelligence Laboratory |publisher=Massachusetts Institute of Technology |first=Dorothy |last=Curtis |date=2009-11-06 |access-date=2016-05-26}}</ref> | Portable CLU / {{Start date and age|2009|11|06}}<ref name="Portable">{{cite web |url=ftp://ftp.lcs.mit.edu/pub/pclu |title=Index of /pub/pclu |website=Programming Methodology Group, Computer Science and Artificial Intelligence Laboratory |publisher=Massachusetts Institute of Technology |first=Dorothy |last=Curtis |date=2009-11-06 |access-date=2016-05-26}}</ref> | ||
|latest release date = | | latest release date = | ||
|typing = [[Strong typing|strong]] | | typing = [[Strong typing|strong]] | ||
|website = {{URL|pmg.csail.mit.edu/CLU.html}} | | website = {{URL|pmg.csail.mit.edu/CLU.html}} | ||
|implementations = PDP-10 CLU,<ref>{{cite web |title=CLU files, 1976–1989 |work=Tapes of Tech Square (ToTS) collection, MC-0741 |publisher=Department of Distinctive Collections, Massachusetts Institute of Technology |url=https://github.com/MITDDC/clu-1976-1989 |id=[https://archive.softwareheritage.org/swh:1:dir:5dc935d1c236b15a99b0750cf236b2d89ec951d0 swh:1:dir:5dc935d1c236b15a99b0750cf236b2d89ec951d0]}}</ref> Native CLU,<ref name="Native" /> Portable CLU,<ref name="Portable" /> clu2c<ref name="clu2c">{{cite web |url=http://woodsheep.jp/clu2c.html |title=clu2c |website=clu2c |publisher=woodsheep.jp |first=Tetsu |last=Ushijima |date=<!--Likely embedded in downloadable target or zip files.--> |access-date=2016-05-26}}</ref> | | implementations = PDP-10 CLU,<ref>{{cite web |title=CLU files, 1976–1989 |work=Tapes of Tech Square (ToTS) collection, MC-0741 |publisher=Department of Distinctive Collections, Massachusetts Institute of Technology |url=https://github.com/MITDDC/clu-1976-1989 |id=[https://archive.softwareheritage.org/swh:1:dir:5dc935d1c236b15a99b0750cf236b2d89ec951d0 swh:1:dir:5dc935d1c236b15a99b0750cf236b2d89ec951d0]}}</ref> Native CLU,<ref name="Native" /> Portable CLU,<ref name="Portable" /> clu2c<ref name="clu2c">{{cite web |url=http://woodsheep.jp/clu2c.html |title=clu2c |website=clu2c |publisher=woodsheep.jp |first=Tetsu |last=Ushijima |date=<!--Likely embedded in downloadable target or zip files.--> |access-date=2016-05-26}}</ref> | ||
|dialects = | | dialects = | ||
|influenced by = [[ALGOL 60]], [[Lisp (programming language)|Lisp]], [[Simula]], [[Alphard (programming language)|Alphard]] | | influenced by = [[ALGOL 60]], [[Lisp (programming language)|Lisp]], [[Simula]], [[Alphard (programming language)|Alphard]] | ||
|influenced = [[Ada (programming language)|Ada]], [[Argus (programming language)|Argus]], [[C++]],<ref name="history-of-cpp">{{cite book |last1=Stroustrup |first1=Bjarne |title=A History of C++: 1979--1991 |date=1996 |publisher=Association for Computing Machinery |location=New York, NY, USA |page=699–769 |url=https://doi.org/10.1145/234286.1057836 |access-date=25 March 2022}}</ref> [[Lua (programming language)|Lua]], [[Python (programming language)|Python]],<ref name="effbot-call-by-object">{{cite web |url=http://effbot.org/zone/call-by-object.htm |title=Call By Object |work=effbot.org |last=Lundh |first=Fredrik |quote=replace "CLU" with "Python", "record" with "instance", and "procedure" with "function or method", and you get a pretty accurate description of Python's object model. |access-date=21 November 2017 |archive-date=23 November 2019 |archive-url=https://web.archive.org/web/20191123043655/http://effbot.org/zone/call-by-object.htm |url-status=dead }}</ref> [[Ruby (programming language)|Ruby]], [[Sather]], [[Swift (programming language)|Swift]]<ref name="lattner2014">{{cite web |url=http://nondot.org/sabre/ |title=Chris Lattner's Homepage |last=Lattner |first=Chris |date=2014-06-03|access-date=2014-06-03 |publisher=Chris Lattner |quote=The Swift language is the product of tireless effort from a team of language experts, documentation gurus, compiler optimization ninjas, and an incredibly important internal dogfooding group who provided feedback to help refine and battle-test ideas. Of course, it also greatly benefited from the experiences hard-won by many other languages in the field, drawing ideas from Objective-C, Rust, Haskell, Ruby, Python, C#, CLU, and far too many others to list.}}</ref> | | influenced = [[Ada (programming language)|Ada]], [[Argus (programming language)|Argus]], [[C++]],<ref name="history-of-cpp">{{cite book |last1=Stroustrup |first1=Bjarne |title=A History of C++: 1979--1991 |date=1996 |publisher=Association for Computing Machinery |location=New York, NY, USA |page=699–769 |url=https://doi.org/10.1145/234286.1057836 |access-date=25 March 2022}}</ref> [[Lua (programming language)|Lua]], [[Python (programming language)|Python]],<ref name="effbot-call-by-object">{{cite web |url=http://effbot.org/zone/call-by-object.htm |title=Call By Object |work=effbot.org |last=Lundh |first=Fredrik |quote=replace "CLU" with "Python", "record" with "instance", and "procedure" with "function or method", and you get a pretty accurate description of Python's object model. |access-date=21 November 2017 |archive-date=23 November 2019 |archive-url=https://web.archive.org/web/20191123043655/http://effbot.org/zone/call-by-object.htm |url-status=dead }}</ref> [[Ruby (programming language)|Ruby]], [[Sather]], [[Swift (programming language)|Swift]]<ref name="lattner2014">{{cite web |url=http://nondot.org/sabre/ |title=Chris Lattner's Homepage |last=Lattner |first=Chris |date=2014-06-03|access-date=2014-06-03 |publisher=Chris Lattner |quote=The Swift language is the product of tireless effort from a team of language experts, documentation gurus, compiler optimization ninjas, and an incredibly important internal dogfooding group who provided feedback to help refine and battle-test ideas. Of course, it also greatly benefited from the experiences hard-won by many other languages in the field, drawing ideas from Objective-C, Rust, Haskell, Ruby, Python, C#, CLU, and far too many others to list.}}</ref> | ||
}} | }} | ||
सीएलयू [[मैसाचुसेट्स की तकनीकी संस्था|मैसाचुसेट्स इंस्टिट्यूट ऑफ़ टेक्नोलॉजी]] (एमआईटी) में [[बारबरा लिस्कोव]] और उनके छात्रों द्वारा 1973 में | सीएलयू [[मैसाचुसेट्स की तकनीकी संस्था|मैसाचुसेट्स इंस्टिट्यूट ऑफ़ टेक्नोलॉजी]] (एमआईटी) में [[बारबरा लिस्कोव]] और उनके छात्रों द्वारा 1973 में प्रारम्भ की गई एक [[प्रोग्रामिंग भाषा|प्रोग्रामिंग लैंग्वेज]] है।<ref name="History">Liskov, Barbara (1992). "A history of CLU". The second ACM SIGPLAN conference on History of programming languages.</ref> यद्यापि इसे व्यापक प्रयोग नहीं मिला, इसने कई विशेषताएं पेश कीं जो अब व्यापक रूप से उपयोग की जाती हैं, और इसे [[ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग]] (ओओपी) के विकास में एक कदम के रूप में देखा जाता है। | ||
मुख्य योगदान में [[सार डेटा प्रकार]] सम्मिलित हैं,<ref>{{Cite conference |doi= 10.1145/800233.807045 |chapter= Programming with abstract data types |title= Proceedings of the ACM SIGPLAN symposium on Very high level languages |pages= 50–59 |year= 1974 |last1= Liskov |first1= Barbara |author-link1= Barbara Liskov |last2= Zilles |first2= Stephen |citeseerx= 10.1.1.136.3043 }}</ref> [[कॉल-बाय-शेयरिंग]], [[इटरेटर|इंटररेटर्स]], एकाधिक रिटर्न मान ([[समानांतर असाइनमेंट]] का एक रूप), प्रकार-सेफ [[पैरामीटरयुक्त प्रकार]] और प्रकार-सुरक्षित संस्करण प्रकार सम्मिलित है। यह [[कंस्ट्रक्टर (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग)]] और विधियों के साथ [[वर्ग (कंप्यूटर प्रोग्रामिंग)|कक्षाओं (कंप्यूटर प्रोग्रामिंग)]] के उपयोग के लिए भी उल्लेखनीय है, परन्तु [[वंशानुक्रम (वस्तु-उन्मुख प्रोग्रामिंग)]] के बिना। | मुख्य योगदान में [[सार डेटा प्रकार]] सम्मिलित हैं,<ref>{{Cite conference |doi= 10.1145/800233.807045 |chapter= Programming with abstract data types |title= Proceedings of the ACM SIGPLAN symposium on Very high level languages |pages= 50–59 |year= 1974 |last1= Liskov |first1= Barbara |author-link1= Barbara Liskov |last2= Zilles |first2= Stephen |citeseerx= 10.1.1.136.3043 }}</ref> [[कॉल-बाय-शेयरिंग]], [[इटरेटर|इंटररेटर्स]], एकाधिक रिटर्न मान ([[समानांतर असाइनमेंट]] का एक रूप), प्रकार-सेफ [[पैरामीटरयुक्त प्रकार]] और प्रकार-सुरक्षित संस्करण प्रकार सम्मिलित है। यह [[कंस्ट्रक्टर (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग)]] और विधियों के साथ [[वर्ग (कंप्यूटर प्रोग्रामिंग)|कक्षाओं (कंप्यूटर प्रोग्रामिंग)]] के उपयोग के लिए भी उल्लेखनीय है, परन्तु [[वंशानुक्रम (वस्तु-उन्मुख प्रोग्रामिंग)]] के बिना। | ||
== क्लस्टर == | == क्लस्टर == | ||
सीएलयू का वाक्य-विन्यास [[ALGOL]] पर आधारित था, जो तब अधिकांश नए | सीएलयू का वाक्य-विन्यास [[ALGOL]] पर आधारित था, जो तब अधिकांश नए लैंग्वेज प्रारूपों के लिए प्रारंभिक बिंदु था। मुख्य जोड़ क्लस्टर की अवधारणा, सीएलयू की प्रकार विस्तार प्रणाली और लैंग्वेज के नाम की जड़ थी।<ref name=Liskov1977>{{Cite journal |last1= Liskov |first1= B. |author-link1= Barbara Liskov |last2= Snyder |first2= A. |last3= Atkinson |first3= R. |last4= Schaffert |first4= C. |title= Abstraction mechanisms in CLU |doi= 10.1145/359763.359789 |journal= [[Communications of the ACM]] |volume= 20 |issue= 8 |pages= 564–576 |date=August 1977 |citeseerx=10.1.1.112.656 |s2cid= 17343380 }}</ref> क्लस्टर सामान्यतः ओओ लैंग्वेज में कक्षा की अवधारणा के अनुरूप होते हैं। उदाहरण के लिए, यहाँ एक क्लस्टर के लिए सीएलयू सिंटैक्स है जो [[जटिल संख्या]]ओं को लागू करता है: | ||
complex_number = cluster is add, subtract, multiply, ... | complex_number = cluster is add, subtract, multiply, ... | ||
Line 30: | Line 30: | ||
... | ... | ||
end complex_number; | end complex_number; | ||
क्लस्टर एक प्रारूप है जो इसके सभी घटकों को समाहित करता है सिवाय उन लोगों के जिन्हें स्पष्ट रूप से खंड में नामित किया गया है। ये हाल ही की ओओ | क्लस्टर एक प्रारूप है जो इसके सभी घटकों को समाहित करता है सिवाय उन लोगों के जिन्हें स्पष्ट रूप से खंड में नामित किया गया है। ये हाल ही की ओओ लैंग्वेजओं में कक्षा के सार्वजनिक घटकों से मेल खाते हैं। एक क्लस्टर एक प्रकार को भी परिभाषित करता है जिसे क्लस्टर के बाहर नाम दिया जा सकता है (इस मामले में, कॉम्प्लेक्स_नंबर), परन्तु इसका प्रतिनिधित्व प्रकार बाहरी ग्राहकों से छिपा हुआ है। | ||
क्लस्टर नाम वैश्विक हैं, और समूहों को कोई नाम स्थान तंत्र प्रदान नहीं किया गया था या उन्हें अन्य समूहों के अंदर स्थानीय रूप से बनाने की अनुमति नहीं दी गई थी। | क्लस्टर नाम वैश्विक हैं, और समूहों को कोई नाम स्थान तंत्र प्रदान नहीं किया गया था या उन्हें अन्य समूहों के अंदर स्थानीय रूप से बनाने की अनुमति नहीं दी गई थी। | ||
Line 39: | Line 39: | ||
== अन्य विशेषताएं == | == अन्य विशेषताएं == | ||
सीएलयू प्रकार प्रणाली की एक अन्य प्रमुख विशेषता पुनरावर्तक हैं, जो एक के बाद एक संग्रह से क्रमिक रूप से वस्तुओं को लौटाते हैं।<ref name=Liskov1977 />Iterators एक समान [[अप्लिकेशन प्रोग्रामिंग अंतरफलक]] (API) प्रदान करते हैं, चाहे वे किसी भी डेटा के साथ उपयोग किए जा रहे हों। इस प्रकार के संग्रह के लिए इटरेटर <code>complex_number</code>की एक सरणी के लिए s का परस्पर उपयोग किया जा सकता है <code>integer</code>एस। सीएलयू पुनरावृत्तियों की एक विशिष्ट विशेषता यह है कि वे कोरूटीन के रूप में कार्यान्वित किए जाते हैं, जिसमें प्रत्येक मूल्य एक यील्ड स्टेटमेंट के माध्यम से कॉलर को प्रदान किया जाता है। सीएलयू जैसे इटरेटर अब कई आधुनिक | सीएलयू प्रकार प्रणाली की एक अन्य प्रमुख विशेषता पुनरावर्तक हैं, जो एक के बाद एक संग्रह से क्रमिक रूप से वस्तुओं को लौटाते हैं।<ref name=Liskov1977 />Iterators एक समान [[अप्लिकेशन प्रोग्रामिंग अंतरफलक]] (API) प्रदान करते हैं, चाहे वे किसी भी डेटा के साथ उपयोग किए जा रहे हों। इस प्रकार के संग्रह के लिए इटरेटर <code>complex_number</code>की एक सरणी के लिए s का परस्पर उपयोग किया जा सकता है <code>integer</code>एस। सीएलयू पुनरावृत्तियों की एक विशिष्ट विशेषता यह है कि वे कोरूटीन के रूप में कार्यान्वित किए जाते हैं, जिसमें प्रत्येक मूल्य एक यील्ड स्टेटमेंट के माध्यम से कॉलर को प्रदान किया जाता है। सीएलयू जैसे इटरेटर अब कई आधुनिक लैंग्वेजओं जैसे C#, रूबी और पायथन की एक सामान्य विशेषता है, हालांकि हाल ही में उन्हें अक्सर जनरेटर के रूप में संदर्भित किया जाता है। | ||
सीएलयू में अन्य | सीएलयू में अन्य लैंग्वेजओं में विभिन्न प्रयासों के आधार पर अपवाद प्रबंधन भी शामिल है; अपवादों का उपयोग करके उठाया जाता है <code>signal</code> और साथ संभाला <code>except</code>. अपवाद से निपटने वाली अधिकांश अन्य लैंग्वेजओं के विपरीत, अपवादों को कॉलिंग श्रृंखला में स्पष्ट रूप से इस्तीफा नहीं दिया जाता है। इसके अलावा अधिकांश अन्य लैंग्वेजओं के विपरीत जो अपवाद प्रबंधन प्रदान करती हैं, सीएलयू में अपवादों को सामान्य निष्पादन प्रवाह का हिस्सा माना जाता है और लूप से बाहर निकलने या कार्यों से लौटने के लिए एक सामान्य और कुशल प्रकार-सुरक्षित तरीका माना जाता है; यह रिटर्न वैल्यू के सीधे असाइनमेंट की अनुमति देता है, सिवाय इसके कि जब अन्य शर्तें लागू हों। अपवाद जो न तो पकड़े जाते हैं और न ही स्पष्ट रूप से इस्तीफा दिए जाते हैं, तुरंत एक विशेष विफलता अपवाद में परिवर्तित हो जाते हैं जो आमतौर पर कार्यक्रम को समाप्त कर देते हैं। | ||
लैंग्वेज ML (प्रोग्रामिंग लैंग्वेज) के पास होने से पहले, सीएलयू को अक्सर टाइप-सेफ वैरिएंट प्रकारों वाली पहली लैंग्वेज होने का श्रेय दिया जाता है, जिसे oneofs कहा जाता है। | |||
सीएलयू में एक अंतिम विशिष्ट विशेषता समानांतर असाइनमेंट (बहु असाइनमेंट) है, जहां एक [[असाइनमेंट (कंप्यूटर विज्ञान)]] ऑपरेटर के बाईं ओर एक से अधिक चर दिखाई दे सकते हैं। उदाहरण के लिए, लेखन <code>x,y := y,x</code> के मूल्यों का आदान-प्रदान करेगा <code>x</code> और <code>y</code>. उसी तरह, फ़ंक्शन कई मान लौटा सकते हैं, जैसे {{CLU|1=x,y,z := f(t)}}. समानांतर असाइनमेंट (हालांकि कई वापसी मान नहीं) सीएलयू से पहले का है, CPL (प्रोग्रामिंग लैंग्वेज) (1963) में दिखाई देता है, जिसका नाम समकालिक असाइनमेंट है,<ref>{{cite journal |first1= D. W. |last1= Barron |first2= J. N. |last2= Buxton |first3= D. F. |last3= Hartley |first4= E. |last4= Nixon |first5= C. |last5= Strachey |title= The main features of CPL |journal= Computer Journal |volume= 6 |issue= 2 |pages= 134–143 |date= 1963 |doi= 10.1093/comjnl/6.2.134|doi-access= free }}</ref> लेकिन सीएलयू ने इसे लोकप्रिय बनाया और अक्सर बाद की | सीएलयू में एक अंतिम विशिष्ट विशेषता समानांतर असाइनमेंट (बहु असाइनमेंट) है, जहां एक [[असाइनमेंट (कंप्यूटर विज्ञान)]] ऑपरेटर के बाईं ओर एक से अधिक चर दिखाई दे सकते हैं। उदाहरण के लिए, लेखन <code>x,y := y,x</code> के मूल्यों का आदान-प्रदान करेगा <code>x</code> और <code>y</code>. उसी तरह, फ़ंक्शन कई मान लौटा सकते हैं, जैसे {{CLU|1=x,y,z := f(t)}}. समानांतर असाइनमेंट (हालांकि कई वापसी मान नहीं) सीएलयू से पहले का है, CPL (प्रोग्रामिंग लैंग्वेज) (1963) में दिखाई देता है, जिसका नाम समकालिक असाइनमेंट है,<ref>{{cite journal |first1= D. W. |last1= Barron |first2= J. N. |last2= Buxton |first3= D. F. |last3= Hartley |first4= E. |last4= Nixon |first5= C. |last5= Strachey |title= The main features of CPL |journal= Computer Journal |volume= 6 |issue= 2 |pages= 134–143 |date= 1963 |doi= 10.1093/comjnl/6.2.134|doi-access= free }}</ref> लेकिन सीएलयू ने इसे लोकप्रिय बनाया और अक्सर बाद की लैंग्वेजओं में समानांतर असाइनमेंट के प्रत्यक्ष प्रभाव के रूप में इसका श्रेय दिया जाता है। | ||
सीएलयू प्रोग्राम में सभी ऑब्जेक्ट हीप में रहते हैं, और मेमोरी प्रबंधन स्वचालित होता है। | सीएलयू प्रोग्राम में सभी ऑब्जेक्ट हीप में रहते हैं, और मेमोरी प्रबंधन स्वचालित होता है। | ||
सीएलयू [[सामान्य प्रोग्रामिंग]] का समर्थन करता है | टाइप-पैरामीटरीकृत उपयोगकर्ता-परिभाषित डेटा सार। वास्तविक प्रकार के तर्कों पर बाधाओं को व्यक्त करने के लिए क्लॉज़ का उपयोग करते हुए, टाइप-सेफ बाउंडेड पैरामिट्रीकृत प्रकारों की पेशकश करने वाली यह पहली | सीएलयू [[सामान्य प्रोग्रामिंग]] का समर्थन करता है | टाइप-पैरामीटरीकृत उपयोगकर्ता-परिभाषित डेटा सार। वास्तविक प्रकार के तर्कों पर बाधाओं को व्यक्त करने के लिए क्लॉज़ का उपयोग करते हुए, टाइप-सेफ बाउंडेड पैरामिट्रीकृत प्रकारों की पेशकश करने वाली यह पहली लैंग्वेज थी। टेम्प्लेट-आधारित जेनरिक वाली लैंग्वेजओं के विपरीत, इस तरह के डेटा एब्स्ट्रैक्शन का उपयोग अमूर्त के कार्यान्वयन तक पहुंच के बिना टाइप-चेक किया जा सकता है। | ||
== प्रभाव == | == प्रभाव == | ||
सीएलयू और Ada (प्रोग्रामिंग | सीएलयू और Ada (प्रोग्रामिंग लैंग्वेज) [[C++]] [[Template (C++)]] के लिए प्रमुख प्रेरणा थे।<ref name="history-of-cpp"/> | ||
सीएलयू के अपवाद प्रबंधन तंत्र ने बाद की | सीएलयू के अपवाद प्रबंधन तंत्र ने बाद की लैंग्वेजओं जैसे C++ को प्रभावित किया<ref name="history-of-cpp"/>और [[जावा (प्रोग्रामिंग भाषा)|जावा (प्रोग्रामिंग लैंग्वेज)]]।{{Citation needed|date=August 2020}} | ||
[[Sather]], Python (प्रोग्रामिंग लैंग्वेज), और C Sharp (प्रोग्रामिंग लैंग्वेज) | C# में इटरेटर शामिल हैं, जो पहली बार सीएलयू में दिखाई दिए।<ref name="History"/> | [[Sather]], Python (प्रोग्रामिंग लैंग्वेज), और C Sharp (प्रोग्रामिंग लैंग्वेज) | C# में इटरेटर शामिल हैं, जो पहली बार सीएलयू में दिखाई दिए।<ref name="History"/> | ||
[[पर्ल]] और [[लुआ (प्रोग्रामिंग भाषा)]] ने सीएलयू से फंक्शन कॉल्स से कई असाइनमेंट और मल्टीपल रिटर्न लिए।<ref>{{Cite conference |last1= Ierusalimschy |first1= R. |last2= De Figueiredo |first2= L. H. |last3= Celes |first3= W. |doi= 10.1145/1238844.1238846 |chapter= The evolution of Lua |title= Proceedings of the third ACM SIGPLAN conference on History of programming languages – HOPL III |pages= 2-1–2-26 |year= 2007 |isbn= 978-1-59593-766-7 |chapter-url=http://www.lua.org/doc/hopl.pdf |archive-url=https://web.archive.org/web/20100703022703/http://www.lua.org/doc/hopl.pdf |archive-date=2010-07-03 |url-status=live}}</ref> | [[पर्ल]] और [[लुआ (प्रोग्रामिंग भाषा)|लुआ (प्रोग्रामिंग लैंग्वेज)]] ने सीएलयू से फंक्शन कॉल्स से कई असाइनमेंट और मल्टीपल रिटर्न लिए।<ref>{{Cite conference |last1= Ierusalimschy |first1= R. |last2= De Figueiredo |first2= L. H. |last3= Celes |first3= W. |doi= 10.1145/1238844.1238846 |chapter= The evolution of Lua |title= Proceedings of the third ACM SIGPLAN conference on History of programming languages – HOPL III |pages= 2-1–2-26 |year= 2007 |isbn= 978-1-59593-766-7 |chapter-url=http://www.lua.org/doc/hopl.pdf |archive-url=https://web.archive.org/web/20100703022703/http://www.lua.org/doc/hopl.pdf |archive-date=2010-07-03 |url-status=live}}</ref> | ||
पायथन (प्रोग्रामिंग लैंग्वेज) और [[रूबी (प्रोग्रामिंग भाषा)]] शेयरिंग द्वारा उधार ली गई कॉल, यील्ड स्टेटमेंट,<ref name="Appfolio">{{cite web |url=https://engineering.appfolio.com/appfolio-engineering/2019/7/3/rubys-roots-and-matzs-leadership |title=Ruby's Roots and Matz's Leadership |website=Appfolio Engineering |quote=Matz feels that blocks are the greatest invention of Ruby (I agree.) He got the idea from a 1970s language called CLU from MIT, which called them 'iterators'... |date=2019-11-08 |access-date=2019-11-15}}</ref> और एकाधिक असाइनमेंट।<ref>{{Cite web|title=Functional Programming HOWTO — Python 3.8.3 documentation|url=https://docs.python.org/3/howto/functional.html|website=docs.python.org|access-date=2020-05-25}}</ref> | पायथन (प्रोग्रामिंग लैंग्वेज) और [[रूबी (प्रोग्रामिंग भाषा)|रूबी (प्रोग्रामिंग लैंग्वेज)]] शेयरिंग द्वारा उधार ली गई कॉल, यील्ड स्टेटमेंट,<ref name="Appfolio">{{cite web |url=https://engineering.appfolio.com/appfolio-engineering/2019/7/3/rubys-roots-and-matzs-leadership |title=Ruby's Roots and Matz's Leadership |website=Appfolio Engineering |quote=Matz feels that blocks are the greatest invention of Ruby (I agree.) He got the idea from a 1970s language called CLU from MIT, which called them 'iterators'... |date=2019-11-08 |access-date=2019-11-15}}</ref> और एकाधिक असाइनमेंट।<ref>{{Cite web|title=Functional Programming HOWTO — Python 3.8.3 documentation|url=https://docs.python.org/3/howto/functional.html|website=docs.python.org|access-date=2020-05-25}}</ref> | ||
Revision as of 12:51, 10 October 2023
Paradigm | multi-paradigm: object-oriented, procedural |
---|---|
द्वारा डिज़ाइन किया गया | Barbara Liskov and her students |
Developer | Massachusetts Institute of Technology |
पहली प्रस्तुति | 1975 |
Stable release | |
टाइपिंग अनुशासन | strong |
वेबसाइट | pmg |
Major implementations | |
PDP-10 CLU,[3] Native CLU,[1] Portable CLU,[2] clu2c[4] | |
Influenced by | |
ALGOL 60, Lisp, Simula, Alphard | |
Influenced | |
Ada, Argus, C++,[5] Lua, Python,[6] Ruby, Sather, Swift[7] |
सीएलयू मैसाचुसेट्स इंस्टिट्यूट ऑफ़ टेक्नोलॉजी (एमआईटी) में बारबरा लिस्कोव और उनके छात्रों द्वारा 1973 में प्रारम्भ की गई एक प्रोग्रामिंग लैंग्वेज है।[8] यद्यापि इसे व्यापक प्रयोग नहीं मिला, इसने कई विशेषताएं पेश कीं जो अब व्यापक रूप से उपयोग की जाती हैं, और इसे ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग (ओओपी) के विकास में एक कदम के रूप में देखा जाता है।
मुख्य योगदान में सार डेटा प्रकार सम्मिलित हैं,[9] कॉल-बाय-शेयरिंग, इंटररेटर्स, एकाधिक रिटर्न मान (समानांतर असाइनमेंट का एक रूप), प्रकार-सेफ पैरामीटरयुक्त प्रकार और प्रकार-सुरक्षित संस्करण प्रकार सम्मिलित है। यह कंस्ट्रक्टर (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग) और विधियों के साथ कक्षाओं (कंप्यूटर प्रोग्रामिंग) के उपयोग के लिए भी उल्लेखनीय है, परन्तु वंशानुक्रम (वस्तु-उन्मुख प्रोग्रामिंग) के बिना।
क्लस्टर
सीएलयू का वाक्य-विन्यास ALGOL पर आधारित था, जो तब अधिकांश नए लैंग्वेज प्रारूपों के लिए प्रारंभिक बिंदु था। मुख्य जोड़ क्लस्टर की अवधारणा, सीएलयू की प्रकार विस्तार प्रणाली और लैंग्वेज के नाम की जड़ थी।[10] क्लस्टर सामान्यतः ओओ लैंग्वेज में कक्षा की अवधारणा के अनुरूप होते हैं। उदाहरण के लिए, यहाँ एक क्लस्टर के लिए सीएलयू सिंटैक्स है जो जटिल संख्याओं को लागू करता है:
complex_number = cluster is add, subtract, multiply, ...
rep = record [ real_part: real, imag_part: real ] add = proc ... end add; subtract = proc ... end subtract; multiply = proc ... end multiply; ... end complex_number;
क्लस्टर एक प्रारूप है जो इसके सभी घटकों को समाहित करता है सिवाय उन लोगों के जिन्हें स्पष्ट रूप से खंड में नामित किया गया है। ये हाल ही की ओओ लैंग्वेजओं में कक्षा के सार्वजनिक घटकों से मेल खाते हैं। एक क्लस्टर एक प्रकार को भी परिभाषित करता है जिसे क्लस्टर के बाहर नाम दिया जा सकता है (इस मामले में, कॉम्प्लेक्स_नंबर), परन्तु इसका प्रतिनिधित्व प्रकार बाहरी ग्राहकों से छिपा हुआ है।
क्लस्टर नाम वैश्विक हैं, और समूहों को कोई नाम स्थान तंत्र प्रदान नहीं किया गया था या उन्हें अन्य समूहों के अंदर स्थानीय रूप से बनाने की अनुमति नहीं दी गई थी।
एक क्लस्टर में, स्पष्ट प्रकार के रूपांतरण सार प्रकार और प्रतिनिधित्व के बीच ऊपर और नीचे बदलते हैं; इन प्रकारों के बीच निहित रूपांतरणों को विशेष प्रकार के सीवीटी का उपयोग करके दर्शाया गया है। सीएलयू अन्यथा निहित प्रकार के रूपांतरण नहीं करता है। एक सार्वभौमिक प्रकार कोई भी है, और एक प्रक्रिया बल यह जांचने के लिए कि कोई वस्तु एक निश्चित प्रकार है। वस्तुएं परस्पर या अपरिवर्तनीय हो सकती हैं, बाद वाले आधार प्रकार जैसे पूर्णांक, बूलियन, वर्ण और तार।[10]
अन्य विशेषताएं
सीएलयू प्रकार प्रणाली की एक अन्य प्रमुख विशेषता पुनरावर्तक हैं, जो एक के बाद एक संग्रह से क्रमिक रूप से वस्तुओं को लौटाते हैं।[10]Iterators एक समान अप्लिकेशन प्रोग्रामिंग अंतरफलक (API) प्रदान करते हैं, चाहे वे किसी भी डेटा के साथ उपयोग किए जा रहे हों। इस प्रकार के संग्रह के लिए इटरेटर complex_number
की एक सरणी के लिए s का परस्पर उपयोग किया जा सकता है integer
एस। सीएलयू पुनरावृत्तियों की एक विशिष्ट विशेषता यह है कि वे कोरूटीन के रूप में कार्यान्वित किए जाते हैं, जिसमें प्रत्येक मूल्य एक यील्ड स्टेटमेंट के माध्यम से कॉलर को प्रदान किया जाता है। सीएलयू जैसे इटरेटर अब कई आधुनिक लैंग्वेजओं जैसे C#, रूबी और पायथन की एक सामान्य विशेषता है, हालांकि हाल ही में उन्हें अक्सर जनरेटर के रूप में संदर्भित किया जाता है।
सीएलयू में अन्य लैंग्वेजओं में विभिन्न प्रयासों के आधार पर अपवाद प्रबंधन भी शामिल है; अपवादों का उपयोग करके उठाया जाता है signal
और साथ संभाला except
. अपवाद से निपटने वाली अधिकांश अन्य लैंग्वेजओं के विपरीत, अपवादों को कॉलिंग श्रृंखला में स्पष्ट रूप से इस्तीफा नहीं दिया जाता है। इसके अलावा अधिकांश अन्य लैंग्वेजओं के विपरीत जो अपवाद प्रबंधन प्रदान करती हैं, सीएलयू में अपवादों को सामान्य निष्पादन प्रवाह का हिस्सा माना जाता है और लूप से बाहर निकलने या कार्यों से लौटने के लिए एक सामान्य और कुशल प्रकार-सुरक्षित तरीका माना जाता है; यह रिटर्न वैल्यू के सीधे असाइनमेंट की अनुमति देता है, सिवाय इसके कि जब अन्य शर्तें लागू हों। अपवाद जो न तो पकड़े जाते हैं और न ही स्पष्ट रूप से इस्तीफा दिए जाते हैं, तुरंत एक विशेष विफलता अपवाद में परिवर्तित हो जाते हैं जो आमतौर पर कार्यक्रम को समाप्त कर देते हैं।
लैंग्वेज ML (प्रोग्रामिंग लैंग्वेज) के पास होने से पहले, सीएलयू को अक्सर टाइप-सेफ वैरिएंट प्रकारों वाली पहली लैंग्वेज होने का श्रेय दिया जाता है, जिसे oneofs कहा जाता है।
सीएलयू में एक अंतिम विशिष्ट विशेषता समानांतर असाइनमेंट (बहु असाइनमेंट) है, जहां एक असाइनमेंट (कंप्यूटर विज्ञान) ऑपरेटर के बाईं ओर एक से अधिक चर दिखाई दे सकते हैं। उदाहरण के लिए, लेखन x,y := y,x
के मूल्यों का आदान-प्रदान करेगा x
और y
. उसी तरह, फ़ंक्शन कई मान लौटा सकते हैं, जैसे x,y,z := f(t)
. समानांतर असाइनमेंट (हालांकि कई वापसी मान नहीं) सीएलयू से पहले का है, CPL (प्रोग्रामिंग लैंग्वेज) (1963) में दिखाई देता है, जिसका नाम समकालिक असाइनमेंट है,[11] लेकिन सीएलयू ने इसे लोकप्रिय बनाया और अक्सर बाद की लैंग्वेजओं में समानांतर असाइनमेंट के प्रत्यक्ष प्रभाव के रूप में इसका श्रेय दिया जाता है।
सीएलयू प्रोग्राम में सभी ऑब्जेक्ट हीप में रहते हैं, और मेमोरी प्रबंधन स्वचालित होता है।
सीएलयू सामान्य प्रोग्रामिंग का समर्थन करता है | टाइप-पैरामीटरीकृत उपयोगकर्ता-परिभाषित डेटा सार। वास्तविक प्रकार के तर्कों पर बाधाओं को व्यक्त करने के लिए क्लॉज़ का उपयोग करते हुए, टाइप-सेफ बाउंडेड पैरामिट्रीकृत प्रकारों की पेशकश करने वाली यह पहली लैंग्वेज थी। टेम्प्लेट-आधारित जेनरिक वाली लैंग्वेजओं के विपरीत, इस तरह के डेटा एब्स्ट्रैक्शन का उपयोग अमूर्त के कार्यान्वयन तक पहुंच के बिना टाइप-चेक किया जा सकता है।
प्रभाव
सीएलयू और Ada (प्रोग्रामिंग लैंग्वेज) C++ Template (C++) के लिए प्रमुख प्रेरणा थे।[5]
सीएलयू के अपवाद प्रबंधन तंत्र ने बाद की लैंग्वेजओं जैसे C++ को प्रभावित किया[5]और जावा (प्रोग्रामिंग लैंग्वेज)।[citation needed] Sather, Python (प्रोग्रामिंग लैंग्वेज), और C Sharp (प्रोग्रामिंग लैंग्वेज) | C# में इटरेटर शामिल हैं, जो पहली बार सीएलयू में दिखाई दिए।[8]
पर्ल और लुआ (प्रोग्रामिंग लैंग्वेज) ने सीएलयू से फंक्शन कॉल्स से कई असाइनमेंट और मल्टीपल रिटर्न लिए।[12] पायथन (प्रोग्रामिंग लैंग्वेज) और रूबी (प्रोग्रामिंग लैंग्वेज) शेयरिंग द्वारा उधार ली गई कॉल, यील्ड स्टेटमेंट,[13] और एकाधिक असाइनमेंट।[14]
संदर्भ
- ↑ 1.0 1.1 Curtis, Dorothy (2009-11-06). "CLU home page". Programming Methodology Group, Computer Science and Artificial Intelligence Laboratory. Massachusetts Institute of Technology. Retrieved 2016-05-26.
- ↑ 2.0 2.1 Curtis, Dorothy (2009-11-06). "Index of /pub/pclu". Programming Methodology Group, Computer Science and Artificial Intelligence Laboratory. Massachusetts Institute of Technology. Retrieved 2016-05-26.
- ↑ "CLU files, 1976–1989". Tapes of Tech Square (ToTS) collection, MC-0741. Department of Distinctive Collections, Massachusetts Institute of Technology. swh:1:dir:5dc935d1c236b15a99b0750cf236b2d89ec951d0.
- ↑ Ushijima, Tetsu. "clu2c". clu2c. woodsheep.jp. Retrieved 2016-05-26.
- ↑ 5.0 5.1 5.2 Stroustrup, Bjarne (1996). A History of C++: 1979--1991. New York, NY, USA: Association for Computing Machinery. p. 699–769. Retrieved 25 March 2022.
- ↑ Lundh, Fredrik. "Call By Object". effbot.org. Archived from the original on 23 November 2019. Retrieved 21 November 2017.
replace "CLU" with "Python", "record" with "instance", and "procedure" with "function or method", and you get a pretty accurate description of Python's object model.
- ↑ Lattner, Chris (2014-06-03). "Chris Lattner's Homepage". Chris Lattner. Retrieved 2014-06-03.
The Swift language is the product of tireless effort from a team of language experts, documentation gurus, compiler optimization ninjas, and an incredibly important internal dogfooding group who provided feedback to help refine and battle-test ideas. Of course, it also greatly benefited from the experiences hard-won by many other languages in the field, drawing ideas from Objective-C, Rust, Haskell, Ruby, Python, C#, CLU, and far too many others to list.
- ↑ 8.0 8.1 Liskov, Barbara (1992). "A history of CLU". The second ACM SIGPLAN conference on History of programming languages.
- ↑ Liskov, Barbara; Zilles, Stephen (1974). "Programming with abstract data types". Proceedings of the ACM SIGPLAN symposium on Very high level languages. pp. 50–59. CiteSeerX 10.1.1.136.3043. doi:10.1145/800233.807045.
- ↑ 10.0 10.1 10.2 Liskov, B.; Snyder, A.; Atkinson, R.; Schaffert, C. (August 1977). "Abstraction mechanisms in CLU". Communications of the ACM. 20 (8): 564–576. CiteSeerX 10.1.1.112.656. doi:10.1145/359763.359789. S2CID 17343380.
- ↑ Barron, D. W.; Buxton, J. N.; Hartley, D. F.; Nixon, E.; Strachey, C. (1963). "The main features of CPL". Computer Journal. 6 (2): 134–143. doi:10.1093/comjnl/6.2.134.
- ↑ Ierusalimschy, R.; De Figueiredo, L. H.; Celes, W. (2007). "The evolution of Lua" (PDF). Proceedings of the third ACM SIGPLAN conference on History of programming languages – HOPL III. pp. 2-1–2-26. doi:10.1145/1238844.1238846. ISBN 978-1-59593-766-7. Archived (PDF) from the original on 2010-07-03.
- ↑ "Ruby's Roots and Matz's Leadership". Appfolio Engineering. 2019-11-08. Retrieved 2019-11-15.
Matz feels that blocks are the greatest invention of Ruby (I agree.) He got the idea from a 1970s language called CLU from MIT, which called them 'iterators'...
- ↑ "Functional Programming HOWTO — Python 3.8.3 documentation". docs.python.org. Retrieved 2020-05-25.
बाहरी संबंध
- Official website
- Liskov, Barbara (April 1992). "A History of CLU" (PDF). MIT-LCS-TR-561. Archived from the original (PDF) on 2003-09-17.
- सीएलयू2c: a program to compile सीएलयू code to C
- Dictionary of Programming Languages
- सीएलयू comparison at '99 bottles of beer' multi-language demo algorithm site
- Liskov, B.; Atkinson, R.; Bloom, T.; Moss, E.; Schaffert, J.C.; Scheifler, R.; Snyder, A. (1981). CLU Reference Manual. Lecture Notes in Computer Science. Vol. 114. Springer. doi:10.1007/BFb0035014. ISBN 9783540108368. S2CID 27382594.