CLU

programovací jazyk

CLU je programovací jazyk, který od roku 1973 vyvíjela Barbara Liskovová se svými studenty na MIT.[8] Přestože nedošel širokého použití, přinesl mnoho vlastností, které se používají v moderních programovacích jazycích, a je vnímán jako významný krok ve vývoji objektově orientovaného programování (OOP).

CLU
Paradigmamultiparadigmatický: objektově orientovaný, procedurální
AutorBarbara Liskovová a její studenti
VývojářMassachusettský technologický institut
První vydání1975; před 18162 dny
Poslední verzeNative CLU 1.5 (SPARC, VAX)[1] (26. 

května 1989; před 12903 dny
Portable CLU /06. 

listopadu 2009; před 5434 dny[2])
Typová kontrolasilná
Hlavní implementacePDP-10 CLU,[3]Native CLU,[1]Portable CLU,[2]clu2c[4]
Ovlivnil jazykyAda, Argus, C++,[5]Lua, Python,[6]Ruby, Sather, Swift[7]
Webpmg.csail.mit.edu/CLU.html

Mezi jeho hlavní přínosy patří abstraktní datové typy,[9] volání sdílením, iterátory, vícenásobné návratové hodnoty (forma paralelního přiřazení), typově bezpečné parametrizované typy, a typově bezpečné variantní typy. Je také významný pro své použití tříd s konstruktory a metodami, ale bez dědičnosti.

Clustery

editovat

Syntaxe CLU vychází z ALGOLu, v té době výchozího jazyka pro návrh většiny nových jazyků. Jeho nejdůležitějším přínosem je koncept clusterů, systém typových rozšíření jazyka CLU a kořen názvu jazyka (CLUster).[10] Clustery odpovídají obecně konceptu „třídy“ v objektově orientovaných jazycích. Implementace komplexních čísel clusterem v CLU může vypadat takto:

    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;

Cluster je modul, který zapouzdřuje všechny své členy s výjimkou členů explicitně vyjmenovaných v klauzuli is, které odpovídají veřejným členům třídy v novějších objektově orientovaných jazycích. Cluster také definuje typ, který se může používat mimo cluster (v tomto případě complex_number), přičemž typ, kterým je reprezentován (rep) je před externími klienty skrytý.

Jména clusterů jsou globální, a jazyk neposkytuje žádný mechanismus jmenných prostorů, který by umožňoval seskupovat clustery nebo je vytvářet „lokálně“ uvnitř jiných clusterů.

V clusteru provádějí explicitní typové konverze up a down převod mezi abstraktním typem a reprezentací; implicitní konverze mezi těmito typy jsou označny speciálním typem cvt. CLU žádné jiné implicitní konverze typů neprovádí. CLU má univerzální typ any, a procedura force[] pro kontrolu, zda objekt je určitého typu. Objekty mohou být proměnné nebo neměnné (anglicky mutable vs. immutable), přičemž základní typy – celá čísla, logické hodnoty, znaky a řetězce – jsou neměnné.[10]

Další vlastnosti

editovat

Další klíčovou vlastností typového systému CLU jsou iterátory, které vracejí objekty z kolekce postupně jeden po druhém.[10] Iterátory poskytují identické aplikační rozhraní (API) bez ohledu na to, s jakými daty se používají. Iterátor pro kolekci objektů complex_number tedy může být používán zaměnitelně s iterátorem pro pole celých čísel typu integer. Význačným rysem iterátorů v CLU je, že jsou implementovány jako korutiny, které volajícímu poskytují jednotlivé hodnoty pomocí příkazu yield. Takovéto iterátory jsou nyní běžným rysem mnoha moderních jazyků, např. C#, Ruby a Python, a v posledné době jsou často nazývány generátory.

CLU také poskutuje zpracování výjimek, založené na různých pokusech v jiných jazycích; výjimky se vyvolávají pomocí signal a ošetřují pomocí except. V CLU na rozdíl od jiných jazyků nejsou výjimky implicitně signalizovány řetězcem volání. Také na rozdíl od většiny jiných jazyků, které poskytují zpracování výjimek, jsou výjimky v CLU považovány za součást běžného toku řízení a výskok ze smyčky nebo návrat z funkce pomocí výjimky je považován za „normální“ a efektivní typově bezpečnou metodu, která umožňuje přímé přiřazení návratových hodnot except, když nastaly jiné podmínky. Výjimky, které nejsou ani zachyceny ani explicitně předány, jsou okamžitě zkonvertovány na speciální výjimku failure, která typicky ukončí program.

CLU je často uváděn jako první jazyk s typově bezpečnými variantními typy nazývanými oneofs, se kterými přišel ještě před jazykem ML.

Posledním význačným rysem CLU je paralelní přiřazení (vícenásobné přiřazení), které dovoluje použít na levé straně operátoru přiřazení více než jednu proměnnou. Příkladem je příkaz x,y := y,x, který prohodí obsah proměnných x a y. Podobným způsobem mohou funkce vracet několik hodnot, jako x,y,z := f(t). Paralelní přiřazení (ne však několik návratových hodnot) se objevilo již před CLU, v jazyce CPL (1963) jako simultaneous assignment,[11] ale jazyk CLU jej zpopularizoval a jeho vliv je často uváděn jako inspirace pro paralelní přiřazení v pozdějších jazycích.

