Clu

Clu
Nyelvóra Objektumorientált , procedurális
A végrehajtás típusa Összeállított
Megjelent 1974
Szerző Liskov Barbara
Fejlesztő Barbara Liskov és az MIT
Fájlkiterjesztés _ .clu
Típusrendszer

Szigorú ,

statikus
Főbb megvalósítások Hordozható Clu, NativeCLU, Klu-Elbrus, clu2c
Befolyásolt Simula , Lisp , Pascal
befolyásolta Ada , C++ , Java , Sather , Lua
Weboldal pmg.lcs.mit.edu/CLU.html

A Clu ( angolul  Clu , CLU ) egy objektum-orientált programozási nyelv , amely az elsők között valósította meg az absztrakt adattípusok koncepcióját és az általános programozási paradigmát . A Massachusettsi Műszaki Egyetem tudóscsoportja alkotta meg 1974 -ben Barbara Liskov vezetésével , de a gyakorlatban nem talált széles körű alkalmazást, azonban számos elemét felhasználták olyan nyelvek létrehozására, mint az Ada , C++ , Java , Sather , Python , C# .

Történelem

1973 tavaszán Barbara Liskov és az IBM kutatólaboratóriumának munkatársa, Steve Zilles megkezdte a szisztematikus munkát egy olyan programozási nyelv létrehozásán, amely szintaktikai szinten valósítja meg az adatabsztrakció gondolatait . 1973 szeptemberében jelent meg közös jegyzetük [1] , amely egy ilyen Pascal-szerű nyelv előzetes változatát írja le , benne van a leendő nyelv olyan jellegzetessége, mint a klaszterek ; e jegyzet alapján 1974 - ben jelentés készült a SIGPLAN konferencián a szuper-magas szintű nyelvekről [2] . 1973 végén Liskov és Zilles már döntött a leendő nyelv nevéről: a „Clu” nevet az angol szócsoport [3] első három betűjéből választották . Austin Henderson ellenfélként vett részt .

1973 decemberében a Massachusetts Institute of Technology számítástechnikai laboratóriumában a National Science Foundation és a DARPA támogatásával megkezdődött a nyelv létrehozása, Liskov vezette a csoportot, Zilles kezdetben aktívan dolgozott a nyelven. szakaszában három végzős hallgató dolgozott folyamatosan a csoportban - Russ Atkinson ( Russ Atkinson ), Craig Shaffert ( Craig Schaffert ) és Alan Snyder ( Alan Snyder ), az intézet hallgatóit és alkalmazottait is időszakosan kapcsolták a munkához. Minden munka PDP-10 gépeken történt .

Liskov a nyelv 7 alapelvét azonosította: szigorú összpontosítás az adatok absztrakciójára (az adatabsztrakcióhoz közvetlenül nem kapcsolódó jellemzők mélyreható tanulmányozásának elutasítása), minimalizmus, egyszerűség, az eszközök kifejezőkészsége, egységesítés (a beépített típusok nem különbözhetnek a programozóitól). meghatározott típusok), biztonság és nagy teljesítmény [4] . Ezen elveknek megfelelően a megvalósítás során olyan megoldásokat választanak, mint a felsorolt ​​típusok elutasítása , párhuzamos hozzárendelés , statikus gépelés , fordítási idejű típusellenőrzés, futásidejű szemétgyűjtés . 1974 - ben implementálták a nyelv első fordítóját, amely Lisp nyelvű kódot adott ki, később a fordítót átírták, hogy a Lisp dialektusú MDL programokat generáljon , amelyek gazdagabb beépített adatstruktúrákkal és típusellenőrzéssel rendelkeztek. összeállítási szakaszban. A nyelv első implementációja 1974-ben a CLU .5 nevet kapta , támogatta az alapvető adatabsztrakciós konstrukciókat, de kivételkezelést és iterátort még nem valósított meg, a paraméterezett típusok megvalósítása pedig dinamikus típusellenőrzést igényelt a futásidő. 1975-ben a kivételkezelő mechanizmust alapvetően megtervezték.

1976-ra a nyelv összes kulcsfontosságú eleme megvalósult, 1977-ben megírták az első fordítót, amely az assemblerben generált kódot . Magán a Clu nyelven készült a fordítóprogram, amely a nyelv eszközeinek kifejezőképességét hivatott demonstrálni. A nagy teljesítményű programokat generáló fordító felépítéséhez egy speciális futási környezet létrehozására volt szükség, amely szemétgyűjtést, hibakeresést, speciális kivételkezelési technikákat és iterátor támogatást valósított meg. 1979-ben elkészült a nyelv tervezése [5] , 1980 -ban megjelent egy teljes értékű fordító a PDP-10-hez, az MC68000 és a VAX fordítói pedig valamivel később kerültek bevezetésre . A nyelv létrehozásának munkaerőköltségét 14 emberévre becsülik [6] .

Az 1980-as évek közepén a Klu fordítót a szovjet Elbrus szuperszámítógépekhez vezették be, a nyelvet a többi jelölt közül ( Ady , Moduly-2 , Simula ) választották ki, mint a legholisztikusabban megtestesítő az absztrakt adattípusok fogalmát, miközben meglehetősen egyszerű volt. végrehajtani [7] . 1989-ben megjelent egy fordító a SPARC számára, amely SunOS -t futtatott .

