Algol 68

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2021. március 17-én felülvizsgált verziótól ; az ellenőrzések 2 szerkesztést igényelnek .
Algol 68
Nyelvóra verzió vagy kiadás [d] ésprogramozási nyelv
Szerző Adrian van Wiingaarden , Barry Mayo [d] és Gregory Peck
Fejlesztő Barry Mayo [d] ,Gregory Peck , Cornelis Coster [d] ésAdrian van Wiingaarden
Befolyásolva ALGOL Y [d] ésALGOL 60
befolyásolta BÉTA

Az Algol 68 ( angolul  Algol 68 az angol  algo rithmic  - algorithmic és angol  l anguage  - language) egy procedurális imperatív magas szintű programozási nyelv , az Algol nyelv leszármazottja , jelentősen továbbfejlesztve. 1964-1968 között fejlesztették ki . Univerzális nyelvként pozicionálva tetszőleges, nagy bonyolultságú adatfeldolgozási algoritmusok leírására. Különbözik a nagy mennyiségben, a lehetőségek gazdagságában és a szintaxis összetettségében.

Jellemzők

A név hasonlósága és az Algol 60 nyelvhez viszonyított hivatalos folytonosság ellenére az Algol 68 csak néhány szintaktikai elemet örökölt tőle, és jelentősen eltér elődjétől, elsősorban a nagyszámú további szintaktikai eszköz és vizuális képesség jelenlétében. . Konkrétan tartalmaz eszközöket a nyelvbe épített párhuzamos számítások szervezésére, a struktúrákkal végzett műveletekre, mint az egyedi objektumokra, valamint a mátrixműveletekre.

Az Algol-68 szintaxis legjellemzőbb tulajdonsága a szintaxis és az operátorok újradefiniálása - a programozó aktívan bővítheti a nyelvet a kívánt irányba, létrehozhatja saját műveleteit. Az ilyen lehetőségek nyelvbe való beépítésének célja az volt, hogy maximális kifejezőképességet érjünk el, és lehetőség nyíljon a legelvontabb algoritmusok kényelmes leírására. Ezen funkciók miatt, valamint a struktúrák és tömbök feldolgozásához szükséges hatékony operátorok jelenléte miatt az Algol 68-at néha a "szupermagas szintű nyelvnek" nevezik.

Formálisan az Algol 68 egy procedurális programozási nyelv, amely egy parancssor leírására fókuszál, de a típusok és műveletek leírására kifejlesztett eszközöknek köszönhetően szinte bármilyen stílusban írható vele. Tehát az alábbi példában az Algol-68 program funkcionális stílusban van megírva.

Ez a program a klasszikus " Eratosthenes szita " algoritmust valósítja meg a 100-nál kisebb prímszámok megtalálására . A nulla nulla mutatót jelent más nyelveken. Az y x jelölése azt jelenti, hogy " x elérése az y struktúra vagy unió elemeként ".

kezdődik # Algol-68 prímszám szita, funkcionális stílus # proc error = (string s) void: (print(( newline, " error: ", s, newline)); goto stop); proc one to = (int n) lista: (proc f = (int m,n) lista: (m>n | nil | cons(m, f(m+1,n))); f(1,n)); mód lista = ref node; mód csomópont = struct(int h, lista t); proc cons = (int n, lista l) lista: kupac csomópont := (n, l); proc hd = (l lista) int: ( l nulla | error("hd nil"); kihagyja | h of l ); proc tl = (l lista) lista: ( l nil | error("tl nil"); kihagy | l t); proc show = (l lista) void: ( l isnt nil | print((" ",whole(hd(l),0))); show(tl(l))); proc filter = (proc (int) bool p, list l) lista: ha l nulla akkor nulla elif p(hd(l)) then cons(hd(l), filter(p,tl(l))) else filter(p, tl(l)) fi; proc szita = (l lista) lista: ha l nulla akkor nulla más proc nem többszörös = (int n) bool: n mod hd(l) ? 0; cons(hd(l), szita( filter( not multiple, tl(l) ))) fi; proc prímek = (int n) lista: szita( tl( one to(n) )); show(prímszám(100)) vége

Az Algol 68 nyelv másik érdekessége a "többnyelvűsége" – a nyelv képes különböző fordítási táblázatok használatára, ami lehetővé teszi, hogy minden természetes nyelv meghatározza a saját Algol-68 kulcsszókészletét. Ennek eredményeként a programozók lehetőséget kapnak arra, hogy az anyanyelvük kulcsszavaival programokat írjanak. Az alábbiakban egy példa látható az Algol-68 legegyszerűbb eljárására, amely a paraméterben átadott dátumot követő dátumot számítja ki, két nyelven: angolul és németül.

