2024-09-13

vak: (Default)
Была ли жизнь до динозавров? Что там вообще шевелилось? 😀 Я не имею в виду теоретически, а чем реально программисты пользовались.

Жизнь была, хотя и в странных формах. С 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 factmain.mad factfunc.mad 
$ ./factmain
6

N= 6N FACTORIAL= 720
10

N= 10N FACTORIAL= 3628800
Работает в лучшем виде. MAD транслируется в Си, который дальше компилируется в нативный бинарник.

Исторический факт: известная Элиза, первая программа, общавшаяся на естественном языке, была изначально написана на языке SLIP (варианте Лиспа), который сам был написан на MAD. Исходный код той Элизы: 1966_01_CACM_article_Eliza_script.txt.
vak: (Default)
Нет, не юникс. 😀 Это MCP, то есть Master Control Program для компьютеров Burroughs серии B5500. Разработка 1961 года. Причём трижды пионер: вдобавок первая многопроцессорная система, а также первая коммерческая реализация виртуальной памяти.

Всё было написано на языке ESPOL, вариации на тему Алгола-60. Описание языка: 1032638_B5500_ESPOL_RefMan_196710.pdf.

Исходники MCP и компиляторов доступны для скачивания (Burroughs B5500 Mark XIII Release ZIP Archive), хотя с суровой лицензией. Распаковываете ZIP архив, а в нём исходные тексты:
  • ALGOL (885k) - B-5700 Algol compiler, Mark XIII.0, July 15, 1971
  • BASIC (453k) - B5500 Basic compiler, Mark XII.2, 04/15/71
  • COBOL (2.0M) - Cobol compiler, XIII.0, 7/15/71
  • COBOL68 (1.7M) - Lasciate ogni speranza voi ch entrate (Dante)
  • DC1000 (537k) - DC-1000 data communication system
  • ESPOL (501k) - B-5700 Espol compiler, Mark XIII.0, July 15, 1971
  • FORTRAN (592k) - Fortran compiler, XIII.0, 07/15/71
  • INTRINS (1.2M) - Intrinsics, Mark, XIII.0, 07/15/71
  • MCP (2.0M) - B5700, MCP Mark XIII.0, 07/15/71
  • NDL (1.1M) - B-5700 Network Definition Language compiler, Mark XII.0, March 26, 1971
  • TSPOL (863k) - B-5700 Tspol compiler, Mark XIII.0, July 15, 1971
  • XALGOL (872k) - B-5700 Xalgol compiler, Mark XIII.0, July 15, 1971