Az 1990-es évek elején-közepén létrehozták a clu2c fordítót, amely platformok közötti C kódot , valamint a Portable Clu több verzióját generálta Linuxra , NetBSD -re , Mac OS -re , Windows NT -re , Digital Unixra ( Alpha -on ), de A nyelv iránti gyakorlati érdeklődés jelentősen csökkent, és az 1990-es évek vége óta ténylegesen nem fejlesztettek ki implementációkat, és nem fejlesztettek ki új szoftvert a Klu-n.

Barbara Liskov elnyerte a 2008-as Turing-díjat a Clu nyelv megtervezéséért és a hozzá tartozó hatékony fordítóprogramok sorozatának létrehozásáért, amely alapvető hozzájárulása a számítástechnikához, bizonyítja az adatabsztrakciós ötletek gyakorlati megvalósíthatóságát, és egy elméleti koncepciót a programozási ágazatban általánosan elismert megközelítés [8] .

Klaszterek

Egy absztrakt adattípust a Klu-ban a fürt koncepciója valósít meg, egy olyan konstrukció, amely beágyazást biztosít a rajta végzett műveletek típusán belül, és polimorfizmust biztosít (a klaszter adattípusok széles osztályát írja le közös specifikációval - ugyanazzal a készlettel műveletek, de eltérő megvalósítás).

Egy polimorf lista klaszterének leírásának kezdeti töredéke (műveletekkel Lisp jelöléssel):

list = cluster [t: type] is create, car, cdr, cons, elems rep = array [t] create = proc () return ( cvt ) % listakészítés return ( rep $new ()) end create ; car = proc ( l:cvt ) return ( t ) jelek ( üres ) % megkapja a lista első elemét if rep$empty ( l ) then sign empty else return ( rep$bottom ( l )) end end car ; % egyéb műveletek véglista _

A fürtdefiníció megadja a specifikációt – a típuson végrehajtott műveletek halmazát, meghatározza a belső reprezentációt ( rep), és leírja a műveletek megvalósítását. Olyan szerkezeteket használnak, mint a típuskonverzió belsőről objektumreprezentációra és fordítva ( cvt), $-jelölés a típusműveletek eléréséhez. A fürt megvalósításának és példányának létrehozása egy adott típus megadásával valósul meg:

lint = lista [int] ; % egész számok listája l:lint := lint$create () ; % példányosítja a listát l := lint$cons ( 1 , lint$cons ( 2 , lint$cons ( 3 , l ) ))) % összeállítja a listát

A beépített típusokat klaszterként is megvalósítják [9] . A programkódban definiált klaszterekkel ellentétben az alapvető beépített Clu adattípusokon ( int, real, bool, null, char, string) egyetlen művelet sem módosíthatja az objektum szerkezetét és értékét (minden alkalommal, amikor az objektum új példánya jön létre a megfelelő állapottal rögzített). De az egységesítés érdekében a beépített típusok műveleteihez fürtjelöléssel lehet hozzáférni: int$add(n1,n2)hozzáadja n1a -t n2, string$fetch(s,i)hozzáférést biztosít a ikarakterlánc -edik karakteréhez , sés string$concat(s1,s2) összefűzi a karakterláncokat , s1és s2ezen túlmenően egy szintaktikai cukrot valósítanak meg, amely az ilyen műveletek rövidített jelölése: a fejlesztő által meghatározott klaszterekben bevezetett azonos nevű műveletek ( , , ).n1+n2s[i]s1||s2addfetchconcat

Polimorf klaszterekként beépített kompozit típusokat valósítanak meg, amelyeket Klu-ban "típusgenerátoroknak" neveznek - tömbök , sorozatok , rekordok , struktúrák (konstans rekordok), uniók , változatok [10] .

Iterátorok

A nyelv egyik legfontosabb újítása a vezérlőabsztrakció – egy iterátor – bevezetése volt . Az iterátor ötlete az, hogy egy absztrakt adattípus elemeihez való hozzáférés általános megvalósítását biztosítsa, függetlenül annak paraméterezésétől és belső struktúrájától. Példa egy polimorf lista iterátorra:

elems = iter ( l:cvt ) hozamok ( t ) elt:t esetén rep $elemekben ( l ) do hozam ( elt ) end end elems

Egy iterátor meghívása így:

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

Az iterátor használata kiküszöböli az explicit hurokszámlálók használatát olyan körülmények között, amikor az adattípus konkrét megvalósítása nem ismert előre.

A korutin iterátor ötletét ezt követően az Icon , Sather , Python , Ruby , C# (a 2.0 verzió óta ) kölcsönözték [11] .

Kivételkezelés

