Algol 68 | |
---|---|
Jazyková třída | verze nebo vydání [d] aprogramovací jazyk |
Autor | Adrian van Wiingaarden , Barry Mayo [d] a Gregory Peck |
Vývojář | Barry Mayo [d] ,Gregory Peck , Cornelis Coster [d] aAdrian van Wiingaarden |
Byl ovlivněn | ALGOL Y [d] aALGOL 60 |
ovlivnil | BETA |
Algol 68 ( anglicky Algol 68 z anglického algo rithmic - algorithmic a English l anguage - language) je procedurální imperativní vysokoúrovňový programovací jazyk , potomek jazyka Algol , který byl výrazně vylepšen. Byl vyvinut v letech 1964 - 1968 . Umístěný jako univerzální jazyk pro popis libovolných algoritmů zpracování dat vysoké složitosti. Liší se velkým objemem, bohatostí příležitostí a složitostí syntaxe.
Navzdory podobnosti názvu a oficiální kontinuitě ve vztahu k jazyku Algol 60, Algol 68 od něj zdědil pouze některé syntaktické prvky a výrazně se liší od svého předchůdce, především přítomností velkého množství dalších syntaktických prostředků a vizuálních schopností. . Zahrnuje zejména nástroje pro organizaci paralelních výpočtů zabudovaných do jazyka, operace se strukturami jako s jednotlivými objekty a maticové operace.
Nejcharakterističtějším rysem syntaxe Algol-68 je možnost redefinovat syntaxi a operátory – programátor může jazyk aktivně rozšiřovat požadovaným směrem, vytvářet vlastní operace. Účelem zahrnutí takových zařízení do jazyka bylo dosáhnout maximální expresivity a získat možnost pohodlného popisu nejabstraktnějších algoritmů. Pro tyto vlastnosti, stejně jako pro přítomnost výkonných operátorů pro zpracování struktur a polí, je Algol 68 někdy nazýván „jazykem super-vysoké úrovně“.
Formálně je Algol 68 procedurální programovací jazyk zaměřený na popis sekvence příkazů, ale díky vyvinutým nástrojům pro popis typů a operací s ním lze psát programy téměř v jakémkoli stylu. Takže v níže uvedeném příkladu je program Algol-68 napsán ve funkčním stylu.
Tento program implementuje klasický algoritmus " Sieve of Eratosthenes " pro nalezení všech prvočísel menších než 100. nil znamená v jiných jazycích nulový ukazatel . Zápis x z y znamená „přistupování k x jako prvku struktury nebo spojení y “.
začít # Síto prvočísel Algol-68, funkční styl # chyba proc = (řetězec s) void: (print(( nový řádek, " chyba: ", s, nový řádek)); goto stop); proc one to = (int n) seznam: (proc f = (int m,n) seznam: (m>n | nula | cons(m, f(m+1,n))); f(1,n)); seznam režimů = referenční uzel; uzel modu = struct(int h, seznam t); proc cons = (int n, seznam l) seznam: uzel haldy := (n, l); proc hd = (seznam l) int: ( l je nula | chyba("hd nula"); přeskočit | h z l ); proc tl = (seznam l) seznam: ( l je nula | error("tl nil"); přeskočit | t z l ); proc show = (list l) void: ( l isnt nil | print((" ",whole(hd(l),0))); show(tl(l))); filtr proc = (proc (int) bool p, seznam l) seznam: pokud l je nula, pak nula elif p(hd(l)) then cons(hd(l), filtr(p,tl(l))) else filter(p, tl(l)) fi; proc sieve = (seznam l) seznam: pokud l je nula, pak nula jiný proc není více = (int n) bool: n mod hd(l) ? 0; cons(hd(l), síto( filtr( ne více, tl(l)))) fi; proc primes = (int n) seznam: sieve( tl( one to(n) )); zobrazit( prvočísla(100) ) konecDalší zajímavou vlastností jazyka Algol 68 je jeho „mnohojazyčnost“ – jazyk má schopnost používat různé překladové tabulky, což umožňuje každému přirozenému jazyku definovat vlastní sadu klíčových slov Algol-68. Výsledkem je, že programátoři dostanou příležitost psát programy v klíčových slovech svého rodného jazyka. Níže je uveden příklad nejjednoduššího postupu v Algol-68, který vypočítává datum následující po předaném v parametru, ve dvou jazycích: angličtině a němčině.
# Datum dalšího dne - anglická varianta mod datum = struct(Int den, string mesic, Int rok); proc den následující = (datum x) datum: Pokud den x < délka měsíce (měsíc x, rok x) potom (den x + 1, měsíc x, rok x) elif měsíc x = "prosinec" potom (1, "leden", rok x + 1) else (1, následník měsíce (měsíc x), rok x) fi; # Nachfolgetag - Deutsche Variante menge datum = tupel(ganz tag, wort monat, ganz Jahr); funkce 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 = "prosinec" dann (1, "leden", jahr von x + 1) ansonsten (1, nachfolgemonat (monat von x), jahr von x) endewenn;V roce 1960 byla dokončena práce IFIP (International Federation for Information Processing, International Federation for Information Processing) High-Level Language Committee, která tvořila jeden z prvních „klasických“ HDL - Algol . Algol si okamžitě získal oblibu především v akademických kruzích Evropy nejen jako praktický programovací jazyk, ale také jako univerzální jazyk pro popis výpočetních algoritmů ve vědeckých pracích. Ale už tehdy bylo jasné, že Algol není dokonalý a je potřeba ho vylepšit. Jednak v jazyce chyběly některé velmi žádoucí rysy, jednak se některé mechanismy a konstrukce Algolu používaly tak zřídka, že vyvstala otázka jejich vyloučení z jazyka pro zjednodušení překladatele. Výsledkem bylo, že do roku 1962 IFIP sestavil nový výbor pro Algol z odborníků z mnoha zemí západní Evropy a Ameriky. Komise dostala dva úkoly:
Práce výboru trvala šest let - od roku 1962 do roku 1968. Poměrně rychle se výboru podařilo splnit první úkol – dohodnout se na redukované podmnožině Algolu, obsahující pouze jeho hojně používané prvky. Otázka nástupnického jazyka se řešila několik let v neustálých diskusích. Dva členové výboru: Charles Hoare z Oxfordské univerzity a Niklaus Wirth ze Švýcarska (tehdy učil v USA na Stanfordské univerzitě) v roce 1965 navrhli výboru vlastní verzi nového jazyka, kterou nazvali Algol-W . Jednalo se o umírněnou revizi Algolu, očištěnou od známých nedostatků a doplněnou o minimum potřebných funkcí. Po zveřejnění byl projekt kladně hodnocen mnoha vědci, ale komise jej zamítla. Bylo mnoho návrhů, různého stupně propracovanosti, některé z nich byly zamítnuty, některé byly použity při návrhu jazyka. V prosinci 1968 v Mnichově na schůzi výboru byl oficiálně představen nový programovací jazyk nazvaný Algol 68. Ukázalo se, že jazyk je extrémně vyvinutý, ale zároveň velmi objemný a složitý. Dokonce i zkušení programátoři měli potíže s porozuměním „jazykové zprávě“ vydané komisí.
Oficiální dokumenty komise hodnotí jeho práci kladně, i když někteří členové komise se k práci i k jejím výsledkům vyjadřovali krajně negativně. Z kritiků jazyka jsou nejznámější výše zmínění Charles Hoare a Niklaus Wirth . Hoare kritizoval projekt za to, že je „obskurní, složitý a příliš ambiciózní“, když byl výbor stále v jednání. Na konci práce výboru vytvořili Hoare, Wirth a řada dalších vědců krátkou zprávu nastiňující kritiku nového jazyka. V její shrnující části zaznělo: „jako nástroj pro spolehlivou tvorbu komplexních programů by měl být jazyk uznán jako neúspěšný“ (šíření této zprávy bylo vedením IFIP zakázáno). Následně v roce 1980 ve své Turingově přednášce Hoare rozvedl práci výboru Algol-68, nedostatky jak procesu vývoje jazyka, tak samotného.
K popisu jazyka byl použit originální formalismus - van Wiingaardenovy dvouúrovňové gramatiky . To umožnilo dosáhnout přísnosti popisu (protože tento typ gramatiky umožňuje popsat formální formou kontextové podmínky, které musí být slovně vyjádřeny při popisu jazyka v BNF nebo RBNF ), ale dále to popis komplikovalo. Navíc je extrémně obtížné postavit jazykový analyzátor přímo z van Wiingaardenových gramatik, takže původní popis by mohl být považován pouze za výchozí formu specifikace syntaxe, vyžadující vážnou úpravu pro skutečné praktické použití. Formalismus jazykového popisu zvoleného komisí předurčil obtíže při jeho realizaci. Proces vývoje kompilátorů pro nový jazyk se ukázal jako obtížný a zdlouhavý, i když byly nakonec vytvořeny a použity.
Úspěch, který měl Algol 60, Algol 68 nedosáhl. V akademických kruzích nebyl pro svou složitost a těžkopádnost žádaný a v průmyslovém programování nedokázal vytlačit v té době hojně používané Fortran a Cobol. Algol 68 v jistém smyslu kopíroval osud PL/1 , vyvinutý v roce 1964 výborem pod záštitou IBM pro System/360 jako náhrada za Fortran a Cobol – v obou případech velké výbory, snažící se uspokojit potřeby různé zájmové skupiny uživatelů, zahrnuty v jazyce mnoho velmi výkonných, ale nepoužívaných všemi nebo dokonce většinou vývojářů, nástrojů, což má za následek výkonný, ale těžkopádný, neovladatelný a obtížně implementovatelný nástroj. Pokud to v případě PL / 1 vedlo k faktickému rozpadu jazyka na podmnožiny (většina, možná i všechny kompilátory PL / 1, které na světě existovaly, implementovaly jen část schopností jazyka), pak byl Algol 68 stále implementován v plném rozsahu, ale počet takových implementací se ukázal jako extrémně malý a použití jazyka bylo spíše omezené. V Evropě byl Algol 68 používán dlouhou dobu Britským královským výborem pro komunikace a radary. V SSSR existovaly pracovní skupiny pro vývoj na Algolu-68 (například Novosibirsk pod vedením akademika Andreje Petroviče Eršova , Leningrad pod vedením Andreje Nikolajeviče Terekhova , Moskva pod vedením Alexandra Nikolajeviče Maslova a Michaila Ruvimoviče Levinsona) . Na Leningradské státní univerzitě , která byla provozována řadu let, byl vytvořen kompilátor a výkonný programovací systém v Algol-68 pro počítač ES . Ani jazyk však nebyl široce používán.
Snad jedním z faktorů, které předurčily skutečné selhání Algol-68, byl na počátku 70. let vznik nové generace jazyků na vysoké úrovni, mezi nimiž hrál zvláštní roli Pascal – ve skutečnosti velmi „vylepšená a doplněná verze Algol“, který byl v akademickém prostředí očekáván od výboru pro Algol-68, ale mnohem jednodušší. Jeho široká distribuce nezanechala téměř žádné místo pro Algol-68.
Navzdory neúspěchu ovlivnil Algol 68 vývojáře pozdějších objektově orientovaných jazyků, zejména C++ , ačkoli mnoho funkcí bylo vypuštěno a některé byly implementovány jinými způsoby. V roce 1977, když výbor pro programovací jazyk amerického ministerstva obrany dospěl k závěru, že je nutné vyvinout nový programovací jazyk pro vestavěné systémy, výbor rozhodl, že návrhy budoucího jazyka by měly být založeny na jednom z jazyků PL/1. , Pascal a Algol 68. Algol-68 tak měl šanci stát se předchůdcem nového univerzálního jazyka, ale tato šance se nenaplnila: z 15 projektů přihlášených do soutěže byly všechny 4 vybrané do druhé fáze k revizi založený na jazyce Pascal . Po další fázi vylepšování se nejlepší z těchto projektů stal jazykem Ady .
Za prvé, negativní recenze se týkají složitosti syntaxe Algol-68. Hoare zejména poznamenal, že odklon od jednoduchosti progenitorového jazyka nový jazyk vůbec neusnadňuje vývoj programů. Jak řekl Hoare, „členové výboru využili neustálé prodlevy v jeho práci k tomu, aby do budoucího jazyka vtlačili stále složitější struktury, místo aby se jej snažili zjednodušit“.
Kritici také poznamenali, že jazyk provokuje vývojáře k volnému nestrukturálnímu programování s aktivním používáním vlastních abstraktních kategorií a zápisu. Tím se programový kód stal nečitelným, což znesnadňuje skupinový vývoj programů a jejich údržbu. Kromě toho příliš velké množství jazykových funkcí ztěžovalo plnou implementaci kompilátoru.
Programovací jazyky | |
---|---|
|