Clu

Clu
Jazyková třída Objektově orientované , procedurální
Typ provedení Sestaven
Objevil se v 1974
Autor Barbarou Liškovou
Vývojář Barbara Liskov a MIT
Přípona souboru .clu
Typový systém

přísný ,

statický
Hlavní implementace Přenosné Clu, NativeCLU, Klu-Elbrus, clu2c
Byl ovlivněn Simula , Lisp , Pascal
ovlivnil Ada , C++ , Java , Sather , Lua
webová stránka pmg.lcs.mit.edu/CLU.html

Clu ( anglicky  Clu , CLU ) je objektově orientovaný programovací jazyk , jeden z prvních, který implementuje koncept abstraktních datových typů a generické programovací paradigma . Vytvořen skupinou vědců na Massachusetts Institute of Technology pod vedením Barbary Liskov v roce 1974, nenašel široké uplatnění v praxi, nicméně mnoho z jeho prvků bylo použito k vytvoření jazyků jako Ada , C++ , Java , Sather , Python , C# .

Historie

Systematické práce na vytvoření programovacího jazyka, který implementuje myšlenky abstrakce dat na syntaktické úrovni, zahájili na jaře roku 1973 Barbara Liskov a zaměstnanec výzkumné laboratoře IBM Steve Zilles . V září 1973 byla zveřejněna jejich společná poznámka [1] , která popisuje předběžnou verzi takového jazyka podobného Pascalu , obsahuje tak výrazný rys budoucího jazyka, jako jsou shluky ; na základě této poznámky byla v roce 1974 připravena zpráva na konferenci SIGPLAN o super-vysokých jazycích [2] . Koncem roku 1973 se již Liskov a Zilles rozhodli pro název budoucího jazyka: jméno „Clu“ bylo vybráno z prvních tří písmen anglického shluku slov [3] . Austin Henderson byl zapojen jako oponent .

V prosinci 1973 začaly v počítačové laboratoři Massachusetts Institute of Technology, s podporou National Science Foundation a DARPA , práce na vytvoření jazyka, skupinu vedl Liskov, Zilles na jazyku zpočátku aktivně pracoval. etapy ve skupině průběžně pracovali tři postgraduální studenti - Russ Atkinson ( Russ Atkinson ), Craig Shaffert ( Craig Schaffert ) a Alan Snyder ( Alan Snyder ), k dílu byli periodicky připojeni i studenti a zaměstnanci ústavu. Veškeré práce byly prováděny na strojích PDP-10 .

Liskov identifikoval 7 klíčových principů jazyka: přísné zaměření na abstrakci dat (odmítání hlubokého studia vlastností, které s abstrakcí dat přímo nesouvisejí), minimalismus, jednoduchost, expresivita prostředků, unifikace (vestavěné typy by se neměly lišit od programátorských). definované typy), bezpečnost a vysoký výkon [4] . V souladu s těmito principy jsou v implementaci zvolena taková řešení, jako je odmítnutí výčtových typů , paralelní přiřazení , statické typování , kontrola typu v době kompilace, run-time garbage collection . V roce 1974 byl implementován první kompilátor jazyka, který uvolnil kód v Lisp, později byl překladač přepsán tak, aby generoval programy v Lisp dialektu MDL , který měl bohatší sadu vestavěných datových struktur a kontrolu typu na fáze kompilace. První implementace jazyka v roce 1974 se jmenovala CLU .5 , podporovala základní konstrukce abstrakce dat, ale ještě neimplementovala zpracování výjimek a iterátory a implementace parametrizovaných typů vyžadovala dynamickou kontrolu typů v runtime. V roce 1975 byl v podstatě navržen mechanismus zpracování výjimek.

V roce 1976 byly implementovány všechny klíčové prvky jazyka, v roce 1977 byl napsán první kompilátor, který generoval kód v assembleru . Překladač byl vytvořen v samotném jazyce Clu, což mělo demonstrovat expresivitu prostředků jazyka. Vytvoření kompilátoru, který generuje vysoce výkonné programy, vyžadovalo vytvoření speciálního běhového prostředí, které implementovalo garbage collection, ladění, speciální techniky zpracování výjimek a podporu iterátorů. V roce 1979 byl dokončen návrh jazyka [5] , v roce 1980 vyšel plnohodnotný kompilátor pro PDP-10 a o něco později byly implementovány kompilátory pro MC68000 a VAX . Mzdové náklady na vytvoření jazyka se odhadují na 14 člověkoroků [6] .