A Klu strukturális kivételkezelést valósít meg, a kivételeket a nyelvben statikusra és dinamikusra osztják, az előbbiek egy blokk végrehajtásának befejezésére szolgálnak egyetlen programblokkon belül (az operátor hívja meg exit s(x1, …, xn)), az utóbbiak a programvégrehajtást fejezik be (a operátor signal s(x1, …, xn)). A kivételt mindkét esetben a kulcsszóval kezdődő programblokk kezeli except, ha az aktuális blokkban nem kezelünk statikus kivételt, akkor az átkerül a következőre; a programban nem kezelt kivételek megfelelő üzenetek kiadásával megszakítják annak végrehajtását. A kivételek, amelyeket egy eljárás dobhat, a specifikációjában vannak megadva, a kivételek alternatív kilépésnek minősülnek az eljárásból, vagyis az eljárásnak a specifikációban deklarált értéket kell átadnia a kimenetnek az operátor segítségével return, vagy ki kell adnia valamelyik kivételt a specifikációban deklaráltan a signalvagy operátorok használatával resignal(a blokkban meghívva excepta kivételt okozó megismétlésére) a megfelelő paraméterekkel. A beépített típusok szabványos kivételeket valósítanak meg.

A kivételmechanizmus tervezésekor a megoldásokat a PL/1 -től és a Mesa -tól kölcsönözték , de a bennük használt kivétel-újraindítási modell jelentősen leegyszerűsödött és strukturált [12] , és fontos újítássá vált a kivételparaméterek átadásának lehetősége.

Jegyzetek

  1. Barbara Liskov, Steve Zilles. Az absztrakció megközelítése  //  Számítási struktúrák csoportfeljegyzés. - 1973. - 1. évf. 88 .
  2. Barbara Liskov, Stephen Zilles. Programozás absztrakt adattípusokkal  //  Az ACM SIGPLAN szimpózium előadásai nagyon magas szintű nyelvekről. - N.Y .: ACM, 1974. - Vol. 9 . — P. 50–59 . - doi : 10.1145/800233.807045 . Az eredetiből archiválva : 2012. december 22.
  3. Liskov, 1992 , „1973 őszén a CLU-t választották a nyelv nevének. A nevet azért választották, mert ez a „klaszter“ első három betűje. 3.
  4. Liskov, 1992 , p. nyolc.
  5. Liskov, 1992 , "1979-ben a nyelvi tervezésben utolsó vizsgát tettünk", p. 22.
  6. Liskov, 1992 , p. 21.
  7. Safonov, 1989 , p. 194.
  8. Az ACM Turing-díjat a számítógépes szoftvertervezés befolyásos innovációinak megalkotója kapja. Az MIT Liskov úttörője a modern programozási nyelv és a szoftvermegbízhatóság  szabványának . Turing-díj . ACM (2009. március 10.). - "Liskov megalkotta a CLU programozási nyelvet, egy objektum-orientált nyelvet, amely "klasztereket" tartalmaz, hogy koherens, szisztematikus kezelést biztosítson az absztrakt adattípusoknak, amelyek egy sor adatból és az adatokon végrehajtható műveletek halmazából állnak. Ezt követően az MIT-nél dolgozó kollégáival hatékony CLU fordítómegvalósításokat fejlesztettek ki több különböző gépen, ami fontos lépés volt ötletei gyakorlatiasságának demonstrálásában. Az adatabsztrakció ma már a szoftverfejlesztés általánosan elfogadott alapvető módszere, amely az adatokra összpontosít, nem pedig a folyamatokra, és gyakran "moduláris" vagy "objektum-orientált" programozásként azonosítják. Letöltve: 2012. november 30. Az eredetiből archiválva : 2013. január 16..
  9. Safonov, 1989 , p. 198.
  10. Safonov, 1989 , p. 201-207.
  11. Jed Liu, Aaron Kimball, Andrew C. Myers. Megszakítható iterátorok  //  POPL '06 Konferencia rekord a 33. ACM SIGPLAN-SIGACT szimpóziumról a programozási nyelvek alapelveiről. - N.Y .: ACM, 2006. - Vol. 1 (41) . - P. 283-294 . — ISBN 1-59593-027-2 . - doi : 10.1145/1111037.1111063 .
  12. Liskov, 1992 , p. 16.

Irodalom

  • Barbara Liskov, John Gatag. Absztrakciók és specifikációk alkalmazása a programok fejlesztésében. — M .: Mir , 1989. — 424 p. - ISBN 5-03-000489-0 .
  • Vlagyimir Szafonov. A Klu programozási nyelv és a Klu-Elbrus rendszer // Programozási nyelvek és módszerek az Elbrus rendszerben. - M .: Tudomány , 1989. - S. 189-242. — 389 p. — ISBN 5-02-013983-1 .
  • Barbara Liskov, Russell Atkinson, Toby Bloom, Eliot Moss, J. Craig Schaffert, Robert Scheifler, Alan Snyder. CLU Reference Manual  / szerkesztette: G. Goos, J. Hartmanis. - Berlin - Heidelberg - New York: Springer-Verlag , 1981. - 190 p. – ( Lecture Notes in Computer Science , 114. köt.). — ISBN 3-540-10836-X .
  • Liskov Barbara . A  CLU története . A programozási nyelvek története (1992. április 1.). doi : 10.1145/234286.1057826 . Letöltve: 2012. november 30. Az eredetiből archiválva : 2013. január 16..