Algol | |
Data pierwszej wersji | 1958 |
---|---|
Paradygmat | proceduralny , imperatywny |
Autor | John Backus i Peter Naur |
Pisanie na maszynie | statyczny , bezpieczny , mianownik |
Dialekty | Algol 58, Algol 60 i Algol 68 |
Wpływem | Fortran |
Pod wpływem | DOPE , Simula , PL / M , Pascal |
Wdrożenia | Burroughs Algol na B5000, Case-ALGOL na Univac 1107 , PDP-1 (1961), Algol 60 AFNOR na CAE 510 (1964), ALGOL W na IBM System / 370 (1966), S-ALGOL na PDP-11 (1979) |
Algol to język programowania stworzony pod koniec lat 50 . Pochodzący z projektu UNESCO pierwszy zwanego IAL ( Międzynarodowy algebraiczne Język ), jego nazwa jest akronimem dla algo rithmic l anguage (z ukłonem w gwiazdę beta Persei ). Jego celem było algorytmiczne opisanie problemów programistycznych. Głównymi różnicami projektowymi w porównaniu z Fortranem było użycie bloków oznaczonych przez BEGIN END, umożliwiających zmienne lokalne i tablice dynamiczne, a zwłaszcza rekurencję , koncepcje, które będą w dużej mierze podejmowane przez jego następców.
Język występuje w kilku wersjach Algol 58 , Algol 60 , Algol W . Jeśli chodzi o Algol 68 , chociaż ma podobną nazwę i został opracowany przez grupę IFIP, nie mówimy o wersji Algola, ale o nowym języku na bardzo różnych podstawach.
Pierwszy raport opisujący język pochodzi z 1958 roku i dlatego dał początek Algolowi 58. Przedstawiając poważne niejasności, został on ustabilizowany pod nazwą Algol 60, językiem szeroko przyjętym na uniwersytetach, który poczynił znaczący postęp w kompilacji.
Algol 60 został wydany w 1960 roku . John Backus i Peter Naur byli w komitecie, który go utworzył. Algol 60 zainspirował wiele języków. CAR Hoare powiedział o nim: „Jest to język daleko wyprzedzający swoje czasy, nie tylko udoskonalenie swoich poprzedników, ale także udoskonalenie prawie wszystkich swoich następców ”.
Oprócz pewnych sukcesów akademickich, Algol 60 będzie mało używany w programach komercyjnych. Wynika to z braku standardowych funkcji wejścia-wyjścia (poprawionych w 1965 r. I nadmiernie skorygowanych w Algol 68) oraz słabego dostosowania do programów zarządzania. Z naukowego punktu widzenia był mniej wydajny niż Fortran, a jednocześnie umożliwiał przetwarzanie a priori w tym języku.
Jego trzej główni potomkowie to:
Pozostała część tego artykułu jest poświęcona głównie językowi Algol 60 . Rzeczywiście, bez wzmianki o rocznika, termin Algol oznacza język Algol 60, podczas gdy Algol oznacza całą rodzinę.
Algol 60 jest typowym, proceduralnym językiem rekurencyjnym o strukturze blokowej . Pozwala na dynamiczne używanie typów, ale nie pozwala użytkownikowi definiować nowych. Algol 60 został zdefiniowany bez instrukcji wejścia / wyjścia; implementacja na danej maszynie z konieczności je zawierała, ale różniły się one od siebie. W reakcji na tę sytuację Algol 68 zawyżył je.
Algol 60 dopuszcza dwa typy przekazywania parametrów podczas wywołania procedury: przekazywanie przez wartość i „ przekazywanie przez nazwę ”, blisko podstawiania makr. Fragment z nazwy ma właściwości, słabo zrozumiałe z powodu pomylenia z fragmentem przez odniesienie , bardziej rozpowszechnione; dlatego został porzucony w następcach Algola 60. Na przykład ten tryb Algol 60 był krytykowany za niemożność napisania procedury zamieniającej dwie wartości, jeśli jeden z parametrów jest liczbą całkowitą, a drugi tablicą indeksowaną przez to samo liczba całkowita.
W odpowiedzi na brak formalizmu w projekcie Fortran, John Backus zaprojektował BNF dla Backus Normal Form, umożliwiając specyfikację Algol 58 . Ta metoda opisu języka została poprawiona i rozszerzona przez Petera Naura pod nazwą Backus Naur Form z tym samym akronimem określającym Algol 60, dzięki czemu została wyposażona w gramatykę niezależną od kontekstu .
Algol 68 został zdefiniowany jako język uniwersalny oparty na predefiniowanych typach i operatorach, nowych procedurach konstrukcji typów oraz nowych operatorach z możliwością przeciążania i rozszerzania predefiniowanych operatorów, całość pozwalająca na dostosowanie języka do każdej rodziny aplikacji.
Ponieważ gramatyka niezależna od kontekstu , jaką można zdefiniować za pomocą BNF, okazuje się gramatyką prostą, której rygor wymaga uzupełnienia o ograniczenia semantyczne w języku naturalnym, zbyt często niejednoznacznym, zespół Adriaana van Wijngaardena zachował system gramatyczny, znane jako gramatyki van Wijngaardena (druga forma) obejmujące składnię w odniesieniu do semantyki. Opierając się na hiper-gramatyce (dającej schematy reguł lub hiper-reguł) oddziałującej z metagramą (odzwierciedlającej teorię typów konstruowalnych), system gramatyczny tworzy nieskończoność semantycznie adekwatnych ograniczeń BNF. Poprawiony raport doskonale ilustruje adekwatność tego urządzenia, które definiuje semantycznie poprawną składnię. To całościowe podejście ułatwia „kwadratową” kompilację.
B5000 z Burroughs i jego następcy maszyny stos mające zostać zaprogramowany z rozszerzonym Algol; ich systemy operacyjne zostały napisane w tym Algolu od 1961 roku , torując drogę do pisania systemów operacyjnych w języku symbolicznym, podjętym przez Multics, a następnie Unix . Unisys Corporation kontynuuje sprzedaż maszyn wywodzących się z modelu B5000 obsługujących kilka rozszerzonych kompilatorów Algol.
CAE 510 zawiera kompilator Algol odpowiadające poziomowi II AFNOR FZ 65-010 standardzie , w tym również rekurencji i pozwalając słowa kluczowe w języku francuskim jak początek i koniec .
Programy Algol 60 są w dowolnym formacie, ze średnikiem jako głównym separatorem. Terminy wytłuszczone ( procedura itp.) Są słowami zastrzeżonymi w danym języku. Każda implementacja języka może używać własnej konwencji leksykalnej (np. „PROCEDURA”).
procedure Absmax(a) Taille:(n, m) Resultat:(y) Indices:(i, k); value n, m; array a; integer n, m, i, k; real y; comment Dans la procédure Absmax (a, n, m, y, i, k) le plus grand élément en valeur absolue de la matrice a de taille n par m est transféré à y et les indices de cet élément à i et k ; begin integer p, q; y := 0; i := k := 1; for p:=1 step 1 until n do for q:=1 step 1 until m do if abs(a[p, q]) > y then begin y := abs(a[p, q]); i := p; k := q; end end Absmax