V polovině 80. let byl implementován kompilátor Klu pro sovětské superpočítače Elbrus , jazyk byl vybrán mezi dalšími kandidáty ( Ady , Moduly-2 , Simula ) jako nejholističtější ztělesnění konceptu abstraktních datových typů, přičemž je poměrně jednoduchý na implementovat [7] . V roce 1989 byl vydán kompilátor pro SPARC se systémem SunOS .

Na začátku poloviny 90. let byl vytvořen kompilátor clu2c, který generoval multiplatformní kód C a také několik verzí Portable Clu se sestaveními pro Linux , NetBSD , Mac OS , Windows NT , Digital Unix (na Alpha ), ale praktický zájem o jazyk výrazně poklesl a od konce 90. let se implementace ve skutečnosti nevyvíjely a nový software na Klu nebyl vyvinut.

Barbara Liskov vyhrála v roce 2008 Turingovu cenu v nominaci za návrh jazyka Clu a vytvoření řady účinných kompilátorů pro něj, což je považováno za zásadní přínos pro informatiku, který prokázal praktickou proveditelnost myšlenek abstrakce dat a přeměnil teoretický koncept na obecně uznávaný přístup v programovém průmyslu [8] .

Clustery

Abstraktní datový typ v Klu je implementován konceptem clusteru, konstrukce, která poskytuje zapouzdření v rámci typu operací na něm a poskytuje polymorfismus (klastr může popisovat širokou třídu datových typů se společnou specifikací - stejnou sadu operace, ale jiná implementace).

Počáteční fragment popisu shluku polymorfního seznamu (s operacemi v notaci Lisp):

seznam = cluster [t: typ] is create, car, cdr, cons, elems rep = array [t] create = proc () return ( cvt ) % vytvoření seznamu return ( rep$new ()) end create ; car = proc ( l:cvt ) return ( t ) signals ( empty ) % získat první prvek seznamu if rep$empty ( l ) then signal empty else return ( rep$bottom ( l )) end end car ; % seznam konce ostatních operací

Definice clusteru specifikuje specifikaci — sadu operací na typu, definuje vnitřní reprezentaci ( rep) a popisuje implementaci operací. Používají se konstrukce jako převod typu z interní na objektovou reprezentaci a naopak ( cvt), $-notation pro přístup k typovým operacím. Vytvoření implementace clusteru a jeho instance se provádí zadáním konkrétního typu:

lint = seznam [int] ; % seznam celých čísel l:lint := lint$create () ; % vytvořit instanci seznamu l := lint$cons ( 1 , lint$cons ( 2 , lint$cons ( 3 , l ))) % vytvořit seznam

Vestavěné typy jsou také implementovány jako clustery [9] . Na rozdíl od clusterů definovaných v kódu programu nemůže žádná operace se základními vestavěnými datovými typy Clu ( int, real, bool, null, char, string) změnit strukturu a hodnotu objektu (pokaždé, když je vytvořena nová instance objektu s odpovídajícím stavem pevný). Ale ve snaze o sjednocení je přístup k operacím na vestavěných typech dostupný v clusterové notaci: int$add(n1,n2)přidává n1s n2, string$fetch(s,i)poskytuje přístup k i--tému znaku řetězce a szřetězuje string$concat(s1,s2) řetězce a s1navíc s2je implementován syntaktický cukr , který poskytuje zkrácený zápis pro takové operace: , , ) zavedené v clusterech definovaných vývojářem. n1+n2s[i]s1||s2addfetchconcat

Jako polymorfní shluky jsou implementovány vestavěné kompozitní typy, nazývané "generátory typů" v Klu - pole , sekvence , záznamy , struktury (konstantní záznamy), svazy , varianty [10] .

Iterátory

Jednou z klíčových inovací jazyka bylo zavedení abstrakce řízení - iterátoru . Myšlenkou iterátoru je poskytnout obecnou implementaci přístupu k prvkům abstraktního datového typu, bez ohledu na jeho parametrizaci a vnitřní strukturu. Příklad iterátoru polymorfního seznamu:

elems = iter ( l:cvt ) yields ( t ) for elt:t in rep$elements ( l ) do yield ( elt ) end end elems

Volání iterátoru takto:

for i:int in lint$elems ( l ) do writeint ( i ) end

Použití iterátoru eliminuje použití explicitních čítačů smyček v podmínkách, kdy konkrétní implementace datového typu není předem známa.

Myšlenka koroutinového iterátoru byla následně vypůjčena z Icon , Sather , Python , Ruby , C# (od verze 2.0 ) [11] .

Zpracování výjimek

