सीएलयू (प्रोग्रामिंग लैंग्वेज)

From Vigyanwiki
सीएलयू
Paradigmmulti-paradigm: object-oriented, procedural
द्वारा डिज़ाइन किया गयाBarbara Liskov and her students
DeveloperMassachusetts Institute of Technology
पहली प्रस्तुति1975; 49 years ago (1975)
Stable release
Native CLU 1.5 (SPARC, VAX) / May 26, 1989; 34 years ago (1989-05-26)[1]

Portable CLU / November 6, 2009; 14 years ago (2009-11-06)[2]

टाइपिंग अनुशासनstrong
वेबसाइटpmg.csail.mit.edu/CLU.html
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. 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. 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.
  3. "CLU files, 1976–1989". Tapes of Tech Square (ToTS) collection, MC-0741. Department of Distinctive Collections, Massachusetts Institute of Technology. swh:1:dir:5dc935d1c236b15a99b0750cf236b2d89ec951d0.
  4. Ushijima, Tetsu. "clu2c". clu2c. woodsheep.jp. Retrieved 2016-05-26.
  5. 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.
  6. 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.
  7. 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. 8.0 8.1 Liskov, Barbara (1992). "A history of CLU". The second ACM SIGPLAN conference on History of programming languages.
  9. 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. 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.
  11. 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.
  12. 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.
  13. "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'...
  14. "Functional Programming HOWTO — Python 3.8.3 documentation". docs.python.org. Retrieved 2020-05-25.


बाहरी संबंध