vak: (Default)
[personal profile] vak
Заинтересовал [personal profile] spamsink меня алголами, я потыркался и вытащил на свет божий компилятор Algol W. Это исторический язык, разработанный легендарным Никлаусом Виртом в 1966 году как продолжение Алгола-60. Язык вполне развитый и имевший практическую полезность. Но в титанической борьбе Вирта с ван Вейнгаарденом победил Алгол-68, крайне сложный и бестолковый. На нём линия Алгола сникла и ушла в небытие.

После этого Вирт бросил Алгол и начал делать Паскаль. Дальнейшую историю вы знаете.

Изначальный компилятор Algol W был написан на ассемблере IBM/360. Исходники сохранились, но мало кого нынче интересуют. Нынешний компилятор Algol W был создан девять лет назад Глином Вебстером. Написан он в основном на языке OCaml и немного Си. Компилятор преобразует исходник на Алголе W в Си, и дальше компилирует его посредством GCC. Причём CLANG не годится, поскольку используются вложенные процедуры, не реализованные в кланге.

Из нетривиальных примеров на языке Algol W есть игра Wumpus: wumpus.alw

Date: 2021-07-15 06:22 (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Всё честно. Просто тела процедур парсятся не сразу, а в конце объявлений блока. Поэтому foo работает с переменными верхнего уровня, откуда бы она ни вызывалась.

Date: 2021-07-15 07:06 (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Но печатается-то локальная a!