CLU
Paradigma | multiparadigmatický: objektově orientovaný, procedurální |
---|---|
Autor | Barbara Liskovová a její studenti |
Vývojář | Massachusettský technologický institut |
První vydání | 1975 |
Poslední verze | Native CLU 1.5 (SPARC, VAX)[1] (26. května 1989 Portable CLU /06. listopadu 2009[2]) |
Typová kontrola | silná |
Hlavní implementace | PDP-10 CLU,[3]Native CLU,[1]Portable CLU,[2]clu2c[4] |
Ovlivnil jazyky | Ada, Argus, C++,[5]Lua, Python,[6]Ruby, Sather, Swift[7] |
Web | pmg |
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).
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 | editovat zdroj]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 | editovat zdroj]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 | editovat zdroj]Š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]
Odkazy
[editovat | editovat zdroj]Reference
[editovat | editovat zdroj]V tomto článku byl použit překlad textu z článku CLU (programming language) na anglické Wikipedii.
- ↑ 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.
- ↑ 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.
- ↑ CLU files, 1976–1989 [online]. Department of Distinctive Collections, Massachusetts Institute of Technology. Dostupné online. swh:1:dir:5dc935d1c236b15a99b0750cf236b2d89ec951d0.
- ↑ USHIJIMA, Tetsu. clu2c [online]. woodsheep.jp [cit. 2016-05-26]. Dostupné online.
- ↑ 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.
- ↑ 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.
- ↑ 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.
- ↑ 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.
- ↑ 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.
- ↑ 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.
- ↑ 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.
- ↑ 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.
- ↑ 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.
- ↑ Functional Programming HOWTO — Python 3.8.3 documentation [online]. docs.python.org [cit. 2020-05-25]. Dostupné online.
Externí odkazy
[editovat | editovat zdroj]- Oficiální stránky
- LISKOV, Barbara, 1992. A History of CLU [online]. Duben 1992. Dostupné v archivu pořízeném z originálu dne 2003-09-17. MIT-LCS-TR-561.
- clu2c: program pro překlad CLU kódu do jazyka C
- Dictionary of Programming Languages
- Porovnání jazyka CLU na webu '99 bottles of beer' s porovnáním různých programovacích jazyků
- LISKOV, B.; ATKINSON, R.; BLOOM, T.; MOSS, E.; SCHAFFERT, J.C.; SCHEIFLER, R.; SNYDER, A., 1981. CLU Reference Manual. [s.l.]: Springer. (Lecture Notes in Computer Science). ISBN 9783540108368. DOI 10.1007/BFb0035014. S2CID 27382594.