Перефразируя Скалигера-Прокоповича
Jul. 12th, 2021 03:23 pmВместо эпиграфа:
Будучи созданным комитетом лиц из академической среды, язык Алгол-60, по выражению википедии, в остальном довольно разумно организованный, содержит особенности, примечательные удивительным сочетанием полной практической бесполезности с чрезвычайной сложностью и неэффективностью реализации.
Вот одна из этих особенностей, о которой я недавно узнал. Полная реализация языка в соответствии с "Пересмотренным сообщением об Алголе-60" от 1962 года должна была компилировать следующую программу (детали синтаксиса оператора вывода могли варьироваться):
Эта программа должна была успешно выполняться и печатать что-то типа "value 3.00000 label 3".
(Для тех, кто не любитель птичьих языков: цифра 3 в конструкции Q(3) в этой программе означает не пойми что - то ли число, то ли метку - и компилятор этого не знает, пока не просмотрит всю программу. Когда он это узнает, то выясняется, что так можно было, и нужно порождать выполняемый код.)
Большинство западных авторов компиляторов решило на это дело забить, и или просто не допускало числовые метки, или диагностировало в этом случае какую-нибудь ошибку, но не таковы были советские программисты.
Алгол БЭСМ-6 имени В. М. Курочкина компилирует и выполняет программу правильно.
К чести стандартизаторов языка, это безумие было в конце концов устранено в "Модифицированном сообщении об Алголе-60" к середине 1970-х годов путём ликвидации меток, обозначаемых числами.
Если в мучительские осужден кто руки,
Ждет бедная голова печали и муки,
Не вели томить его делом кузниц трудных,
Не посылать в тяжкие работы мест рудных:
Пусть компилятор делает – то одно довлеет,
Всех мук роды сей един труд в себе имеет.
Будучи созданным комитетом лиц из академической среды, язык Алгол-60, по выражению википедии, в остальном довольно разумно организованный, содержит особенности, примечательные удивительным сочетанием полной практической бесполезности с чрезвычайной сложностью и неэффективностью реализации.
Вот одна из этих особенностей, о которой я недавно узнал. Полная реализация языка в соответствии с "Пересмотренным сообщением об Алголе-60" от 1962 года должна была компилировать следующую программу (детали синтаксиса оператора вывода могли варьироваться):
begin
procedure call(Q); procedure Q;
begin Q(3); end;
procedure jump(A); label A;
begin goto A end;
procedure out(B); real B;
begin print(` value', b) end;
call(out);
if true then
call(jump)
else
3: print(` label 3')
end
Эта программа должна была успешно выполняться и печатать что-то типа "value 3.00000 label 3".
(Для тех, кто не любитель птичьих языков: цифра 3 в конструкции Q(3) в этой программе означает не пойми что - то ли число, то ли метку - и компилятор этого не знает, пока не просмотрит всю программу. Когда он это узнает, то выясняется, что так можно было, и нужно порождать выполняемый код.)
Большинство западных авторов компиляторов решило на это дело забить, и или просто не допускало числовые метки, или диагностировало в этом случае какую-нибудь ошибку, но не таковы были советские программисты.
Алгол БЭСМ-6 имени В. М. Курочкина компилирует и выполняет программу правильно.
К чести стандартизаторов языка, это безумие было в конце концов устранено в "Модифицированном сообщении об Алголе-60" к середине 1970-х годов путём ликвидации меток, обозначаемых числами.