# Másnapi dátum - angol változat mode date = struct(Int nap, string hónap, Int év); proc a következő nap = (dátum x) dátum: Ha x nap < hónap hossza (x hónap, x év) akkor (x + 1 napja, x hónapja, x éve) elif x hónap = "december" majd (1, "január", x + 1 éve) else (1, hónap utódja (x hónap), x év) fi; # Nachfolgetag – Deutsche Variante menge datum = tupel(ganz tag, wort monat, ganz Jahr); funktion naechster tag nach = (datum x) datum: wenn tag von x < monatslaenge(monat von x, jahr von x) dann (tag von x + 1, monat von x, jahr von x) wennaber monat von x = "December" dann (1, "január", jahr von x + 1) ansonsten (1, nachfolgemonat (monat von x), jahr von x) endewenn;

A nyelv története

1960 - ra befejeződött az IFIP (International Federation for Information Processing, International Federation for Information Processing) High-Level Language Committee munkája, amely az egyik első "klasszikus" HDL-t alkotta - Algol . Az Algol azonnali népszerűségre tett szert, elsősorban Európa tudományos köreiben, nemcsak mint gyakorlati programozási nyelv, hanem mint univerzális nyelv a számítási algoritmusok tudományos közleményekben történő leírására is. De már akkor is egyértelmű volt, hogy az Algol nem tökéletes, és fejlesztésre szorul. Egyrészt hiányzott a nyelvből néhány nagyon kívánatos tulajdonság, másrészt az Algol egyes mechanizmusait, konstrukcióit olyan ritkán alkalmazták, hogy felmerült a nyelvből való kizárás a fordító egyszerűsítése érdekében. Ennek eredményeként 1962- re az IFIP új Algol-bizottságot állított össze Nyugat-Európa és Amerika számos országának szakértőiből. A bizottság két feladatot kapott:

A bizottság munkája hat évig tartott - 1962-től 1968-ig. A bizottságnak elég gyorsan sikerült végrehajtania az első feladatot – az Algol egy csökkentett részhalmazában megállapodni, amely csak a széles körben használt elemeit tartalmazza. Az utódnyelv kérdése több éven át, folyamatos vitákban megoldódott. A bizottság két tagja: Charles Hoare az Oxford Egyetemről és Niklaus Wirth Svájcból (akkor az USA-ban tanított, a Stanford Egyetemen) 1965-ben javasolta a bizottságnak az új nyelv saját változatát, amelyet Algol-W-nek neveztek el. . Az Algol mérsékelt revíziója volt, megtisztítva az ismert hiányosságoktól, és kiegészítve minimális szükséges funkcióval. A közzétételt követően sok tudós pozitívan értékelte a projektet, de a bizottság elutasította. Sok javaslat érkezett, különböző fokú kifinomultsággal, néhányat elutasítottak, néhányat felhasználtak a nyelv kialakításánál. 1968 decemberében Münchenben egy bizottsági ülésen hivatalosan is bemutatták az új programozási nyelvet, az Algol 68-at. A nyelv rendkívül fejlettnek bizonyult, ugyanakkor nagyon terjedelmes és összetett. Még a tapasztalt programozóknak is nehezére esett megérteni a bizottság által kiadott "nyelvi üzenetet".

A bizottság hivatalos dokumentumai pozitívan értékelik az általa végzett munkát, bár a bizottság egyes tagjai mind a munkáról, mind annak eredményeiről rendkívül negatívan nyilatkoztak. A nyelv kritikusai közül a már említett Charles Hoare és Niklaus Wirth a legismertebb . Hoare bírálta a projektet, amiért "homályos, összetett és túl ambiciózus" volt, miközben a bizottság még ülésezett. A bizottság munkájának végén Hoare, Wirth és számos más tudós rövid jelentést készített, amelyben felvázolta az új nyelv kritikáját. Összefoglaló részében elhangzott: "a komplex programok megbízható létrehozásának eszközeként a nyelvet sikertelennek kell elismerni" (ennek a jelentésnek a terjesztését az IFIP vezetése megtiltotta). Ezt követően, 1980-ban, Turing-előadásában Hoare részletesen kifejtette az Algol-68 bizottság munkáját, mind a nyelvi fejlesztési folyamat, mind önmagában a hiányosságokat.

A nyelv leírására egy eredeti formalizmust használtak - van Wiingaarden kétszintű grammatikáit . Ez lehetővé tette a leírás szigorúságának elérését (hiszen ez a nyelvtan típus lehetővé teszi azoknak a kontextuális feltételeknek formális formában történő leírását, amelyeket szóban kell kifejezni egy nyelv BNF -ben vagy RBNF -ben történő leírásánál ), de tovább bonyolította a leírást. Emellett rendkívül nehéz közvetlenül van Wiingaarden nyelvtanaiból nyelvi elemzőt építeni, így az eredeti leírás csak a szintaktikai specifikáció kezdeti formájának tekinthető, amely komoly módosítást igényel a valódi gyakorlati alkalmazáshoz. A bizottság által választott nyelvi leírás formalizmusa előre meghatározta a megvalósítás nehézségeit. Az új nyelv fordítóprogramjainak fejlesztése nehéznek és hosszadalmasnak bizonyult, bár végül létrehozták és felhasználták őket.

