Заинтересовал
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-14 17:38 (UTC)Смотреть надо сюда: http://www.softwarepreservation.org/projects/ALGOL/algol68impl
Проблема была, КМК, в сложности не столько компилятора, сколько рантайма. Полную реализацию, с арифметикой произвольной точности и пр. делать было или лень, или она в память не поместилась бы.
no subject
Date: 2021-07-14 20:25 (UTC)Не такой уж компактный компилятор: 27000 строк на Алголе-68. И еще 15000 в рантайме, плюс 6000 строк на Си.
Бинарник Hello_World получается около 300 килобайт:
$ cat hello.a68 PROGRAM hello CONTEXT VOID USE standard BEGIN print(("Hello, Algol-68!", newline)) END FINISH $ ca hello.a68 $ ./hello Hello, Algol-68! $ size ./hello text data bss dec hex filename 307993 6572 283024 597589 91e55 ./hello