Была ли жизнь до Алгола?
2024-09-13 16:14Была ли жизнь до динозавров? Что там вообще шевелилось? 😀 Я не имею в виду теоретически, а чем реально программисты пользовались.
Жизнь была, хотя и в странных формах. С 1959 года существовал MAD, то есть Michigan Algorithm Decoder. Вполне развитый для того времени язык программирования. К примеру, на MAD был написан MAIL (ставший впоследствии /usr/bin/mailx) и RUNOFF (ставший потом nroff/troff). Описание языка: MAD-manual.pdf.
Для иллюстрации вот рекурсивная функция вычисления факториала. Конструкции языка многословные, зато суть сразу понятные. Имена функций, в отличие от переменных, обязаны заканчиваться точкой.
Исторический факт: известная Элиза, первая программа, общавшаяся на естественном языке, была изначально написана на языке SLIP (варианте Лиспа), который сам был написан на MAD. Исходный код той Элизы: 1966_01_CACM_article_Eliza_script.txt.
Жизнь была, хотя и в странных формах. С 1959 года существовал MAD, то есть Michigan Algorithm Decoder. Вполне развитый для того времени язык программирования. К примеру, на MAD был написан MAIL (ставший впоследствии /usr/bin/mailx) и RUNOFF (ставший потом nroff/troff). Описание языка: MAD-manual.pdf.
Для иллюстрации вот рекурсивная функция вычисления факториала. Конструкции языка многословные, зато суть сразу понятные. Имена функций, в отличие от переменных, обязаны заканчиваться точкой.
EXTERNAL FUNCTION (N)
NORMAL MODE IS INTEGER
ENTRY TO FACT.
WHENEVER N .E. 0, FUNCTION RETURN 1
SAVE RETURN
SAVE DATA N
T1 = FACT.(N-1)
RESTORE DATA N
RESTORE RETURN
FUNCTION RETURN T1*N
END OF FUNCTIONНесколько лет назад известный товарищ Эрик Рэймонд воссоздал компилятор MAD. Сайт проекта: gitlab.com/esr/mad. Попробуем запустить вышеприведённый факториал. Добавим главную вызывающую процедуру:
DIMENSION LIST(100)
NORMAL MODE IS INTEGER
SET LIST TO LIST
BACK READ FORMAT IN, NR
PRINT FORMAT OUT, NR, FACT.(NR)
TRANSFER TO BACK
VECTOR VALUES IN = $I2*$
VECTOR VALUES OUT = $4H0N= I3,14HN FACTORIAL= I11*$
END OF PROGRAMКомпилируем, запускаем:Работает в лучшем виде. MAD транслируется в Си, который дальше компилируется в нативный бинарник.$ mad factmain.mad factfunc.mad
$ ./factmain
6
N= 6N FACTORIAL= 720
10
N= 10N FACTORIAL= 3628800
Исторический факт: известная Элиза, первая программа, общавшаяся на естественном языке, была изначально написана на языке SLIP (варианте Лиспа), который сам был написан на MAD. Исходный код той Элизы: 1966_01_CACM_article_Eliza_script.txt.
