Algol 68

Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită la 17 martie 2021; verificările necesită 2 modificări .
Algol 68
Clasa de limba versiunea sau ediția [d] șilimbajul de programare
Autor Adrian van Wiingaarden , Barry Mayo [d] și Gregory Peck
Dezvoltator Barry Mayo [d] ,Gregory Peck , Cornelis Coster [d] șiAdrian van Wiingaarden
A fost influențat ALGOL Y [d] șiALGOL 60
influențat BETA

Algol 68 ( engleză  Algol 68 din engleză  algo rithmic  - algoritmic și limba engleză   - limbaj) este un imperativ procedural limbaj de programare de nivel înalt , un descendent al limbajului Algol , îmbunătățit semnificativ. A fost dezvoltat în perioada 1964 - 1968 . Poziționat ca un limbaj universal pentru descrierea algoritmilor arbitrari de procesare a datelor de complexitate ridicată. Diferă prin volum mare, bogăție de oportunități și complexitate a sintaxei.

Caracteristici

În ciuda asemănării numelui și a continuității oficiale în raport cu limba Algol 60, Algol 68 a moștenit doar câteva elemente de sintaxă din acesta și diferă semnificativ de limbajul predecesor, în primul rând prin prezența unui număr mare de mijloace sintactice și capacități vizuale suplimentare. . În special, include instrumente pentru organizarea calculelor paralele încorporate în limbaj, operații cu structuri ca și cu obiecte individuale și operații cu matrice.

Cea mai caracteristică trăsătură a sintaxei Algol-68 este capacitatea de a redefini sintaxa și operatorii - programatorul poate extinde în mod activ limba în direcția necesară, își poate crea propriile operațiuni. Scopul includerii unor astfel de facilități în limbaj a fost de a obține o expresivitate maximă și de a obține posibilitatea unei descrieri convenabile a celor mai abstracti algoritmi. Pentru aceste caracteristici, precum și pentru prezența unor operatori puternici pentru procesarea structurilor și matricelor, Algol 68 este uneori numit „limbajul nivelului super-înalt”.

Formal, Algol 68 este un limbaj de programare procedural axat pe descrierea unei secvențe de comenzi, dar datorită instrumentelor dezvoltate pentru descrierea tipurilor și operațiilor, poate fi folosit pentru a scrie programe în aproape orice stil. Deci, în exemplul de mai jos, programul Algol-68 este scris într-un stil funcțional.

Acest program implementează algoritmul clasic „ Sieve of Eratosthenes ” pentru găsirea tuturor numerelor prime mai mici de 100. nil înseamnă indicator nul în alte limbi. Notația x a lui y înseamnă „accesarea lui x ca element al unei structuri sau al uniunii y ”.

începe # Algol-68 sită numere prime, stil funcțional # eroare proc = (șir s) void: (print(( linie nouă, " eroare: ", s, linie nouă)); du-te la oprire); proc one to = (int n) listă: (proc f = (int m,n) lista: (m>n | nil | cons(m, f(m+1,n))); f(1,n)); lista de moduri = ref nod; mode node = struct(int h, list t); proc cons = (int n, list l) list: heap node := (n, l); proc hd = (lista l) int: ( l este zero | eroare ("hd nil"); skip | h din l ); proc tl = (lista l) listă: ( l este zero | eroare ("tl nil"); skip | t din l ); proc show = (lista l) void: ( nu este nul | print((" ",whole(hd(l),0))); show(tl(l))); filtru proc = (proc (int) bool p, lista l) lista: dacă l este nul, atunci nul elif p(hd(l)) apoi cons(hd(l), filter(p,tl(l))) else filter(p, tl(l)) fi; proc sieve = (lista l) lista: dacă l este nul, atunci nul altfel proc nu multiplu = (int n) bool: n mod hd(l) ? 0; cons(hd(l), sieve( filtru (nu multiplu, tl(l) ))) fi; proc prime = (int n) listă: sieve( tl( one to(n) )); arată( numere prime(100) ) Sfârşit

O altă caracteristică interesantă a limbajului Algol 68 este „multilingvismul” - limba are capacitatea de a folosi tabele de traducere diferite, ceea ce permite fiecărei limbi naturale să-și definească propriul set de cuvinte cheie Algol-68. Ca rezultat, programatorii au posibilitatea de a scrie programe în cuvintele cheie din limba lor maternă. Mai jos este un exemplu de cea mai simplă procedură din Algol-68, care calculează data următoare celei trecute în parametru, în două limbi: engleză și germană.

