Эта статья может нуждаться в реорганизации для соответствия правилам Википедии по макету . ( Июль 2016 ) |
This article needs additional citations for verification. (August 2012) |
Разработчик(и) | Стивен Борн , Майкл Гай , Эндрю Д. Биррелл, Ян Уокер, Крис Чейни и др. |
---|---|
Первоначальный выпуск | около 1970 (1970) |
Стабильный релиз | 1.3039 / 3 марта 2013 г. (2013-03-03) |
Написано в | АЛГОЛ 68 |
Операционная система | IBM 360 , 370 и т. д., мэйнфреймы (или эмуляции) под управлением MVT или MVS |
Тип | Составитель , переводчик |
Веб-сайт | bitbucket.org/algol68c/dl |
ALGOL 68C — императивный язык программирования , диалект ALGOL 68 , разработанный Стивеном Р. Борном и Майклом Гаем для программирования Cambridge Algebra System (CAMAL). Первоначальный компилятор был написан в Princeton Syntax Compiler (PSYCO, Эдгара Т. Айронса), который был реализован Дж. Х. Мэтьюменом в Кембридже.
Позднее ALGOL 68C использовался для ОС CHAOS для компьютера безопасности на основе возможностей CAP в Кембриджском университете в 1971 году. Другими ранними участниками были Эндрю Д. Биррелл [1] и Ян Уокер.
Последующая работа над компилятором была проделана после того, как Борн покинул Кембриджский университет в 1975 году. Была добавлена сборка мусора , а кодовая база все еще работает [ требуется пояснение ] на эмулируемой ОС/MVT с использованием Hercules .
Компилятор ALGOL 68C генерировал вывод в ZCODE , промежуточном языке на основе регистров, который затем можно было либо интерпретировать, либо компилировать в собственный исполняемый файл. Эта способность интерпретировать или компилировать ZCODE способствовала переносу ALGOL 68C на множество различных вычислительных платформ . Помимо компьютера CAP , компилятор был перенесен на такие системы, как Conversational Monitor System (CMS), TOPS-10 и Zilog Z80 .
Самый ранний предшественник этого компилятора использовался Гаем и Борном для написания первых программ «Игры жизни» на PDP-7 с дисплеем DEC 340. [2] [3]
Различные выпуски Liverpool Software Gazette подробно описывают реализацию Z80. Для работы компилятора требовалось около 120 КБ памяти; следовательно, 64 КБ памяти Z80 на самом деле слишком мало для запуска компилятора. Поэтому программы ALGOL 68C для Z80 приходилось кросс-компилировать с более крупного компьютера CAP или мэйнфрейма IBM System/370 .
Стивен Борн впоследствии повторно использовал предложения ALGOL 68 и в общей оболочке Bourne для Unix , но с измененным, удаленным и замененным на синтаксис (чтобы избежать конфликта с утилитой od ). if ~ then ~ else ~ fi
case ~ in ~ out ~ esac
for ~ while ~ do ~ od
in
out
od
done
После Кембриджа Борн провел девять лет в Bell Labs с командой Version 7 Unix (Seventh Edition Unix). Помимо разработки оболочки Bourne, он портировал 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
пункт - для встраивания ZCODEENVIRON
иUSING
Раздельная компиляция в ALGOL 68C выполняется с использованием предложений ENVIRON
и USING
. ENVIRON
Сохраняет полную среду в точке ее появления. Отдельный модуль, написанный с USING
предложения, фактически вставляется в первый модуль в точке ENVIRON
появления предложения.
ENVIRON
и USING
полезны для программирования сверху вниз , в отличие от восходящего стиля, подразумеваемого традиционными библиотечными механизмами.
Эти предложения являются своего рода инверсией #include , найденного в языке программирования C , или import, найденного в Python . Цель механизма ENVIRON
— позволить разбить исходный код программы на части управляемого размера. Необходимо только один раз проанализировать общий исходный файл, в отличие от #include, найденного в языке программирования C , где файл include должен быть проанализирован для каждого исходного файла, который его включает.
ENVIRON
пунктаФайл с именем mylib.a68 :
НАЧИНАТЬ INT dim = 3; # константа # INT число := 120; # переменная # ПРИМЕР ОКРУЖЕНИЯ1; MODE MATRIX = [dim, dim]REAL; # определение типа # МАТРИЦА m1; число := ENVIRON EXAMPLE2; print((число))КОНЕЦ
USING
пунктаФайл с именем usemylib.a68 :
ИСПОЛЬЗОВАНИЕ ПРИМЕРА 2 ИЗ "mylib"НАЧИНАТЬ МАТРИЦА m2; # только пример # print((число)); # объявлено в mylib.a68 # print((2 UPB m1)); # также объявлено в mylib.a68 # ПРИМЕР ОКРУЖЕНИЯ3; # ОКРУЖЕНИЯ могут быть вложенными # 666КОНЕЦ
MODE STRING
реализовано без FLEXТранслятор-компилятор для ALGOL 68C был доступен для PDP-10 , IBM System/360 и нескольких других компьютеров.
Для долгоживущих популяций, таких как эта, Конвей иногда использует компьютер PDP-7 с экраном, на котором он может наблюдать изменения [...] Программа была написана MJT Guy и SR Bourne. Без ее помощи было бы трудно сделать некоторые открытия об игре.