Czym jest ALGOL i dlaczego warto go poznać
ALGOL (Algorithmic Language) to język, bez którego nie istniałby żaden z języków, których dziś używasz. C, Pascal, Java, C#, JavaScript — wszystkie one noszą w sobie DNA ALGOL-a. To nie przesada: ALGOL wprowadził bloki kodu, zmienne lokalne, rekurencję, instrukcje warunkowe w formie, którą znamy do dziś i wiele innych koncepcji, które uważamy za “oczywiste”.
Dziś nikt nie pisze produkcyjnego kodu w ALGOL-u, ale jego znajomość to coś jak zrozumienie łaciny dla lekarza — nie będziesz jej używać na co dzień, ale bez niej nie zrozumiesz, skąd się wzięły narzędzia, z których korzystasz. Każdy programista, który chce rozumieć ewolucję swojej dziedziny, powinien wiedzieć, czym był ALGOL i dlaczego był tak ważny.
ALGOL to też fascynująca lekcja o tym, jak komitet projektuje język programowania — z wszystkimi tego zaletami i dramatycznymi wadami. To historia innowacji, ambicji i politycznych sporów, które ukształtowały informatykę na dekady.
Krótka historia i ewolucja
ALGOL narodził się w 1958 roku jako ALGOL 58, stworzony przez wspólny komitet europejskich i amerykańskich informatyków. Celem był uniwersalny język do opisywania algorytmów — coś, co mogłoby zastąpić chaos wczesnych języków jak FORTRAN, które były silnie zależne od konkretnej maszyny. ALGOL 58 był ambitny, ale niedopracowany.
Prawdziwy przełom nadszedł z ALGOL 60. Ta wersja, opublikowana w 1960 roku z udziałem m.in. Edsgera Dijkstry i Tony’ego Hoare’a, była rewolucyjna. Wprowadziła bloki begin/end, zmienne lokalne o zasięgu leksykalnym, rekurencję i formalną definicję składni w notacji BNF (Backus-Naur Form). Raport o ALGOL 60 to jeden z najważniejszych dokumentów w historii informatyki.
ALGOL 68 miał być “ostateczną” wersją — językiem tak doskonałym, że nie trzeba będzie niczego więcej. Niestety, okazał się tak skomplikowany, że mało kto go rozumiał, a jeszcze mniej osób potrafiło napisać kompilator. To klasyczny przykład overengineeringu. Mimo to, ALGOL 68 wprowadził koncepcje (jak ortogonalność typów), które wpłynęły na późniejsze języki. Po ALGOL 68 język jako taki przestał się rozwijać, ale jego duch żyje dalej.
Kluczowe cechy i filozofia
ALGOL 60 był pierwszym językiem, który traktował składnię jako coś, co należy formalnie zdefiniować. Notacja BNF, użyta do opisu gramatyki ALGOL-a, stała się standardem w projektowaniu języków do dziś. Bez tego kroku nie mielibyśmy precyzyjnych specyfikacji C, Javy czy Rusta.
Bloki kodu to kolejna fundamentalna innowacja. W ALGOL-u możesz zadeklarować zmienne wewnątrz bloku begin/end, i te zmienne istnieją tylko w tym bloku. To brzmi trywialnie w 2026 roku, ale w latach 60. była to rewolucja — FORTRAN tego nie miał. Zasięg leksykalny (lexical scoping) oznaczał, że możesz rozumieć kod, patrząc na jego strukturę, bez śledzenia globalnego stanu.
ALGOL wspierał rekurencję jako jeden z pierwszych języków mainstreamowych. Mógłbyś powiedzieć “no i co z tego?”, ale w tamtych czasach rekurencja była egzotyczną koncepcją akademicką. ALGOL udowodnił, że może być praktycznym narzędziem. Typowanie w ALGOL-u było statyczne, ale proste — głównie integer, real, boolean i tablice.
Filozofia ALGOL-a to “język do opisywania algorytmów” — nie do konkretnego sprzętu, nie do konkretnego zastosowania, ale do wyrażania idei obliczeniowych w czystej formie. Ta idea — że język programowania powinien służyć myśleniu, nie tylko wykonywaniu — wpłynęła na każdą kolejną generację języków.
Gdzie ALGOL sprawdza się najlepiej
ALGOL był używany przede wszystkim w środowisku akademickim i badawczym. W latach 60. i 70. był standardowym językiem do publikowania algorytmów w czasopismach naukowych — sekcja “Algorithms” w Communications of the ACM publikowała kod w ALGOL-u. Wiele klasycznych algorytmów (sortowanie, przeszukiwanie, metody numeryczne) zostało po raz pierwszy opisanych właśnie w ALGOL-u.
Niektóre europejskie instytucje naukowe i rządowe używały ALGOL-a do obliczeń inżynierskich i naukowych dłużej niż ich amerykańskie odpowiedniki, które preferowały FORTRAN-a. ALGOL 68 znalazł niszowe zastosowania w systemach obronnych w Wielkiej Brytanii.
Dziś ALGOL nie ma praktycznych zastosowań produkcyjnych, ale jego wpływ jest wszędzie. Jeśli piszesz if/else, for, while, używasz bloków kodu albo wywołujesz funkcję rekurencyjnie — używasz koncepcji, które ALGOL spopularyzował.
Jak wygląda kod w ALGOL-u
begin
integer i, suma;
suma := 0;
for i := 1 step 1 until 100 do
suma := suma + i;
print(suma)
end
Prosty przykład sumowania liczb od 1 do 100. Zwróć uwagę na begin/end zamiast nawiasów klamrowych, := jako operator przypisania i for ... step ... until ... do — składnię, która była inspiracją dla wielu późniejszych języków.
procedure silnia(n);
value n;
integer n;
begin
if n = 0 then
silnia := 1
else
silnia := n * silnia(n - 1)
end;
begin
integer wynik;
wynik := silnia(10);
print(wynik)
end
Rekurencyjna silnia w ALGOL 60. Procedura zwraca wartość przez przypisanie do swojej nazwy — konwencja, która była typowa dla wczesnych języków. Deklaracja value n oznacza, że parametr jest przekazywany przez wartość.
Ekosystem i narzędzia
ALGOL w swoim czasie miał kilka implementacji: Burroughs ALGOL (używany na mainframe’ach Burroughs), Elliott ALGOL (brytyjski), Amsterdam Compiler Kit ALGOL 60 i wiele innych. Żadna z nich nie była “oficjalna” — ALGOL był definiowany przez specyfikację, nie przez referencyjną implementację, co samo w sobie było innowacją.
Dziś możesz eksperymentować z ALGOL-em za pomocą emulatorów i rekonstrukcji. MARST to współczesny translator ALGOL 60 na C, który pozwala kompilować i uruchamiać kod ALGOL 60 na nowoczesnych systemach. Istnieją też implementacje ALGOL 68, w tym algol68g — otwartoźródłowy kompilator, który jest wciąż utrzymywany.
Społeczność? Praktycznie nie istnieje w sensie aktywnych użytkowników. Ale historycy informatyki, badacze języków programowania i entuzjaści retro-computingu od czasu do czasu wracają do ALGOL-a. To bardziej muzeum niż warsztat, ale muzeum niezwykle pouczające.
Mocne i słabe strony
Mocne strony ALGOL-a to jego wpływ i elegancja koncepcji. Formalna specyfikacja składni, bloki leksykalne, rekurencja, ortogonalność — to wszystko były idee wyprzedzające swoje czasy. ALGOL 60 był tak dobrze zaprojektowany, że Dijkstra nazwał go “cudem” i twierdził, że był lepszy od wielu języków, które go zastąpiły.
Słabe strony to przede wszystkim brak standardowych mechanizmów wejścia/wyjścia (tak, ALGOL 60 nie miał standardowego I/O — każda implementacja robiła to po swojemu), skomplikowane przekazywanie parametrów (call by name okazało się problematyczne) i — w przypadku ALGOL 68 — absurdalna złożoność. ALGOL 68 miał tak skomplikowaną specyfikację, że nawet członkowie komitetu mieli problemy z jej zrozumieniem. To lekcja o tym, że za dużo abstrakcji i za mało pragmatyzmu zabija język.
Podsumowanie
ALGOL to język, który powinien znać każdy programista — nie po to, żeby w nim pisać, ale żeby zrozumieć, skąd się wzięły narzędzia, których używa na co dzień. To fundament, na którym zbudowano całą nowoczesną informatykę. Jeśli interesuje cię historia technologii, teoria języków programowania albo po prostu chcesz być bardziej świadomym developerem — poświęć weekend na przeczytanie raportu ALGOL 60 i napisanie kilku programów w MARST.
ALGOL udowadnia, że wpływ języka nie mierzy się liczbą użytkowników ani linii kodu w produkcji. ALGOL “przegrał” z FORTRAN-em i COBOL-em w sensie komercyjnym, ale wygrał w sensie intelektualnym — jego idee żyją w każdym współczesnym języku. I to jest dziedzictwo, którego żaden “popularny” język nie może mu odebrać.