Klu implementuje strukturální zpracování výjimek , výjimky v jazyce jsou rozděleny na statické a dynamické, první slouží k dokončení provádění bloku v rámci jednoho programového bloku (volané operátorem exit s(x1, …, xn)), druhé ukončují provádění programu (volané operátor signal s(x1, …, xn)). V obou případech je výjimka zpracována programovým blokem začínajícím klíčovým slovem except, pokud statická výjimka není zpracována v aktuálním bloku, pak je předána následujícímu; výjimky nezpracované v programu přeruší jeho provádění vydáním příslušných zpráv. Výjimky, které může procedura vyvolat, jsou uvedeny v její specifikaci, výjimky jsou považovány za alternativní ukončení procedury, to znamená, že procedura musí předat hodnotu deklarovanou ve specifikaci na výstup pomocí operátoru return, nebo vydat jednu z výjimek deklarované ve specifikaci pomocí operátorů signalnebo resignal(volaných v bloku exceptpro opakování toho, který způsobil výjimku) s příslušnými parametry. Vestavěné typy implementují standardní výjimky.

Při návrhu mechanismu výjimek byla řešení vypůjčena od PL/1 a Mesa , ale v nich použitý model obnovení výjimek byl výrazně zjednodušen a strukturován [12] a důležitou novinkou se stala schopnost předávat parametry výjimek.

Poznámky

  1. Barbara Liskov, Steve Zilles. Přístup k abstrakci  //  Computation Structures Group Memo. - 1973. - Sv. 88 .
  2. Barbara Liskov, Stephen Zilles. Programování s abstraktními datovými typy  //  Sborník příspěvků ze sympozia ACM SIGPLAN o jazycích na velmi vysoké úrovni. - N.Y .: ACM, 1974. - Sv. 9 . — S. 50–59 . - doi : 10.1145/800233.807045 . Archivováno z originálu 22. prosince 2012.
  3. Liskov, 1992 , „CLU byl vybrán jako název jazyka na podzim roku 1973. Název byl vybrán, protože se jedná o první tři písmena „cluster.““, s. 3.
  4. Liskov, 1992 , s. osm.
  5. Liskov, 1992 , „V průběhu roku 1979 jsme provedli poslední zkoušku jazykového designu“, s. 22.
  6. Liskov, 1992 , s. 21.
  7. Safonov, 1989 , str. 194.
  8. ACM Turing Award získává tvůrce vlivných inovací v designu počítačového softwaru.  Liskov z MIT je průkopníkem standardu pro moderní programovací jazyk a spolehlivost softwaru . Turingova cena . ACM (10. března 2009). - "Liskov navrhl programovací jazyk CLU, objektově orientovaný jazyk obsahující "shluky", které poskytují koherentní, systematické zacházení s abstraktními datovými typy, které se skládají ze sady dat a sady operací, které lze s daty provádět. Ona a její kolegové z MIT následně vyvinuli efektivní implementace kompilátoru CLU na několika různých strojích, což je důležitý krok v demonstraci praktičnosti jejích nápadů. Abstrakce dat je nyní obecně uznávanou základní metodou softwarového inženýrství, která se zaměřuje spíše na data než na procesy, často označované jako „modulární“ nebo „objektově orientované“ programování. Získáno 30. listopadu 2012. Archivováno z originálu 16. ledna 2013.
  9. Safonov, 1989 , str. 198.
  10. Safonov, 1989 , str. 201-207.
  11. Jed Liu, Aaron Kimball, Andrew C. Myers. Interruptible Iterators  //  POPL '06 Záznam z konference 33. sympozia ACM SIGPLAN-SIGACT o principech programovacích jazyků. - N.Y .: ACM, 2006. - Sv. 1 (41) . - str. 283-294 . — ISBN 1-59593-027-2 . - doi : 10.1145/1111037.1111063 .
  12. Liskov, 1992 , s. 16.

Literatura

  • Barbara Liskov, John Gatag. Využití abstrakcí a specifikací při vývoji programů. — M .: Mir , 1989. — 424 s. - ISBN 5-03-000489-0 .
  • Vladimír Safonov. Programovací jazyk Klu a systém Klu-Elbrus // Programovací jazyky ​​a metody v systému Elbrus. - M .: Science , 1989. - S. 189-242. — 389 s. — ISBN 5-02-013983-1 .
  • Barbara Liskov, Russell Atkinson, Toby Bloom, Eliot Moss, J. Craig Schaffert, Robert Scheifler, Alan Snyder. Referenční příručka CLU  / editovali G. Goos, J. Hartmanis. - Berlín - Heidelberg - New York: Springer-Verlag , 1981. - 190 s. — ( Lecture Notes in Computer Science , sv. 114). — ISBN 3-540-10836-X .
  • Barbara Liskov . Historie  CLU . Historie programovacích jazyků (1. dubna 1992). doi : 10.1145/234286.1057826 . Získáno 30. listopadu 2012. Archivováno z originálu 16. ledna 2013.