Az Algol 60 sikerét az Algol 68 nem érte el. Tudományos körökben bonyolultsága és körülményessége miatt nem volt rá kereslet, az ipari programozásban pedig nem tudta kiszorítani az akkoriban széles körben használt Fortran-t és Cobolt. Bizonyos értelemben az Algol 68 megismételte a PL/1 sorsát , amelyet 1964-ben dolgozott ki az IBM égisze alatt a System/360-as bizottság a Fortran és a Cobol helyettesítésére – mindkét esetben nagy bizottságok, amelyek megkísérelték kielégíteni a hatalmas számú szükségleteket. különböző felhasználói csoportok érdeklődési köre, a nyelvben sok nagyon erős, de nem minden, vagy még a legtöbb fejlesztő sem használt eszközt, ami egy erőteljes, de nehézkes, kezelhetetlen és nehezen megvalósítható eszközt eredményez. Ha a PL / 1 esetében ez a nyelv tényleges részhalmazokra való felbomlásához vezetett (a legtöbb, talán még az összes PL / 1 fordító, amely a világon létezett, csak egy részét valósította meg a nyelv képességeinek), akkor az Algol 68 mégis megvalósult. teljes egészében, de az ilyen megvalósítások száma rendkívül csekélynek bizonyult, és a nyelvhasználat meglehetősen korlátozott volt. Európában az Algol 68-at hosszú ideig a Brit Királyi Kommunikációs és Radarbizottság használta. A Szovjetunióban munkacsoportok működtek az Algol-68 fejlesztésére (például Novoszibirszk Andrej Petrovics Ershov akadémikus , Leningrád Andrej Nyikolajevics Terekhov , Moszkva Alekszandr Nyikolajevics Maszlov és Mihail Ruvimovich Levinson vezetésével) . A Leningrádi Állami Egyetemen hoztak létre egy fordítót és egy hatékony programozási rendszert Algol-68-ban az ES számítógéphez , amelyet sok éven át üzemeltettek. Azonban a nyelvet sem használták széles körben.

Talán az egyik tényező, amely előre meghatározta az Algol-68 tényleges kudarcát, az volt, hogy az 1970-es évek elején a magas szintű nyelvek új generációja jelent meg, amelyek között a Pascal különleges szerepet játszott  – tulajdonképpen a nyelv „javított és kiegészített változata”. Algol”, amit az akadémiai környezetben elvártak az Algol-68 bizottságtól, de sokkal egyszerűbb. Széles elterjedése szinte nem hagyott rést az Algol-68 számára.

A kudarc ellenére az Algol 68 hatással volt a későbbi objektum-orientált nyelvek, különösen a C++ fejlesztőire , bár sok szolgáltatást kihagytak, és néhányat más módon implementáltak. 1977-ben, amikor az Egyesült Államok Védelmi Minisztériumának programozási nyelvi bizottsága arra a következtetésre jutott, hogy új programozási nyelvet kell kifejleszteni a beágyazott rendszerek számára, a bizottság úgy döntött, hogy a jövőbeli nyelvre vonatkozó javaslatoknak a PL / 1 nyelvek valamelyikén kell alapulniuk. , Pascal és Algol 68. Így az Algol-68-nak esélye volt arra, hogy egy új univerzális nyelv ősévé váljon, de ez az esély nem valósult meg: a versenyre benyújtott 15 projekt közül mind a 4 a második szakaszba beválogatott revízióba került. a Pascal nyelv alapján . A finomítás egy újabb szakasza után a projektek legjobbja az ada nyelve lett .

Nyelvkritika

Először is, a negatív vélemények az Algol-68 szintaxisának összetettségére vonatkoznak. Hoare különösen azt jegyezte meg, hogy az ősnyelv egyszerűségétől távolodva az új nyelv egyáltalán nem segíti elő a programok fejlesztését. Ahogy Hoare mondta, "a bizottság tagjai a munkája folyamatos késéseit arra használták fel, hogy egyre bonyolultabb struktúrákat préseljenek bele a jövő nyelvezetébe, ahelyett, hogy leegyszerűsítették volna".

A kritikusok azt is megjegyezték, hogy a nyelv szabad nem strukturális programozásra provokálja a fejlesztőt saját absztrakt kategóriáik és jelöléseik aktív használatával. Ettől a programkód olvashatatlanná vált, ami megnehezíti a programok csoportos fejlesztését és karbantartását. Ezenkívül a nyelvi jellemzők túlzott bősége megnehezítette a fordító teljes megvalósítását.

Irodalom

GOST-ok Angol nyelvű irodalom

Linkek