Заинтересовал
spamsink меня алголами, я потыркался и вытащил на свет божий компилятор Algol W. Это исторический язык, разработанный легендарным Никлаусом Виртом в 1966 году как продолжение Алгола-60. Язык вполне развитый и имевший практическую полезность. Но в титанической борьбе Вирта с ван Вейнгаарденом победил Алгол-68, крайне сложный и бестолковый. На нём линия Алгола сникла и ушла в небытие.
После этого Вирт бросил Алгол и начал делать Паскаль. Дальнейшую историю вы знаете.
Изначальный компилятор Algol W был написан на ассемблере IBM/360. Исходники сохранились, но мало кого нынче интересуют. Нынешний компилятор Algol W был создан девять лет назад Глином Вебстером. Написан он в основном на языке OCaml и немного Си. Компилятор преобразует исходник на Алголе W в Си, и дальше компилирует его посредством GCC. Причём CLANG не годится, поскольку используются вложенные процедуры, не реализованные в кланге.
Из нетривиальных примеров на языке Algol W есть игра Wumpus: wumpus.alw
После этого Вирт бросил Алгол и начал делать Паскаль. Дальнейшую историю вы знаете.
Изначальный компилятор Algol W был написан на ассемблере IBM/360. Исходники сохранились, но мало кого нынче интересуют. Нынешний компилятор Algol W был создан девять лет назад Глином Вебстером. Написан он в основном на языке OCaml и немного Си. Компилятор преобразует исходник на Алголе W в Си, и дальше компилирует его посредством GCC. Причём CLANG не годится, поскольку используются вложенные процедуры, не реализованные в кланге.
Из нетривиальных примеров на языке Algol W есть игра Wumpus: wumpus.alw

no subject
Date: 2021-07-15 02:05 (UTC)$ cat foo.alw begin procedure foo; begin a := b + c end; integer a, b, c; b := 3; c := 5; foo; write(a) end $ awe foo.alw $ ./foo 8no subject
Date: 2021-07-15 04:01 (UTC)begin procedure foo; begin a := b + c end; integer a, b, c; b := 3; c := 5; begin integer a, b, c; b := 30; c := 50; foo; write(a) end; foo; write(a) endИли ты будешь сразу смеяться, или после того, как я тебе скажу, что делает marst и бэсмовские компиляторы.
no subject
Date: 2021-07-15 04:56 (UTC)$ ./foo2 32705 8no subject
Date: 2021-07-15 06:22 (UTC)no subject
Date: 2021-07-15 06:58 (UTC)no subject
Date: 2021-07-15 07:06 (UTC)no subject
Date: 2021-07-15 16:12 (UTC)no subject
Date: 2021-07-15 05:05 (UTC)$ cat foo2.a68 PROGRAM foo2 CONTEXT VOID USE standard BEGIN INT a, b, c; PROC foo = VOID: BEGIN a := b + c END; b := 3; c := 5; BEGIN INT a, b, c; b := 30; c := 50; foo; print((a, newline)) END; foo; print((a, newline)) END FINISH $ ./foo2 +0 +8