# Data de a doua zi - varianta engleza mode date = struct(Int day, string month, Int year); proc a doua zi = (data x) data: Dacă ziua lui x < lungimea lunii (luna lui x, anul x) apoi (ziua lui x + 1, luna x, anul x) elif luna x = „decembrie” apoi (1, „ianuarie”, anul x + 1) else (1, succesorul lunii (luna x), anul x) 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 (etichetă von x + 1, monat von x, jahr von x) wennaber monat von x = "Dezember" dann (1, „ianuarie”, jahr von x + 1) ansonsten (1, nachfolgemonat(monat von x), jahr von x) endewenn;

Istoria limbii

Până în 1960, a fost finalizată activitatea Comitetului de limbă de nivel înalt IFIP (Federația Internațională pentru Procesarea Informației, Federația Internațională pentru Procesarea Informației), care a format unul dintre primele HDL „clasice” - Algol . Algol a câștigat imediat popularitate, în primul rând în cercurile academice din Europa, nu numai ca limbaj de programare practic, ci și ca limbaj universal pentru descrierea algoritmilor de calcul în lucrări științifice. Dar chiar și atunci era clar că Algol nu era perfect și trebuia îmbunătățit. Pe de o parte, unele trăsături foarte dezirabile lipseau din limbă, pe de altă parte, unele mecanisme și construcții ale lui Algol au fost folosite atât de rar, încât s-a pus problema excluderii lor din limbă pentru a simplifica traducătorul. Ca urmare, până în 1962, IFIP a adunat un nou comitet pentru Algol din experți din multe țări din Europa de Vest și America. Comitetului a primit două sarcini:

Activitatea comitetului a durat șase ani - din 1962 până în 1968. Destul de repede, comitetul a reușit să finalizeze prima sarcină - să convină asupra unui subset redus de Algol, care conține doar elementele sale utilizate pe scară largă. Problema limbajului succesor a fost rezolvată de câțiva ani, în discuții constante. Doi membri ai comisiei: Charles Hoare de la Universitatea Oxford și Niklaus Wirth din Elveția (la vremea aceea preda în SUA, la Universitatea Stanford) în 1965 au propus comisiei propria versiune a noii limbi, pe care o numeau Algol-W. . A fost o revizuire moderată a lui Algol, curățată de deficiențele cunoscute și completată cu un minim de caracteristici necesare. Odată publicat, proiectul a fost evaluat pozitiv de mulți oameni de știință, dar comitetul l-a respins. Au fost multe propuneri, de diferite grade de sofisticare, unele dintre ele au fost respinse, altele au fost folosite în proiectarea limbajului. În decembrie 1968 la München, la o ședință de comitet, a fost prezentat oficial un nou limbaj de programare, numit Algol 68. Limbajul s-a dovedit a fi extrem de dezvoltat, dar în același timp foarte voluminos și complex. Chiar și programatorii experimentați au avut dificultăți în înțelegerea „mesajului lingvistic” emis de comitet.

Documentele oficiale ale comisiei evaluează pozitiv munca depusă de acesta, deși unii dintre membrii comisiei au vorbit atât despre lucru, cât și despre rezultatele acesteia, extrem de negativ. Dintre criticii limbii, cei mai cunoscuți sunt Charles Hoare și Niklaus Wirth . Hoare a criticat proiectul pentru că este „obscur, complex și prea ambițios” în timp ce comitetul era încă în sesiune. La sfârșitul lucrărilor comitetului, Hoare, Wirth și o serie de alți oameni de știință au creat un scurt raport subliniind criticile aduse noii limbi. În partea rezumativă, s-a spus: „ca instrument pentru crearea fiabilă a programelor complexe, limbajul ar trebui să fie recunoscut ca nereușit” (acest raport a fost interzis de la conducerea IFIP). Ulterior, în 1980, în Turing Lecture , Hoare a detaliat lucrările comitetului Algol-68, deficiențele atât ale procesului de dezvoltare a limbajului, cât și ale acestuia.

Pentru a descrie limba, a fost folosit un formalism original - gramaticile pe două nivele ale lui van Wiingaarden . Acest lucru a făcut posibilă atingerea strictității descrierii (deoarece acest tip de gramatică permite descrierea într-o formă formală a condițiilor contextuale care trebuie exprimate verbal atunci când se descrie o limbă în BNF sau RBNF ), dar a complicat și mai mult descrierea. În plus, este extrem de dificil să construiești un analizor de limbă direct din gramaticile lui van Wiingaarden, așa că descrierea originală ar putea fi considerată doar ca forma inițială a specificației sintaxei, necesitând modificări serioase pentru aplicarea practică reală. Formalismul descrierii lingvistice alese de comitet a predeterminat dificultățile în implementarea acesteia. Procesul de dezvoltare a compilatoarelor pentru noua limbă s-a dovedit a fi dificil și de durată, deși au fost în cele din urmă creați și utilizați.