Všechny objekty programu v CLU jsou umístěny na haldě a správa paměti je automatická.

CLU podporuje typově parametrizované uživatelem definovaný datové abstrakce. Byl prvním jazykem, který poskytoval typově bezpečné omezené parametrizované typy využívající klauzuli where pro vyjádření omezení kladená na skutečné argumenty typu. Na rozdíl od jazyků s generiky založenými na šablonách, lze typovou kontrolu použití takové datové abstrakce provádět bez přístupu k implementaci abstrakce.

Vliv na jiné programovací jazyky

editovat

Šablony v jazyce C++ byly inspirovány jazykem CLU a Ada.[5]

Mechanismy zpracování výjimek v CLU ovlivnily pozdější jazyky jako C++[5] a Java.[zdroj?]

V programovacích jazycích Sather, Python a C# jsou iterátory, které se poprvé objevily v CLU.[8]

Perl a Lua převzaly současné přiřazení a vícenásobnou návratovou hodnotu funkcí z CLU.[12]

Python a Ruby si vypůjčil volání sdílením, příkaz yield,[13] a paralelní přiřazení.[14]

Reference

editovat

V tomto článku byl použit překlad textu z článku CLU (programming language) na anglické Wikipedii.

  1. a b Programming Methodology Group, Computer Science and Artificial Intelligence Laboratory. CLU home page [online]. Massachusetts Institute of Technology, 2009-11-06 [cit. 2016-05-26]. Dostupné online. 
  2. a b Programming Methodology Group, Computer Science and Artificial Intelligence Laboratory. Index of /pub/pclu [online]. Massachusetts Institute of Technology, 2009-11-06 [cit. 2016-05-26]. Dostupné online. 
  3. CLU files, 1976–1989 [online]. Department of Distinctive Collections, Massachusetts Institute of Technology. Dostupné online. swh:1:dir:5dc935d1c236b15a99b0750cf236b2d89ec951d0. 
  4. USHIJIMA, Tetsu. clu2c [online]. woodsheep.jp [cit. 2016-05-26]. Dostupné online. 
  5. a b c STROUSTRUP, Bjarne, 1996. A History of C++: 1979--1991. New York, NY, USA: Association for Computing Machinery. Dostupné online. DOI 10.1145/234286.1057836. S. 699–769. 
  6. LUNDH, Fredrik. Call By Object [online]. [cit. 2017-11-21]. Nahraďte „CLU“ za „Python“, „záznam“ za „instanci“ a „proceduru“ za „funkci nebo metodu“, a dostanete pěkný přesný popis objektového modelu jazyka Python.. Dostupné v archivu pořízeném dne 2019-11-23. 
  7. LATTNER, Chris. Chris Lattner's Homepage [online]. Chris Lattner, 2014-06-03 [cit. 2014-06-03]. Jazyk Swift je výsledkem neúnavného úsilí týmu odborníků na jazyk, guruů dokumentace, ninjů v oblasti optimalizace překladače a neuvěřitelně důležité skupiny interních uživatelů, kteří jazyk skutečně používali a poskytovali zpětnou vazbu pro vylepšování a zkoušení nových nápadů. Samozřejmě také velmi těžil ze zkušeností, které tvrdě získalo mnoho dalších jazyků v této oblasti, a čerpal nápady z Objective-C, Rustu, Haskellu, Ruby, Pythonu, C#, CLU a mnoha dalších jazyků, které lze jen těžko vyjmenovat.. Dostupné online. 
  8. a b LISKOV, Barbara, 1992. The second ACM SIGPLAN conference on History of programming languages. In: [s.l.]: [s.n.]. Kapitola A history of CLU.
  9. LISKOV, Barbara; ZILLES, Stephen, 1974. Proceedings of the ACM SIGPLAN symposium on Very high level languages. In: [s.l.]: [s.n.]. DOI 10.1145/800233.807045. Kapitola Programming with abstract data types, s. 50–59.
  10. a b c LISKOV, B.; SNYDER, A.; ATKINSON, R.; SCHAFFERT, C., 1977. Abstraction mechanisms in CLU. Communications of the ACM. Srpen 1977, roč. 20, čís. 8, s. 564–576. 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. Roč. 6, čís. 2, s. 134–143. DOI 10.1093/comjnl/6.2.134. 
  12. IERUSALIMSCHY, R.; DE FIGUEIREDO, L. H.; CELES, W., 2007. Proceedings of the third ACM SIGPLAN conference on History of programming languages – HOPL III. In: [s.l.]: [s.n.]. ISBN 978-1-59593-766-7. DOI 10.1145/1238844.1238846. Kapitola The evolution of Lua, s. 2-1–2-26.
  13. Ruby's Roots and Matz's Leadership [online]. Appfolio Engineering, 2019-11-08 [cit. 2019-11-15]. Matz cítí, že bloky jsou největším vynálezem jazyka Ruby (souhlasím). Převzal myšlenku z jazyka CLU z MIT ze 70. let 20. století, a pojmenoval ji 'iterátory'.... Dostupné online. 
  14. Functional Programming HOWTO — Python 3.8.3 documentation [online]. docs.python.org [cit. 2020-05-25]. Dostupné online. 

Externí odkazy

editovat