Была ли жизнь до Алгола?
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.

no subject
Date: 2024-09-14 00:17 (UTC)no subject
Date: 2024-09-14 00:25 (UTC)no subject
Date: 2024-09-14 01:46 (UTC)no subject
Date: 2024-09-14 01:57 (UTC)no subject
Date: 2024-09-14 05:52 (UTC)Хорошо ещё, что не надо было адрес возврата явно сохранять.
Зачем в данном случае сохранять ячейку для возврата значения, неясно.
no subject
Date: 2024-09-14 06:59 (UTC)no subject
Date: 2024-09-14 07:01 (UTC)Языки-то, конечно, были. Фортран, например. На нём что угодно можно было написать (особенно если немножко конструкций навалять на ассемблере).
no subject
Date: 2024-09-14 07:05 (UTC)no subject
Date: 2024-09-14 07:11 (UTC)no subject
Date: 2024-09-14 18:39 (UTC)no subject
Date: 2024-09-14 20:26 (UTC)- можно написать всё;
- каждая строка фортрана мапится на несколько команд ассемблера, никакого смешивания и перехлёста;
- в результате можно на ассемблере навалять несколько конструкций - и можно всё - case statement, while, filter, foreach, etc;
- нужна хорошая библиотека для строк (что мы и сделали);
- система месседжей, и система контроля событий ("дёрни меня, когда давление станет выше стольки-то при стольких-то оборотах" - это пишется в виде логической формулы, в DNF)...
- поменьше сложностей, побольше доступности для простых инженеров. У нас приходили люди, и врубались быстро (а кто не врубался, тех я не держал).
Короче, система реального времени, многозадачная, с горячим рестартом (бекап в "своп спейс") - на буровой же электричество вырубают пару раз в день.
Мне иногда кажется, что в этом было что-то уникальное. Архитектура сдёрнута с Дейкстровской системы THE.