Succesul pe care l-a avut Algol 60, Algol 68 nu l-a atins. În cercurile academice, nu a fost solicitat din cauza complexității și a greutății sale, iar în programarea industrială nu a putut înlătura Fortran și Cobol, care erau utilizate pe scară largă la acea vreme. Într-un fel, Algol 68 a replicat soarta PL/1 , dezvoltată în 1964 de un comitet sub auspiciile IBM pentru System/360, ca înlocuitor pentru Fortran și Cobol - comitete mari în ambele cazuri, încercând să răspundă nevoilor multor diferite grupuri de utilizatori de interes, incluse în limbaj o mulțime de instrumente foarte puternice, dar care nu sunt utilizate de toți sau chiar de majoritatea dezvoltatorilor, rezultând un instrument puternic, dar greoi, greu de gestionat și dificil de implementat. Dacă în cazul PL / 1 acest lucru a dus la dezintegrarea efectivă a limbajului în subseturi (majoritatea, poate chiar toate compilatoarele PL / 1 care existau în lume, implementau doar o parte din capacitățile limbajului), atunci Algol 68 a fost încă implementat. în totalitate, dar numărul de astfel de implementări s-a dovedit a fi extrem de mic, iar utilizarea limbajului a fost destul de limitată. În Europa, Algol 68 a fost folosit multă vreme de către Comitetul Regal Britanic pentru Comunicații și Radar. În URSS , au existat grupuri de lucru pentru dezvoltarea Algol-68 (de exemplu, Novosibirsk sub conducerea academicianului Andrei Petrovici Ershov , Leningrad sub conducerea lui Andrei Nikolayevich Terekhov , Moscova sub conducerea lui Alexander Nikolayevich Maslov și Mihail Ruvimovici Levinson) . Un compilator și un sistem de programare puternic în Algol-68 pentru computerul ES au fost create la Universitatea de Stat din Leningrad , care a fost operată de mulți ani. Cu toate acestea, nici limbajul nu a fost folosit pe scară largă.

Poate că unul dintre factorii care au predeterminat eșecul real al lui Algol-68 a fost apariția la începutul anilor 1970 a unei noi generații de limbaje de nivel înalt, printre care Pascal a jucat un rol special  - de fapt, chiar „versiunea îmbunătățită și completată a Algol” care era de așteptat în mediul academic de la comisia pe Algol-68, dar mult mai simplu. Distribuția sa largă nu a lăsat aproape nicio nișă pentru Algol-68.

În ciuda eșecului, Algol 68 a influențat dezvoltatorii de limbaje ulterioare orientate pe obiecte, în special C++ , deși multe dintre caracteristici au fost abandonate și unele au fost implementate în alte moduri. În 1977, când Comitetul pentru limbajul de programare al Departamentului de Apărare al SUA a ajuns la concluzia că este necesar să se dezvolte un nou limbaj de programare pentru sistemele încorporate, comitetul a decis ca propunerile pentru viitorul limbaj să se bazeze pe unul dintre limbile PL/1. , Pascal și Algol 68. Astfel, Algol-68 a avut șansa de a deveni progenitorul unui nou limbaj universal, dar această șansă nu s-a concretizat: din 15 proiecte depuse la concurs, toate cele 4 selectate pentru etapa a doua pentru revizuire au fost bazat pe limbajul Pascal . După încă o etapă de rafinament, cele mai bune dintre aceste proiecte au devenit limbajul Adei .

Critica limbajului

În primul rând, recenziile negative se referă la complexitatea sintaxei Algol-68. În special, Hoare a remarcat că, îndepărtându-se de simplitatea limbajului progenitor, noul limbaj nu facilitează deloc dezvoltarea programelor. După cum a spus Hoare, „membrii comitetului s-au folosit de întârzierile constante din activitatea sa pentru a strânge structuri din ce în ce mai complexe în limbajul viitor, în loc să încerce să-l simplifice”.

Criticii au remarcat, de asemenea, că limbajul provoacă dezvoltatorul să elibereze programarea nestructurală cu utilizarea activă a propriilor categorii și notații abstracte. Din aceasta, codul programului a devenit imposibil de citit, ceea ce face dificilă dezvoltarea de grup a programelor și întreținerea acestora. În plus, abundența excesivă a caracteristicilor limbajului a făcut dificilă implementarea completă a compilatorului.

Literatură

GOST-uri Literatură în limba engleză

Link -uri