АЛГОЛ 68C — императивный язык компьютерного программирования , диалект АЛГОЛ 68 , который был разработан Стивеном Р. Борном и Майклом Гаем для программирования Кембриджской алгебраической системы (CAMAL). Первоначальный компилятор был написан на Princeton Syntax Compiler (PSYCO, Эдгар Т. Айронс), который был реализован Дж. Х. Мэтьюманом в Кембридже.
Позднее АЛГОЛ 68C использовался в ОС CHAOS для компьютера CAP безопасности, основанного на возможностях, в Кембриджском университете в 1971 году. Другими ранними участниками были Эндрю Д. Биррелл [1] и Ян Уокер.
Последующая работа над компилятором была проделана после того, как Борн покинул Кембриджский университет в 1975 году. Была добавлена сборка мусора , и база кода все еще работает [ необходимы разъяснения ] на эмулируемой ОС/MVT с использованием Hercules .
Компилятор ALGOL 68C генерировал выходные данные в ZCODE , промежуточном языке на основе регистров, который затем можно было либо интерпретировать, либо скомпилировать в собственный исполняемый файл. Эта способность интерпретировать или компилировать ZCODE способствовала портированию ALGOL 68C на множество различных вычислительных платформ . Помимо компьютера CAP , компилятор был портирован на системы, включая Conversational Monitor System (CMS), TOPS-10 и Zilog Z80 .
Очень ранний предшественник этого компилятора использовался Гаем и Борном для написания первых программ Game of Life на PDP-7 с дисплеем DEC 340. [2] [3]
В различных выпусках Liverpool Software Gazette подробно описана реализация Z80. Для работы компилятору требовалось около 120 КБ памяти; следовательно, 64 КБ памяти Z80 на самом деле слишком малы для запуска компилятора. Поэтому программы ALGOL 68C для Z80 пришлось кросс-компилировать с более крупного компьютера CAP или мэйнфрейма IBM System/370 .
Стивен Борн впоследствии повторно использовал ALGOL 68 и предложения в общей оболочке Unix Bourne , но с изменением, удалением и заменой синтаксиса на (во избежание конфликта с утилитой od ) . if ~ then ~ else ~ fi
case ~ in ~ out ~ esac
for ~ while ~ do ~ od
in
out
od
done
После Кембриджа Борн провёл девять лет в Bell Labs с командой Unix версии 7 (Seventh Edition Unix). Помимо разработки оболочки Борна, он портировал ALGOL 68C в Unix на DEC PDP-11-45 и включил в свой отладчик Unix Advanced Debugger (adb) специальную опцию для получения обратной трассировки стека для программ, написанных на ALGOL 68C. Вот выдержка из страниц руководства Unix 7-го издания: [4]
ИМЯ adb — отладчикСИНОПСИС adb [-w] [объект [корфил]][...]КОМАНДЫ[...] $модификатор Разные команды. Доступные модификаторы являются: [...] обратная трассировка стека ALGOL 68. Если адрес задано, то это считается адресом текущий кадр (вместо r4). Если считать даются тогда только первые кадры счета печатаются.
Ниже приведена выборка некоторых примечательных расширений: [5]
*:=
и+:=
UPTO
и DOWNTO
в UNTIL
предложениях цикла;:=:=
)ANDF
и ORF
синтаксические THEF
элементы .ENVIRON
пункт и USING
пунктCODE
... EDOC
предложение - для встраивания ZCODEОтдельная компиляция в АЛГОЛе 68C осуществляется с использованием предложений ENVIRON
и USING
. Сохраняет ENVIRON
всю среду в том месте, где она появляется. Отдельный модуль, написанный начиная с USING
предложения, фактически вставляется в первый модуль в том месте, где ENVIRON
появляется это предложение.
ENVIRON
и USING
полезны для нисходящего стиля программирования, в отличие от восходящего стиля, подразумеваемого традиционными библиотечными механизмами.
Эти предложения являются своего рода инверсией #include в языке программирования C или import в Python . Цель этого ENVIRON
механизма — позволить разбить исходный код программы на части управляемого размера. Общий исходный файл необходимо проанализировать только один раз, в отличие от #include , найденного в языке программирования C , где включаемый файл необходимо анализировать для каждого исходного файла, который его включает.
ENVIRON
предложенияФайл с именем mylib.a68 :
НАЧИНАТЬ ИНТ дим = 3; # константа # INT число:= 120; # Переменная # ОКРУЖАЮЩАЯ СРЕДА ПРИМЕР 1; МАТРИЦА РЕЖИМА = [тусклый, тусклый]РЕАЛЬНЫЙ; # определение типа # МАТРИЦА м1; число:= ENVIRON EXAMPLE2; распечатать((число))КОНЕЦ
USING
предложенияФайл с именем usemylib.a68 :
ИСПОЛЬЗОВАНИЕ ПРИМЕРА 2 ИЗ «mylib»НАЧИНАТЬ МАТРИЦА м2; # только пример # печать((число)); # объявлено в mylib.a68 # print((2 УПБ м1)); # также объявлено в mylib.a68 # ПРИМЕР ОКРУЖАЮЩЕЙ СРЕДЫ 3; # ENVIRON могут быть вложенными # 666КОНЕЦ
MODE STRING
реализовано без FLEXТранслятор-компилятор Алгола 68C был доступен для PDP-10 , IBM System/360 и нескольких других компьютеров.
Для долгоживущих популяций, таких как эта, Конвей иногда использует компьютер PDP-7 с экраном, на котором он может наблюдать изменения [...] Программа была написана MJT Guy и SR Bourne. Без его помощи было бы трудно сделать некоторые открытия об игре.