Jump to content

АЛГОЛ 68

(Перенаправлено с Алгола 68 )

АЛГОЛ 68
Пересмотренный отчет об алгоритмическом языке - алгоритм 68. Под редакцией: А. ван Вейнгаардена и др., сентябрь 1973 г. [1]
Парадигмы Мультипарадигма : одновременная , императивная
Семья АЛГОЛ
Разработано А. ван Вейнгаарден , Б. Дж. Майу , Дж. Э. Пек и ЧА Костер и др.
Впервые появился Итоговый отчет: 1968 г .; 56 лет назад ( 1968 ) р0
Стабильная версия
Алгол 68/РР / Пересмотренный отчет: 1973 г .; 51 год назад ( 1973 ) р1
Дисциплина набора текста статический , прочный , безопасный , структурный
Объем Лексический
Основные реализации
ALGOL 68C , Algol 68 Genie (recent), ALGOL 68-R , ALGOL 68RS , ALGOL 68S , FLACC , Алгол 68 Ленинград/Leningrad Unit , Odra ALGOL 68
Диалекты
АЛГОЛ 68/FR (Окончательный отчет) р0 )
Под влиянием
АЛГОЛ 60 , АЛГОЛ И
Под влиянием
С , [3] [5] С++ , [6] Оболочка Bourne , KornShell , Bash , Steelman , Ada , Python , [7] Seed7 , Мэри , S3

АЛГОЛ 68 (сокращение от Algorithmic Language 1968 ) — это императивный язык программирования , который был задуман как преемник языка программирования АЛГОЛ 60 , разработанный с целью гораздо более широкой сферы применения и более строго определенного синтаксиса и семантики.

Сложность определения языка, которое занимает несколько сотен страниц, заполненных нестандартной терминологией, затруднила реализацию компилятора , и было сказано, что у него «нет реализаций и нет пользователей». Это было правдой лишь отчасти; АЛГОЛ 68 действительно нашел применение на нескольких нишевых рынках, особенно в Соединенном Королевстве , где он был популярен на машинах International Computers Limited (ICL), а также в учебных целях. За пределами этих областей использование было относительно ограниченным.

Тем не менее, вклад АЛГОЛа 68 в область информатики был глубоким, обширным и устойчивым, хотя многие из этих вкладов были публично отмечены только тогда, когда они вновь появились в впоследствии разработанных языках программирования. Многие языки были разработаны специально в ответ на воспринимаемую сложность языка, наиболее заметным из которых был Pascal , или представляли собой повторные реализации для конкретных ролей, как Ada .

Многие языки 1970-х годов создавались именно по АЛГОЛу 68, отбирая некоторые функции и отказываясь от других, которые считались слишком сложными или выходящими за рамки определенных функций. Среди них — язык C , на который непосредственное влияние оказал АЛГОЛ 68, особенно его строгая типизация и структуры. Большинство современных языков, по крайней мере, часть своего синтаксиса восходят к C или Pascal и, таким образом, прямо или косвенно к ALGOL 68.

Возможности ALGOL 68 включают синтаксис на основе выражений, объявленные пользователем типы и структуры/объединения тегов, эталонную модель переменных и ссылочных параметров, нарезку строк, массивов и матриц, а также параллелизм.

АЛГОЛ 68 был разработан Международной федерации обработки информации (IFIP) Рабочей группой 2.1 IFIP по алгоритмическим языкам и исчислениям. 20 декабря 1968 года этот язык был официально принят группой, а затем одобрен для публикации Генеральной Ассамблеей ИФИП.

Алгол 68 был определен с использованием формализма , двухуровневой формальной грамматики , изобретенной Адрианом ван Вейнгаарденом . Грамматики Ван Вейнгаардена используют контекстно-свободную грамматику для создания бесконечного набора продуктов, которые распознают конкретную программу ALGOL 68; в частности, они способны выражать требования, которые во многих других технических стандартах языков программирования называются семантикой и должны быть выражены в склонной к неоднозначности прозе естественного языка, а затем реализованы в компиляторах в виде специального кода, прикрепленного к синтаксическому анализатору формального языка. .

АЛГОЛ 68 был первым (и, возможно, одним из последних) основных языков, для которого было дано полное формальное определение до его реализации.

ЦДХ Костер [8]

Основные цели и принципы проектирования АЛГОЛА 68:

  1. Полнота и ясность описания [9]
  2. Ортогональность дизайна [10]
  3. Безопасность [11]
  4. Эффективность: [12]
    • Проверка статического режима
    • Независимый от режима анализ
    • Самостоятельное составление
    • Оптимизация цикла
    • Представления – в минимальных и больших наборах символов.

Алгол 68 подвергался критике, особенно со стороны некоторых членов его комитета по проектированию, таких как К. А. Хоар и Эдсгер Дейкстра , за то, что он отказался от простоты АЛГОЛа 60 , стал средством реализации сложных или слишком общих идей и мало что сделал для выполнения . задачи автора компилятора проще, в отличие от нарочито простых современников (и конкурентов), таких как C , S-algol и Pascal .

В 1970 году АЛГОЛ 68-R стал первым работающим компилятором АЛГОЛА 68.

В версии 1973 года некоторые функции, такие как обработка , гоммы [13] и формальные границы — были опущены. [14] См. Язык непересмотренного отчета. р0

Хотя европейские оборонные ведомства (в Великобритании Royal Signals and Radar Estate (RSRE)) продвигали использование ALGOL 68 из-за его ожидаемых преимуществ в области безопасности, американская сторона альянса НАТО решила разработать другой проект, язык Ada , сделав его использование обязательным. по оборонным контрактам США.

АЛГОЛ 68 также имел заметное влияние в Советском Союзе , подробности о котором можно найти в статье Андрея Терехова 2014 года: «АЛГОЛ 68 и его влияние на СССР и российское программирование». [15] and "Алгол 68 и его влияние на программирование в СССР и России". [16]

Стив Борн , входивший в комитет по пересмотру ALGOL 68, перенес некоторые его идеи в свою оболочку Bourne (и, таким образом, в потомки оболочек Unix, такие как Bash ) и в C (и, следовательно, в потомки, такие как C++ ).

Полную историю проекта можно найти в CH Lindsey книге «История Алгола 68» . [17] [18]

Полное описание языка см. в разделе «Программирование на ALGOL 68 Made Easy». [19] Доктор Сиан Маунтбеттен, или «Изучение джинна Алгола 68» [20] Марселя ван дер Веера, который включает пересмотренный отчет.

Происхождение

[ редактировать ]

АЛГОЛ 68, как следует из названия, является продолжением языка АЛГОЛ , который был впервые формализован в 1960 году. В том же году Международная федерация обработки информации (IFIP) сформировала и основала Рабочую группу по АЛГОЛу, или WG2.1. Эта группа выпустила обновленную спецификацию АЛГОЛ 60 в Риме в апреле 1962 года. На последующем собрании в марте 1964 года было решено, что группа должна начать работу над двумя последующими стандартами, АЛГОЛ X , которые будут переопределением языка. с некоторыми дополнениями и АЛГОЛ Y , который имел бы возможность модифицировать свои собственные программы в стиле языка LISP . [21]

Процесс определения

[ редактировать ]

Первое собрание группы ALGOL X состоялось в Принстонском университете в мае 1965 года. В отчете о собрании отмечались две широко поддерживаемые темы: введение строгой типизации и интерес к концепциям Эйлера «деревьев» или «списков» для работы с коллекциями. [22]

На второй встрече в октябре во Франции были представлены три официальных предложения: Никлауса Вирта вместе АЛГОЛ W с комментариями о структурах записей КАР (Тони) Хоара , аналогичный язык Герхарда Зигмюллера и статья Адриана ван Вейнгаардена о « Ортогональная конструкция и описание формального языка». Последний, написанный почти неразборчивой «W-грамматикой», оказался решающим сдвигом в эволюции языка. Встреча завершилась соглашением о том, что ван Вейнгаарден перепишет представление Вирта/Хора, используя свою W-грамматику. [22]

Эта, казалось бы, простая задача в конечном итоге оказалась сложнее, чем ожидалось, и последующую встречу пришлось отложить на шесть месяцев. Когда он собрался в апреле 1966 года в Кутвейке , проект ван Вейнгаардена остался незавершенным, и Вирт и Хоар представили версию, использующую более традиционные описания. Было общепринято, что их статья представляет собой «правильный язык в неправильном формализме». [23] По мере изучения этих подходов стало ясно, что существует разница в описании параметров, которая будет иметь реальные последствия, и хотя Вирт и Хоар возражали, что дальнейшие задержки могут стать бесконечными, комитет решил дождаться версии ван Вейнгаардена. Затем Вирт реализовал свое нынешнее определение как АЛГОЛ В. [24]

На следующей встрече в Варшаве в октябре 1966 г. [25] был первоначальный отчет подкомитета ввода-вывода, который встречался в Национальной лаборатории Ок-Ридж и Университете Иллинойса, но еще не добился большого прогресса. Два предложения предыдущей встречи были снова рассмотрены, и на этот раз возникла новая дискуссия об использовании указателей ; АЛГОЛ W использовал их только для ссылки на записи, тогда как версия ван Вейнгаардена могла указывать на любой объект. Чтобы добавить путаницы, Джон Маккарти представил новое предложение по перегрузке операторов и возможности связывать вместе и /или конструкции, а Клаус Самельсон хотел разрешить анонимные функции . В результате возникшей путаницы возникла дискуссия о прекращении всех усилий. [24] Неразбериха продолжалась и на протяжении, как предполагалось, встречи по Алголу Y в Зандворте в мае 1967 года. [22]

Публикация

[ редактировать ]

Проект отчета был наконец опубликован в феврале 1968 года. Он был встречен «шоком, ужасом и инакомыслием». [22] в основном из-за сотен страниц нечитаемой грамматики и странной терминологии. Чарльз Х. Линдси попытался выяснить, какой «язык спрятан внутри него». [26] процесс, который занял шесть человеко-недель усилий. Полученная статья «АЛГОЛ 68 с меньшим количеством разрывов». [27] получил широкое распространение. На более широком совещании по обработке информации в Цюрихе в мае 1968 года участники жаловались, что им навязывали эту формулировку и что ИФИП был «настоящим злодеем в этой необоснованной ситуации», поскольку встречи в основном были закрытыми и не было формального механизма обратной связи. Вирт и Питер Наур официально покинули свои авторские позиции в WG2.1. В то время [26]

Следующее заседание WG2.1 состоялось в Тиррении в июне 1968 года. Предполагалось, что оно будет обсуждать выпуск компиляторов и другие вопросы, но вместо этого перешло к обсуждению языка. Ван Вейнгаарден в ответ заявил (или пригрозил), что опубликует только еще одну версию отчета. К этому моменту Наур, Хоар и Вирт отказались от участия в проекте, а еще несколько человек угрожали сделать это. [28] За этим последовало еще несколько встреч: в Норт-Бервике в августе 1968 года и в Мюнхене в декабре, в результате которых в январе 1969 года был опубликован официальный отчет, но также закончились написанием спорного отчета меньшинства. Наконец, в Банфе, Альберта , в сентябре 1969 года проект в целом был признан завершенным, и обсуждение в основном касалось исправлений и значительно расширенного введения к отчету. [29]

Усилия заняли пять лет, уничтожили многие величайшие имена в области компьютерных наук и в нескольких случаях зашли в тупик из-за проблем как в определении, так и в группе в целом. Хоар почти сразу же опубликовал «Критику Алгола 68». [30] который широко упоминается во многих работах. Вирт продолжил разработку концепции ALGOL W и выпустил ее под названием Pascal в 1970 году.

Реализации

[ редактировать ]

АЛГОЛ 68-Р

[ редактировать ]

Первая реализация стандарта, основанная на проекте отчета конца 1968 года, была представлена ​​Королевским радарным учреждением в Великобритании под названием АЛГОЛ 68-R в июле 1970 года. Однако это было подмножество полного языка, и Барри Майу , последний редактор Report, пошутил: «Это вопрос морали. У нас есть Библия, а вы грешите!» [31] Тем не менее эта версия стала очень популярной на машинах ICL и стала широко используемым языком в военном программировании, особенно в Великобритании. [32]

Среди изменений в 68-R было требование объявлять все переменные перед их первым использованием. Это имело значительное преимущество, заключающееся в том, что компилятор мог работать в один проход, поскольку место для переменных в записи активации выделялось до ее использования. Однако это изменение также имело побочный эффект: требовалось объявлять PROC дважды: один раз как объявление типов, а затем снова как тело кода. Еще одно изменение заключалось в исключении предполагаемого режима VOID , выражения, которое не возвращает значения (называемого оператором на других языках) и требующего добавления слова VOID там, где оно предполагалось. Кроме того, в 68-R исключены явные команды параллельной обработки на основе PAR . [31]

Первая полная реализация языка была представлена ​​в 1974 году CDC Нидерланды для серии мэйнфреймов Control Data . Это использовалось ограниченно, в основном при обучении в Германии и Нидерландах. [32]

Версия, похожая на 68-R, была представлена ​​Университетом Карнеги-Меллона в 1976 году как 68S и снова представляла собой однопроходный компилятор, основанный на различных упрощениях оригинала и предназначенный для использования на небольших машинах, таких как DEC PDP-11 . Его тоже использовали в основном в учебных целях. [32]

Версия для мэйнфреймов IBM не стала доступна до 1978 года, когда она была выпущена Кембриджским университетом . Это было «почти завершено». Линдси выпустила версию для небольших машин, включая IBM PC, в 1984 году. [32]

Известны три реализации Algol 68 с открытым исходным кодом: [33]

Хронология

[ редактировать ]
Год Событие Автор
Март 1959 г. Бюллетень Алгола, выпуск 1 (первый) Питер Наур / ACM
февраль 1968 г. Проект отчета (ДР) Опубликовано [35] Рабочая группа ИФИП 2.1
Март 1968 г. Итоговый отчет Алгола 68 р0 Представлено на Мюнхенской встрече Рабочая группа ИФИП 2.1
Июнь 1968 г. Встреча в Тиррении, Италия Рабочая группа ИФИП 2.1
август 1968 г. Встреча в Норт-Бервике, Шотландия Рабочая группа ИФИП 2.1
декабрь 1968 г. Итоговый отчет Алгола 68 р0 Представлено на Мюнхенской встрече Рабочая группа ИФИП 2.1
апрель 1970 г. АЛГОЛ 68-R под управлением GEORGE 3 на ICL 1907F Royal Signals и Radar Est.
июль 1970 г. Алгол 68 для Дартмутской системы разделения времени [36] [37] Сидни Маршалл
Сентябрь 1973 г. Пересмотренный отчет Алгола 68 [38] р1 Опубликовано Рабочая группа ИФИП 2.1
1975 АЛГОЛ 68C (С) — переносной компилятор (zcode VM ) С. Борн , Эндрю Биррелл и Майкл Гай
июнь 1975 г. GE Хедрик и Алан Робертсон. Компилятор подмножества ALGOL 68 штата Оклахома. 1975 Международная конференция по Алголу 68.
июнь 1977 г. Конференция Strathclyde ALGOL 68, Шотландия АКМ
Май 1978 г. Предложения по АЛГОЛУ H – сверхязыку АЛГОЛА 68 [39] А.П. Блэк, В.Дж. Рэйворд-Смит
1984 Полный АЛГОЛ 68S (С) компилятор для Sun, SPARC и ПК CH Линдси и др., Манчестер
август 1988 г. Бюллетень Алгола, выпуск 52 (последний) Эд. CH Линдси / ACM
май 1997 г. Алгол68 С (С) опубликовано в Интернете [40] Чарльз Х. Линдси
ноябрь 2001 г. Алгол 68 Джинн (Г) опубликовано в Интернете [41] (лицензирование открытого исходного кода GNU GPL) Марсель ван дер Веер

Отчеты об алгоритмическом языке ALGOL 68 и члены рабочей группы

[ редактировать ]

«Ван Вейнгаарден однажды охарактеризовал четырех авторов, несколько иронично, как: Костер: транспьютер , Пек: синтаксис, Майу: исполнитель, Ван Вейнгаарден: партийный идеолог». – Костер.

Хронология стандартизации

[ редактировать ]

группой, а затем одобрен Генеральной Ассамблеей для ИФИП ЮНЕСКО 1968: 20 декабря 1968 года «Заключительный отчет» (MR 101) был принят Рабочей публикации. Переводы стандарта были сделаны на русский , немецкий , французский и болгарский , а затем на японский и китайский языки . [47] Стандарт также был доступен на языке Брайля .

1984: ТК 97 рассмотрел Алгол 68 для стандартизации как «Новый рабочий элемент» TC97/N1642 [2] [3] . Западная Германия, Бельгия, Нидерланды, СССР и Чехословакия были готовы участвовать в подготовке стандарта, но СССР и Чехословакия «не были подходящими членами правильных комитетов ISO» [4] , и стандартизация ISO в Algol 68 застопорилась. [5]

1988: Впоследствии АЛГОЛ 68 стал одним из стандартов ГОСТ в России.

  • GOST 27974-88 Programming language ALGOL 68 — Язык программирования АЛГОЛ 68 [48]
  • GOST 27975-88 Programming language ALGOL 68 extended — Язык программирования АЛГОЛ 68 расширенный [49]

Известные языковые элементы

[ редактировать ]

Жирные символы и зарезервированные слова

[ редактировать ]

Стандартный язык содержит около шестидесяти зарезервированных слов, обычно выделенных жирным шрифтом, а некоторые имеют эквиваленты «кратких символов»:

MODE, OP, PRIO, PROC,
FLEX, HEAP, LOC, LONG, REF, SHORT,
BITS, BOOL, BYTES, CHAR, COMPL, INT, REAL, SEMA, STRING, VOID,
CHANNEL, FILE, FORMAT, STRUCT, UNION,
AT "@", EITHERr0, IS ":=:", ISNT  IS NOTr0 ":/=:" ":≠:", OF "→"r0, TRUE, FALSE, EMPTY, NIL "○", SKIP "~",
CO "¢", COMMENT "¢", PR, PRAGMAT,
CASE ~ IN ~ OUSE ~ IN ~ OUT ~ ESAC "( ~ | ~ |: ~ | ~ | ~ )",
FOR ~ FROM ~ TO ~ BY ~ WHILE ~ DO ~ OD,
IF ~ THEN ~ ELIF ~ THEN ~ ELSE ~ FI "( ~ | ~ |: ~ | ~ | ~ )",
PAR BEGIN ~ END "( ~ )", GO TO, GOTO, EXIT "□"r0.

Единицы: Выражения

[ редактировать ]

Основная языковая конструкция — это единица . Единицей может быть формула , вложенное предложение , обычный текст или одна из нескольких технически необходимых конструкций (присваивание, переход, пропуск, ничто). Технический термин «прилагаемое предложение» объединяет некоторые конструкции, заключающие в скобки, известные как «блок» , «оператор do» , «оператор переключения» в других современных языках. При использовании ключевых слов обычно для завершения вложения используется обратная последовательность символов вводного ключевого слова, например ( IF ~ THEN ~ ELSE ~ FI , CASE ~ IN ~ OUT ~ ESAC , FOR ~ WHILE ~ DO ~ OD ). Этот синтаксис защищенной команды был повторно использован Стивеном Борном в общей оболочке Unix Bourne . Выражение может также давать множественное значение , которое создается из других значений с помощью вспомогательного предложения . Эта конструкция выглядит как пакет параметров вызова процедуры.

режим: Объявления

[ редактировать ]

Основные типы данных (называемые modes на языке Алгола 68) real, int, compl ( комплексное число ), bool, char, bits и bytes. Например:

INT n = 2;
CO n is fixed as a constant of 2. CO
INT m := 3;
CO m is a newly created local variable whose value is initially set to 3. CO
CO    This is short for ref int m = loc int := 3; CO
REAL avogadro = 6.0221415⏨23; CO Avogadro number CO
long long real long long pi = 3.14159 26535 89793 23846 26433 83279 50288 41971 69399 37510;
COMPL square root of minus one = 0 ⊥ 1;

Однако декларация REAL x; это просто синтаксический сахар для REF REAL x = LOC REAL;. То есть, x на самом деле является постоянным идентификатором ссылки на вновь созданную локальную переменную REAL .

Кроме того, вместо определения обоих float и double, или int и long и shortи т. д., АЛГОЛ 68 предоставляет модификаторы , так что распространенные в настоящее время double вместо этого будет записано как LONG REAL или LONG LONG REAL , например, . Константы прелюдии max real и min long int предназначены для адаптации программ к различным реализациям.

Все переменные должны быть объявлены, но объявление не должно предшествовать первому использованию.

примитив-объявитель: INT , REAL , COMPL , COMPLEX Г , BOOL , CHAR , СТРОКА , БИТЫ , БАЙТЫ , ФОРМАТ , ФАЙЛ , ТРУБА Г , КАНАЛ , СЕМА

  • BITS – «упакованный вектор» BOOL .
  • BYTES – «упакованный вектор» CHAR .
  • STRING гибкий массив CHAR .
  • SEMA SEMA фор , который можно инициализировать с помощью OP erator LEVEL .

Сложные типы можно создавать из более простых с помощью различных конструкторов типов:

  • REF Режим — ссылка на значение типа mode , аналогично & в C/C++ и REF в Паскале.
  • STRUCT – используется для построения структур, таких как STRUCT в C/C++ и RECORD в Pascal.
  • UNION – используется для создания объединений, как в C/C++ и Pascal.
  • PROC – используется для указания процедур, таких как функции в C/C++ и процедуры/функции в Pascal.

Некоторые примеры см. в разделе «Сравнение АЛГОЛа 68 и C++» .

Другие символы объявления включают: FLEX , HEAP , LOC , REF , LONG , SHORT , EVENT. С

  • FLEX – объявить массив гибким, т.е. его длина может увеличиваться по требованию.
  • HEAP – выделить переменной немного свободного места из глобальной кучи.
  • LOC – выделить переменной немного свободного места локального стека.
  • LONG – объявить INT , REAL или COMPL как LONG er.
  • SHORT – объявите INT , REAL или COMPL как более короткие.

Имя режима (типа) можно объявить с помощью объявления MODE . который похож на TYPEDEF в C/C++ и TYPE в Паскале:

 INT max=99;
 MODE newmode = [0:9][0:max]STRUCT (
     LONG REAL a, b, c, SHORT INT i, j, k, REF REAL r
 );

Это похоже на следующий код C:

  const int max=99;
  typedef struct {
      double a, b, c; short i, j, k; float *r;
  } newmode[9+1][max+1];

В АЛГОЛе 68 NEWMODE слева от символа равенства появляется только индикация режима , и, что особенно важно, конструкция создается и может быть прочитана слева направо, независимо от приоритетов. Кроме того, нижняя граница массивов Algol 68 по умолчанию равна единице, но может быть любым целым числом от -max int до max int .

Объявления режима позволяют типам быть рекурсивными : определяться прямо или косвенно в терминах самих себя. На это распространяются некоторые ограничения – например, эти заявления являются незаконными:

 MODE A = REF A
 MODE A = STRUCT (A a, B b)
 MODE A = PROC (A a) A

пока они действительны:

 MODE A = STRUCT (REF A a, B b)
 MODE A = PROC (REF A a) REF A

Принуждения: кастинг

[ редактировать ]

Принуждение . порождает принуждение из принуждения в соответствии с тремя критериями: априорный способ принуждения до применения какого-либо принуждения, апостериорный способ принуждения, требуемый после этих принуждений, и синтаксическая позиция или «вид» принуждения . Принуждения могут быть каскадными.

Шесть возможных принуждений называются депроцедурой , разыменованием , объединением , расширением , гребли и аннулированием . Каждое приведение, за исключением объединения , предписывает соответствующее динамическое воздействие на связанные значения. Следовательно, многие примитивные действия могут быть запрограммированы неявно посредством принуждения.

Сила контекста – разрешенные приведения:

  • мягкий – депроцессинг
  • слабый - разыменование или депроцессирование, получение имени
  • кроткий - разыменование или депроцедура
  • твердый – кроткий, с последующим объединением
  • сильный – твердый, за которым следует расширение, гребень или опорожнение

Иерархия приведения с примерами

[ редактировать ]

В АЛГОЛе 68 имеется иерархия контекстов, определяющая тип приведения, доступный в конкретной точке программы. Эти контексты:

Контекст
Местоположение контекста Доступны приведения Примеры принуждения в контексте
Мягкий
Слабый
Кроткий
Твердый
Сильный
Сильный
Правая сторона:
  • Декларации личности, как «~» в: REAL x = ~
  • Инициализации, как «~» в: REAL x := ~

Также:

  • Фактические параметры вызовов, как «~» в: PROC: sin(~)
  • Закрытые предложения приведения типов, например «~» в: REAL(~)
  • Единицы рутинных текстов
  • Заявления, дающие VOID
  • Все части (кроме одной) сбалансированного предложения
  • Одна сторона тождественного отношения, как «~» в: ~ IS ~
депроц edur в
Все SOFT , затем слабое разыменование (разыменование или депроцессирование с получением имени)
Все WEAK затем разыменовывают (разыменовывают или депроцедурируют)
Все MEEK затем объединяются
Все ФИРМЫ затем расширяются, гребут или опорожняются.

Расширение происходит, если нет потери точности. Например: INT будет преобразовано в REAL , а REAL будет преобразовано в LONG REAL . Но не наоборот. Примеры:

  • INT в LONG INT
  • INT в REAL
  • от РЕАЛЬНОГО до КОМПЛ
  • БИТЫ в [] BOOL
  • BYTES в STRING

Переменную также можно привести к массиву длиной 1.

Например:

  • от INT до [1] INT
  • REAL на [1] REAL и т. д.
Твердый
  • Операнды формул как «~» в: OP: ~ * ~
  • Параметры транспортных вызовов
Пример:

UNION(INT,REAL) var := 1

Кроткий
  • Тримскрипты (с получением INT )
  • Запросы: например, как «~» в следующем

IF ~ THEN ... FI и FROM ~ BY ~ TO ~ WHILE ~ DO ... OD etc

  • Первичные вызовы (например, sin в sin(x))
Примеры:
  • REF REF BOOL в BOOL
  • REF REF REF INT в INT
Слабый
  • Первичные фрагменты, например «~» в: ~[1:99]
  • Второстепенные варианты выбора, как «~» в: value OF ~
Примеры:
  • REF BOOL в REF BOOL
  • REF REF INT на REF INT
  • REF REF REF REAL на REF REAL
  • REF REF REF REF STRUCT к REF STRUCT
Мягкий
LHS присвоений, как «~» в: ~ := ... Пример:
  • депроцедура: PROC REAL random: e.g. random

Более подробную информацию о первичных, вторичных, третичных и четвертичных типах см. в разделе Приоритет операторов .

pr & co: Прагматы и комментарии

[ редактировать ]

Прагматы — это директивы программы, обычно подсказки компилятору; в новых языках они называются «прагмы» (без «т»). например

PRAGMAT heap=32 PRAGMAT
PR heap=32 PR

Комментарии можно вставлять разными способами:

¢ The original way of adding your 2 cents worth to a program ¢
COMMENT "bold" comment COMMENT
CO Style i comment CO
# Style ii comment #
£ This is a hash/pound comment for a UK keyboard £

Обычно в АЛГОЛе 68 комментарии не могут быть вложенными. Это ограничение можно обойти, используя различные разделители комментариев (например, использовать хэш только для временного удаления кода).

Выражения и составные утверждения

[ редактировать ]

АЛГОЛ 68 является языком программирования, ориентированным на выражения , значение, возвращаемое оператором присваивания , является ссылкой на пункт назначения. Таким образом, следующий действительный код АЛГОЛА 68:

 REAL half pi, one pi; one pi := 2 * ( half pi := 2 * arc tan(1) )

Это понятие присутствует, среди прочего, в C и Perl . Обратите внимание, что, как и в более ранних языках, таких как Algol 60 и FORTRAN , в идентификаторах разрешены пробелы, поэтому half pi — это единый идентификатор (что позволяет избежать подчеркивания , верблюжьего регистра и всех проблем, связанных с строчными буквами ).

Другой пример: чтобы выразить математическую суммы идею f(i) следующего целочисленного выражения от i=1 до n достаточно АЛГОЛА 68:

 (INT sum := 0; FOR i TO n DO sum +:= f(i) OD; sum)

Обратите внимание, что, будучи целочисленным выражением, первый блок кода может использоваться в любом контексте, где может использоваться целочисленное значение . Блок кода возвращает значение последнего вычисленного выражения; эта идея присутствует в Лиспе , среди других языков.

Все составные операторы завершаются характерными закрывающими скобками:

  • ЕСЛИ пункты выбора:
 IF condition THEN statements [ ELSE statements ] FI
 "brief" form:  ( condition | statements | statements )
 IF condition1 THEN statements ELIF condition2 THEN statements [ ELSE statements ] FI
 "brief" form:  ( condition1 | statements |: condition2 | statements | statements )

Эта схема не только позволяет избежать проблемы с висячим else , но также позволяет избежать использования BEGIN и END во встроенных последовательностях операторов .

  • CASE : Условия выбора
 CASE switch IN statements, statements,... [ OUT statements ] ESAC
 "brief" form:  ( switch | statements,statements,... | statements )
 CASE switch1 IN statements, statements,... OUSE switch2 IN statements, statements,... [ OUT statements ] ESAC
 "brief" form of CASE statement:  ( switch1 | statements,statements,... |: switch2 | statements,statements,... | statements )

Пример предложения выбора с краткими символами:

PROC days in month = (INT year, month)INT:
  (month|
    31,
    (year÷×4=0 ∧ year÷×100≠0  ∨  year÷×400=0 | 29 | 28 ),
    31, 30, 31, 30, 31, 31, 30, 31, 30, 31
  );

Пример предложения выбора, выделенного жирным шрифтом:

PROC days in month = (INT year, month)INT:
  CASE month IN
    31,
    IF year MOD 4 EQ 0 AND year MOD 100 NE 0  OR  year MOD 400 EQ 0 THEN 29 ELSE 28 FI,
    31, 30, 31, 30, 31, 31, 30, 31, 30, 31
  ESAC;

Пример предложения выбора, сочетающего жирные и краткие символы:

PROC days in month = (INT year, month)INT:
  CASE month IN
¢Jan¢ 31,
¢Feb¢ ( year MOD 4 = 0 AND year MOD 100 ≠ 0  OR  year MOD 400 = 0 | 29 | 28 ),
¢Mar¢ 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ¢ to Dec. ¢
  ESAC;

Algol68 позволял использовать переключатель либо типа INT , либо (единственно) UNION . Последнее позволяет применять строгую типизацию к переменным UNION . см., объединение например, ниже.

 [ FOR index ] [ FROM first ] [ BY increment ] [ TO last ] [ WHILE condition ] DO statements OD
 The minimum form of a "loop clause" is thus: DO statements OD

Это считалось « универсальным » циклом, полный синтаксис:

FOR i FROM 1 BY -22 TO -333 WHILE i×i≠4444 DO ~ OD

У конструкции есть несколько необычных аспектов:

  • только часть DO ~ OD была обязательной, и в этом случае цикл будет повторяться бесконечно.
  • таким образом, предложение TO 100 DO ~ OD будет повторяться только 100 раз.
  • «Синтаксический элемент WHILE » позволял программисту досрочно выйти из цикла FOR . например
INT sum sq:=0;
FOR i
WHILE
  print(("So far:",i,newline));
  sum sq≠70↑2
DO
  sum sq+:=i↑2
OD

Последующие «расширения» стандарта Algol68 позволили TO заменить синтаксический элемент на UPTO и DOWNTO для достижения небольшой оптимизации. Те же компиляторы также включили:

Дополнительные примеры можно найти в примерах кода ниже.

структура, объединение и [:]: Структуры, объединения и массивы

[ редактировать ]

АЛГОЛ 68 поддерживает массивы любого числа измерений и позволяет разрезать целые или частичные строки или столбцы.

 MODE VECTOR = [1:3]    REAL;   # vector MODE declaration (typedef)  #
 MODE MATRIX = [1:3,1:3]REAL;   # matrix MODE declaration (typedef)  #
 VECTOR v1  := (1,2,3);         # array variable initially (1,2,3)   #
 []REAL v2   = (4,5,6);         # constant array, type equivalent to VECTOR, bounds are implied  #
 OP + = (VECTOR a,b) VECTOR:    # binary OPerator definition         #
   (VECTOR out; FOR i FROM ⌊a TO ⌈a DO out[i] := a[i]+b[i] OD; out);
 MATRIX m := (v1, v2, v1+v2);
 print ((m[,2:]));              # a slice of the 2nd and 3rd columns #

Матрицы можно разрезать любым способом, например:

 REF VECTOR row = m[2,];  # define a REF (pointer) to the 2nd row #
 REF VECTOR col = m[,2];  # define a REF (pointer) to the 2nd column #

АЛГОЛ 68 поддерживает структуры нескольких полей ( STRUCT ) и объединенные режимы . Ссылочные переменные могут указывать на любой MODE, включая срезы массива и поля структуры.

В качестве примера всего этого приведем традиционное объявление связанного списка:

 MODE NODE = UNION (VOID, REAL, INT, COMPL, STRING),
      LIST = STRUCT (NODE val, REF LIST next);

использования UNION CASE NODE : Пример

Алгол68 р0 как в Заключительном отчете 1968 года Алгол68 р1 как в пересмотренном отчете 1973 года.
 NODE n := "1234";
 REAL r; INT i; COMPL c; STRING s
 CASE r,i,c,s::=n IN
   print(("real:", r)),
   print(("int:", i)),
   print(("compl:", c)),
   print(("string:", s))
   OUT print(("?:", n))
 ESAC
 NODE n := "1234";
 # or n := EMPTY; #
  CASE n IN
   (VOID):     print(("void:", "EMPTY")),
   (REAL r):   print(("real:", r)),
   (INT i):    print(("int:", i)),
   (COMPL c):  print(("compl:", c)),
   (STRING s): print(("string:", s))
   OUT         print(("?:", n))
 ESAC

процесс: Процедуры

[ редактировать ]

Объявления процедур ( PROC ) требуют указания типа как для параметров, так и для результата ( VOID , если нет):

 PROC max of real = (REAL a, b) REAL:
    IF a > b THEN a ELSE b FI;

или, используя «краткую» форму условного оператора:

 PROC max of real = (REAL a, b) REAL: (a>b | a | b);

Возвращаемое значение proc — значение последнего выражения, вычисленного в процедуре. Ссылки на процедуры ( ref proc ) также разрешены. Параметры вызова по ссылке предоставляются путем указания ссылок (например, ref real) в списке формальных аргументов. В следующем примере определяется процедура, которая применяет функцию (указанную как параметр) к каждому элементу массива:

 PROC apply = (REF [] REAL a, PROC (REAL) REAL f):
  
    FOR i FROM LWB a TO UPB a DO a[i] := f(a[i]) OD

Такая простота кода была недостижима в предшественнике АЛГОЛА 68, АЛГОЛЕ 60 .

оп: Операторы

[ редактировать ]

Программист может определять новые операторы , причем как те, так и заранее определенные операторы могут быть перегружены , а их приоритеты могут быть изменены программистом. В следующем примере определяется оператор MAX как с диадической, так и с монадической версиями (сканирование элементов массива).

 PRIO MAX = 9;
  
 OP MAX = (INT a,b) INT: ( a>b | a | b );
 OP MAX = (REAL a,b) REAL: ( a>b | a | b );
 OP MAX = (COMPL a,b) COMPL: ( ABS a > ABS b | a | b );
  
 OP MAX = ([]REAL a) REAL:
    (REAL out := a[LWB a];
     FOR i FROM LWB a + 1 TO UPB a DO ( a[i]>out | out:=a[i] ) OD;
     out)

Массив, процедура, разыменование и операции приведения

[ редактировать ]
ПРИОРИТЕТ Операция р0 и р1 +Алгол68 р0 +Алгол68 Г
Эффективно 12
(Начальный)
разыменование, депроцедура(~,~), индексация[~], строка[~,], нарезка[~:~], обозначения размера LONG & SHORT процедура каррирование(~,,,), DIAG , TRNSP , ROW , COL
Эффективно 11
(среднее)
OF (выбор), LOC и HEAP (генераторы) → (выбор) НОВИНКА (генераторы)

Технически это не операторы, а скорее считаются « единицами, связанными с именами ».

Монадические операторы

[ редактировать ]
ПРИОРИТЕТ
(Третичное)
Algol68 "Достойные персонажи [6] " р0 и р1 +Алгол68 р0 и р1 +Алгол68 С,Г +Алгол68 р0
10 НЕ ~, ВВЕРХ , ВНИЗ , LWB , UPB ,

-, ABS , ARG , BIN , ENTIER , LENG , LEVEL , ODD , REPR , ROUND , SHORTEN

¬, ↑, ↓, ⌊, ⌈ НОРМ , СЛЕД , Т , ДЕТ , ИНВ. LWS , UPS , ⎩, ⎧, BTB , CTB

Диадические операторы со связанными приоритетами

[ редактировать ]
ПРИОРИТЕТ
(Третичное)
Алгол68 "Достойные персонажи" р0 и р1 +Алгол68 р0 и р1 +Алгол68 С,Г +Алгол68 р0
9 +*, я +×, ⊥ !
8 SHL , SHR , **, ВВЕРХ , ВНИЗ , LWB , UPB ↑, ↓, ⌊, ⌈ ××, ^, LWS , UPS , ⎩, ⎧
7 *, /, %, НАД , %*, ПРОТИВ , ЭЛЕМ ×, ÷, ÷×, ÷*, %×, □ ÷:
6 -, +
5 <, LT , <=, LE , >=, GE , >, GT ≤, ≥
4 EQ =, NE ~= /= ≠, ¬=
3 &, И /\
2 ИЛИ \/
1 МИНУСАБ , ПЛЮСАБ , ТАЙМСАБ , ДИВАБ , ОВЕРАБ , МОДАБ , ПЛЮСТО ,

-:=, +:=, *:=, /:=, %:=, %*:=, +=:

×:=, ÷:=, ÷×:=, ÷*:=,  %×:= МИНУС , ПЛЮС , ДЕЛ , ПЕРЕБЕР , MODB , ÷::=, PRUS

Конкретные детали:

  • Третичные группы включают имена NIL и ○.
  • LWS : в Алголе68 р0 операторы LWS и ⎩ ... оба возвращают TRUE , если нижнее состояние измерения массива фиксировано.
  • Операторы UPS верхнем и ⎧ аналогичны в состоянии .
  • Операторы LWB и UPB автоматически доступны в UNION разных порядков (и MODE массивах ). например. УПБ union([]int, [,]real, flex[,,,]char)

Отношения присвоения и тождества и т. д.

[ редактировать ]

Технически это не операторы, а скорее считаются « единицами, связанными с именами ».

ПРИОРИТЕТ
(четвертичные периоды)
Алгол68 "Достойные персонажи" р0 и р1 +Алгол68 р0 и р1 +Алгол68 С,Г,Р +Алгол68 р0
Эффективно 0 :=, IS :=:, ISNT :/=: :~=:, AT @, ":", ";" :≠: :¬=: :=:= С , =:= Р ..=, .=, CT , ::, CTAB , ::=, .., не является , "..", ".,"

Примечание. Кватернарии включают имена SKIP и ~.

:=: (альтернативно IS ) проверяет, равны ли два указателя; :/=: (альтернативно ISNT ) проверяет, не равны ли они.

Почему :=: и :/=: необходимы
[ редактировать ]

Попробуйте сравнить два значения указателя, например следующие переменные, объявленные как указатели на целое число:

REF INT ip, jp

Теперь рассмотрим, как определить, указывают ли эти два на одно и то же место или один из них указывает на NIL . Следующее выражение

ip = jp

разыменует оба указателя до значений типа INT и сравните их, поскольку оператор = определен для ИНТ , но не ССЫЛКА ВН . Недопустимо = определять для операндов типа ССЫЛКА INT и INT в то же время, потому что тогда вызовы становятся неоднозначными из-за неявных принуждений, которые могут быть применены: следует ли оставить операнды как REF INT и какая версия оператора называется? Или их следует разыменовать дальше INT и какая версия используется вместо него? Поэтому следующее выражение никогда не может быть признано законным:

ip = NIL

Отсюда необходимость в отдельных конструкциях, не подпадающих под действие обычных правил приведения операндов к операторам. Но есть одна загвоздка. Следующие выражения:

ip :=: jp
ip :=: NIL

будучи законным, он, вероятно, не сделает того, чего можно было бы ожидать. Они всегда вернутся FALSE , потому что они сравнивают фактические адреса переменных ip и jp, а не то, на что они указывают . Чтобы добиться нужного эффекта, пришлось бы написать

ip :=: REF INT(jp)
ip :=: REF INT(NIL)

Специальные символы

[ редактировать ]
Клавиатура IBM 2741 с символами APL

Большинство «специальных» символов Алгола (⊂, ≡, ␣, ×, ÷, ≤, ≥, ≠, ¬, ⊃, ≡, ∨, ∧, →, ↓, ↑, ⌊, ⌈, ⎩, ⎧, ⊥, ⏨, ¢, ○ и □) можно найти на клавиатуре IBM 2741 со вставленной печатающей головкой APL «мяч для гольфа»; они стали доступны в середине 1960-х годов, когда разрабатывался Алгол 68. Эти символы также являются частью стандарта Unicode , и большинство из них доступны в нескольких популярных шрифтах .

транспорт: ввод и вывод

[ редактировать ]

Транспутация — это термин, используемый для обозначения средств ввода и вывода Алгола 68. Он включает в себя заранее определенные процедуры для неформатированной, форматированной и двоичной передачи. Файлы и другие устройства передачи обрабатываются согласованным и машинонезависимым образом. В следующем примере выводится неформатированный вывод на стандартное устройство вывода :

  print ((newpage, "Title", newline, "Value of i is ",
    i, "and x[i] is ", x[i], newline))

Обратите внимание на предопределенные процедуры newpage и newline передается как аргументы.

Книги, каналы и файлы

[ редактировать ]

ТРАНСППУТ КНИГ считается состоящим из , КАНАЛОВ и ФАЙЛОВ :

  • Книги состоят из страниц, строк и символов и могут быть сохранены в файлах.
    • Конкретную книгу можно найти по названию, вызвав match.
  • CHANNEL соответствуют физическим устройствам. например, перфораторы для карточек и принтеры.
    • Выделяют три стандартных канала: стоячий канал, выделенный канал, резервный канал.
  • ФАЙЛ это средство связи между программой и книгой, открытой по какому-либо каналу.
    • MOOD . файла можно читать, записывать, char, bin и открывать
    • К транспортным процедурам относятся: establish, create, open, associate, lock, close, scratch.
    • позиция спрашивает: char number, line number, page number.
    • Процедура компоновки включает в себя:
      • space, backspace, newline, newpage.
      • get good line, get good page, get good book, и PROC set=(REF FILE f, INT page,line,char)VOID:
    • В файле есть процедуры обработки событий . например on logical file end, on physical file end, on page end, on line end, on format end, on value error, on char error.

форматированный транспорт

[ редактировать ]

«Форматированная передача» в передаче ALGOL 68 имеет свой собственный синтаксис и шаблоны (функции), при этом FORMAT встроен между двумя символами $. [50]

Примеры:

 printf (($2l"The sum is:"x, g(0)$, m + n)); ¢ prints the same as: ¢
 print ((new line, new line, "The sum is:", space, whole (m + n, 0))

номинал: Параллельная обработка

[ редактировать ]

АЛГОЛ 68 поддерживает программирование параллельной обработки. С помощью ключевого слова PAR вспомогательное предложение преобразуется в параллельное предложение , где синхронизация действий контролируется с помощью семафоров . В A68G параллельные действия отображаются в потоки, если они доступны в операционной системе хоста . В A68S была реализована другая парадигма параллельной обработки (см. ниже).

PROC
    eat = VOID: ( muffins-:=1; print(("Yum!",new line))),
    speak = VOID: ( words-:=1; print(("Yak...",new line)));
 
INT muffins := 4, words := 8;
SEMA mouth = LEVEL 1;
 
PAR BEGIN
    WHILE muffins > 0 DO
        DOWN mouth;
        eat;
        UP mouth
    OD,
    WHILE words > 0 DO
        DOWN mouth;
        speak;
        UP mouth
    OD
END

Разнообразный

[ редактировать ]

Из-за своей технической сложности АЛГОЛ 68 нуждается в роге изобилия методов, позволяющих отрицать существование чего-либо:

SKIP, "~" or "?"C – an undefined value always syntactically valid,
EMPTY – the only value admissible to VOID, needed for selecting VOID in a UNION,
VOID – syntactically like a MODE, but not one,
NIL or "○" – a name not denoting anything, of an unspecified reference mode,
() or specifically [1:0]INT – a vacuum is an empty array (here specifically of MODE []INT).
undefined – a standards reports procedure raising an exception in the runtime system.
ℵ – Used in the standards report to inhibit introspection of certain types. e.g. SEMA

Термин NIL IS var всегда оценивается как TRUE для любой переменной (но см. выше правильное использование IS :/=:), тогда как неизвестно, какое значение оценивается сравнением x < SKIP для любого целого числа x .

АЛГОЛ 68 намеренно оставляет неопределенным то, что происходит в случае целочисленного переполнения , представление целочисленных битов и степень числовой точности для чисел с плавающей запятой.

Оба официальных отчета включали некоторые расширенные функции, которые не были частью стандартного языка. Они были отмечены знаком ℵ и считались фактически частными. Примеры включают «≮» и «≯» для шаблонов, OUTTYPE / INTYPE для грубого набора текста , а также операторы STRAIGHTOUT и STRAIGHTIN для «выпрямления» вложенных массивов и структур.

Примеры использования

[ редактировать ]

Пример кода

[ редактировать ]

Этот пример программы реализует « Решето Эратосфена» для поиска всех простых чисел меньше 100. NIL — это аналог нулевого указателя в АЛГОЛе 68 в других языках. Обозначение x OF y обращается к элементу x структуры STRUCT y .

BEGIN # Algol-68 prime number sieve, functional style #
  
  PROC error = (STRING s) VOID:
     (print(( newline, " error: ", s, newline)); GOTO stop);
  PROC one to = (INT n) LIST:
     (PROC f = (INT m,n) LIST: (m>n | NIL | cons(m, f(m+1,n))); f(1,n));
  
  MODE LIST = REF NODE;
  MODE NODE = STRUCT (INT h, LIST t);
  PROC cons = (INT n, LIST l) LIST: HEAP NODE := (n,l);
  PROC hd   = (LIST l) INT: ( l IS NIL | error("hd NIL"); SKIP | h OF l );
  PROC tl   = (LIST l) LIST: ( l IS NIL | error("tl NIL"); SKIP | t OF l );
  PROC show = (LIST l) VOID: ( l ISNT NIL | print((" ",whole(hd(l),0))); show(tl(l)));
  
  PROC filter = (PROC (INT) BOOL p, LIST l) LIST:
     IF l IS NIL THEN NIL
     ELIF p(hd(l)) THEN cons(hd(l), filter(p,tl(l)))
     ELSE filter(p, tl(l))
     FI;
  
  PROC sieve = (LIST l) LIST:
     IF l IS NIL THEN NIL
     ELSE
        PROC not multiple = (INT n) BOOL: n MOD hd(l) ~= 0;
        cons(hd(l), sieve( filter( not multiple, tl(l) )))
     FI;
  
  PROC primes = (INT n) LIST: sieve( tl( one to(n) ));
  
  show( primes(100) )
END

Операционные системы, написанные на АЛГОЛе 68.

[ редактировать ]
  • Компьютер Cambridge CAP . Все процедуры, составляющие операционную систему, были написаны на ALGOL 68C , хотя несколько других тесно связанных защищенных процедур, таких как разбиение на страницы, написаны на BCPL . [51]
  • Элдон 3 — разработанный в Университете Лидса для ICL 1900, был написан на АЛГОЛе 68-R . [52]
  • Гибкая машина . Аппаратное обеспечение было индивидуальным и микропрограммируемым, с операционной системой, (модульным) компилятором, редактором, сборщиком мусора и системой хранения файлов, написанными на ALGOL 68RS . Командная оболочка Curt [53] был разработан для доступа к типизированным данным, аналогично режимам Алгола-68.
  • VME S3 был языком реализации операционной системы VME. S3 был основан на ALGOL 68, но с типами данных и операторами, соответствующими тем, которые предлагаются серией ICL 2900 .

Примечание. Компьютеры советской эпохи Эльбрус-1 (Эльбрус-1) и Эльбрус-2 были созданы с использованием языка высокого уровня Эль-76 (АЛ-76), а не традиционной сборки. Эль-76 похож на Алгол-68. Основное отличие — типы динамической привязки в Эль-76, поддерживаемые на аппаратном уровне. Эль-76 используется для приложений, управления заданиями, системного программирования. [54]

Приложения

[ редактировать ]

И АЛГОЛ 68C , и АЛГОЛ 68-R написаны на АЛГОЛ 68, что фактически делает АЛГОЛ 68 самостоятельным приложением. Другие приложения включают в себя:

Библиотеки и API

[ редактировать ]

Представление программы

[ редактировать ]

Особенностью АЛГОЛА 68, унаследованной от традиции АЛГОЛА , являются его различные представления. Существует язык представления, используемый для описания алгоритмов в печатных работах, строгий язык (строго определенный в Отчете) и официальный справочный язык, предназначенный для использования во входных данных компилятора. В примерах присутствуют слова, набранные ЖИРНЫМ шрифтом, это СТРОГО язык. Зарезервированные слова АЛГОЛА 68 фактически находятся в другом пространстве имен , чем идентификаторы, и в идентификаторах разрешены пробелы, поэтому следующий фрагмент является допустимым:

 INT a real int = 3 ;

Программист, который пишет исполняемый код, не всегда имеет возможность использовать ЖИРНЫЙ шрифт или подчеркивание в коде, поскольку это может зависеть от оборудования и культурных особенностей. Были разработаны различные методы обозначения этих идентификаторов. Это называется стропинг- режимом . Например, все или некоторые из следующих программных представлений могут быть доступными :

 INT a real int = 3; # the STRICT language #
'INT'A REAL INT = 3; # QUOTE stropping style #
.INT A REAL INT = 3; # POINT stropping style #
 INT a real int = 3; # UPPER stropping style #
 int a_real_int = 3; # RES stropping style, there are 61 accepted reserved words #

Все реализации должны распознавать как минимум POINT, UPPER и RES внутри разделов PRAGMAT. Из них ограничение POINT и UPPER довольно распространено, тогда как ограничение RES противоречит спецификации (поскольку в нем нет зарезервированных слов). ЦИТАТА (кавычка с одинарным апострофом) была первоначальной рекомендацией, тогда как кавычки с совпадающим апострофом, распространенные в АЛГОЛе 60, не часто используются в АЛГОЛе 68. [57]

Следующие символы были рекомендованы для переносимости и названы «достойными символами» в Отчете о стандартном аппаратном представлении Алгола 68, заархивированном 2 января 2014 г. на Wayback Machine :

  • ^ Достойные персонажи: ABCDEFGHIJKLM НОПQRSTUVWXYZ 0123456789 "#$%'()*+,-./:;<=>@[ ]_|

Это отражало проблему 1960-х годов, когда некоторое оборудование не поддерживало ни строчные буквы, ни некоторые другие символы, отличные от ASCII , действительно, в отчете 1973 года было написано: «Четыре достойных символа — «|», «_», «[ «и «]» — часто кодируются по-разному, даже на установках, номинально использующих один и тот же набор символов».

  • Базовые персонажи: «Достойные персонажи» представляют собой подмножество «базовых персонажей».

Пример различных представлений программы

[ редактировать ]
Представительство Код
Алгол68 "строгий"
как обычно публикуется
¢ underline or 
   bold typeface ¢
 MODE XINT = INT;
 XINT sum sq:=0;
 FOR i WHILE
   sum sq≠70×70
 DO
   sum sq+:=i↑2
 OD
Обрезание цитат
(например, викитекст )
'pr' quote 'pr'
'mode' 'xint' = 'int';
'xint' sum sq:=0;
'for' i 'while'
  sum sq≠70×70
'do'
  sum sq+:=i↑2
'od'
Для компилятора 7-битного кода символов
.PR UPPER .PR
MODE XINT = INT;
XINT sum sq:=0;
FOR i WHILE
  sum sq/=70*70
DO
  sum sq+:=i**2
OD
Для компилятора 6-битного кода символов
.PR POINT .PR
.MODE .XINT = .INT;
.XINT SUM SQ:=0;
.FOR I .WHILE
  SUM SQ .NE 70*70
.DO
  SUM SQ .PLUSAB I .UP 2
.OD
Algol68 с использованием RES- обвязки
(зарезервированное слово)
.PR RES .PR
mode .xint = int;
.xint sum sq:=0;
for i while
  sum sq≠70×70
do
  sum sq+:=i↑2
od

АЛГОЛ 68 позволяет каждому естественному языку определять свой собственный набор ключевых слов Алгол-68. В результате программисты могут писать программы, используя ключевые слова своего родного языка. Ниже приведен пример простой процедуры расчета «на следующий день», код на двух языках: английском и немецком. [ нужна ссылка ]

 # Next day date - English variant #
 MODE DATE = STRUCT(INT day, STRING month, INT year);
 PROC the day following = (DATE x) DATE:
      IF day OF  x < length of month (month OF x, year OF x)
      THEN (day OF x + 1, month OF x, year OF x)
      ELIF month OF x = "December"
      THEN (1, "January", year OF x + 1)
      ELSE (1, successor of month (month OF x), year OF x)
      FI;
 # Nachfolgetag - Deutsche Variante #
 MENGE DATUM = TUPEL(GANZ tag, WORT monat, GANZ jahr);
 FUNKTION naechster tag nach = (DATUM x) DATUM:
          WENN tag VON x < monatslaenge(monat VON x, jahr VON x)
          DANN (tag VON x + 1, monat VON x, jahr VON x)
          WENNABER monat VON x = "Dezember"
          DANN (1, "Januar", jahr VON x + 1)
          ANSONSTEN (1, nachfolgemonat(monat VON x), jahr VON x)
          ENDEWENN;

Russian/Soviet example: In English Algol68's case statement reads CASE ~ IN ~ OUT ~ ESAC , in Cyrillic this reads выб ~ в ~ либо ~ быв .

Редакции

[ редактировать ]

Если не указано иное (с надстрочный индекс ), язык, описанный выше, соответствует языку «Пересмотренного отчета (р1) ".

Язык непересмотренного отчета

[ редактировать ]

Язык оригинала (согласно «Итоговому отчету»). р0 ) отличается синтаксисом режима cast и имеет особенность обработки , т.е. принуждения значения термина к процедуре, которая оценивает этот термин. Процедура будет направлена ​​на то, чтобы сделать вычисления ленивыми . Наиболее полезным применением могла бы быть сокращенная оценка логических операторов. В:

OP ANDF = (BOOL a,PROC BOOL b)BOOL:(a | b | FALSE);
OP ORF = (BOOL a,PROC BOOL b)BOOL:(a | TRUE | b);

b оценивается только в том случае, если a истинно.

Как определено в АЛГОЛе 68, это не работало должным образом, например в коде:

IF FALSE ANDF CO proc bool: CO ( print ("Should not be executed"); TRUE)
THEN ...

вопреки наивным ожиданиям программистов, печать будет только значение разработанного вложенного предложения после ANDF выполнена, поскольку обработано . Текстовая вставка закомментированного PROC BOOL : заставляет его работать.

Некоторые реализации эмулируют ожидаемое поведение для этого особого случая путем расширения языка.

Перед доработкой программист мог решить, что аргументы процедуры будут оцениваться последовательно, а не побочно, используя точки с запятой вместо запятых ( гоммы ).

Например в:

PROC test = (REAL a; REAL b) :...
...
test (x PLUS 1, x);

Первый аргумент проверки гарантированно будет оценен раньше второго, но как обычно:

PROC test = (REAL a, b) :...
...
test (x PLUS 1, x);

тогда компилятор мог оценивать аргументы в любом порядке.

Предложения по продлению от IFIP WG 2.1

[ редактировать ]

После пересмотра отчета были предложены некоторые расширения формулировок для расширения сферы применения:

  • частичная параметризация (также известная как Currying ): создание функций (с меньшим количеством параметров) путем указания некоторых, но не всех параметров для вызова, например, функция логарифма двух параметров, базы и аргумента, может быть специализирована для натурального, двоичного или десятичного журнала. , [58]
  • расширение модуля : для поддержки внешней связи были предложены два механизма: модули определения снизу вверх , более мощная версия средств из АЛГОЛа 68-R сверху вниз и отверстия , аналогичные ENVIRON и USING предложения из АЛГОЛА 68C [59]
  • параметры режима : для реализации ограниченного параметрического полиморфизма (большинство операций со структурами данных, такими как списки, деревья или другие контейнеры данных, можно указать, не затрагивая полезную нагрузку). [60]

На данный момент в Algol 68 Genie реализована лишь частичная параметризация.

Настоящая спецификация ALGOL 68 и график реализации

[ редактировать ]
Имя Год Цель Состояние Описание Целевой процессор Лицензирование Язык реализации
Обобщенный АЛГОЛ 1962 Научный  НЛД АЛГОЛ для обобщенных грамматик
АЛГОЛ И И 1966 Проект предложения Международный Первая версия Алгола 68. Спецификация АКМ
АЛГОЛ 68 ДР 1968 Проект предложения Международный Проект отчета рабочей группы ИФИП 2.1 Спецификация – март АКМ
АЛГОЛ 68 р0 1968 Стандартный Международный Итоговый отчет рабочей группы ИФИП 2.1 Спецификация – август АКМ
АЛГОЛ 68-Р Р 1970 Военный  Великобритания ИКЛ 1900 АЛГОЛ 60
ЭПОС АЛГОЛ И 1971 Научный
АЛГОЛ 68RS РС 1972 Военный  Великобритания Портативная система компилятора ICL 2900/Series 39, Multics, генератор VMS и C (1993 г.) Авторские права Короны АЛГОЛ 68RS
Алгол 68 с площадями 1972 Экспериментальные и другие  Великобритания Добавление областей в Алгол 68
Мини АЛГОЛ 68 1973 Исследовать  НЛД «Интерпретатор простых программ на Algol 68». Архивировано 18 июля 2011 г. на Wayback Machine. Портативный переводчик Математический центр АЛГОЛ 60
ОРЕГАНО 1973 Исследовать  НАС «Важность моделей реализации». Калифорнийский университет в Лос-Анджелесе
АЛГОЛ 68C С 1975 Научный  Великобритания Кембридж Алгол 68 ICL , IBM 360, PDP 10 и Unix, телефоны , Tesla и Z80 (1980) [61] Кембридж АЛГОЛ 68C
Алгол 68, пересмотренный отчет р1 1975 Стандартный Международный Пересмотренный отчет ИФИП РГ 2.1 Спецификация АКМ
Алгол Х ЧАС 1975 Экспериментальные и другие  Великобритания Предлагаемые расширения системы режимов Алгола 68. Спецификация АЛГОЛ W
Одра Алгол 68 1976 практическое использование  Советский Союз /  Польша Корь 1204/IL советский АЛГОЛ 60
Оклахома Алгол 68 1976 инструкция по программированию  олень Университета штата Оклахома Реализация [62] IBM 1130 и System/370 /158 Неизвестный ANSI Фортран 66 .
Берлин Алгол 68 1977 Исследовать  ИЗ «Берлинская реализация АЛГОЛА 68» и [63] Абстрактная машина ALGOL 68 – машинно-независимый компилятор Технический университет Берлина CDL 2
ФЛАКК Ф 1977 Многоцелевой  МОЖЕТ Полная реализация пересмотренного отчета с функциями отладки Система/370 аренда, Chion Corporation Ассемблер
АЛГОЛ 68-RT РТ 1979 Научный  Великобритания Параллельный АЛГОЛ 68-Р
РС Алголь РС 1979 Научный  Великобритания
АЛГОЛ 68+ 1980 Научный  НЛД Предлагаемый сверхязык АЛГОЛ 68. [64]
М-220 АЛГОЛ 68  Советский Союз М-220 советский ЭПСИЛОН
Ленинградский АЛГОЛ 68 л 1980 Телекоммуникации  Советский Союз Полный язык + модули IBM, DEC, CAMCOH, PS 1001 и ПК советский
Интерактивный АЛГОЛ 68 я 1983  Великобритания Инкрементная компиляция ПК Некоммерческое условно-бесплатное ПО
АЛГОЛ 68С С 1985 Научный Международный Солнечная версия Алгола 68 Sun-3 , Sun SPARC (под SunOS 4.1 и Solaris 2), Atari ST (под GEMDOS ), Acorn Archimedes (под ОС RISC ), VAX-11 под Ultrix-32
Алгол68toC [65] (ктранс) 1985 Электроника  Великобритания ctrans от ЭЛЛЫ АЛГОЛ 68RS Портативный генератор C  Программное обеспечение с открытым исходным кодом 1995 г. АЛГОЛ 68RS
МК2 Интерактивный Алгол 68 1992  Великобритания Инкрементная компиляция ПК Некоммерческое условно-бесплатное ПО [66]
Алгол 68 Джинн Г 2001 Полный язык  НЛД Включает стандартную оговорку о залоге Портативный переводчик GNU GPL С
Алгол 68 Джинн версия 2.0.0 2010 Полный язык  НЛД Портативный переводчик; необязательная компиляция выбранных модулей GNU GPL С

Язык S3 , который использовался для написания операционной системы ICL VME и многих других системных программ в серии ICL 2900, был прямым производным от Algol 68. Однако в нем были опущены многие более сложные функции и заменены базовые режимы набором типов данных, которые напрямую связаны с аппаратной архитектурой серии 2900.

Реализация конкретных расширений

[ редактировать ]

АЛГОЛ 68R от RRE был первой реализацией подмножества АЛГОЛ 68, работавшей на ICL 1900 . В исходном языке основными ограничениями подмножества были определение перед использованием и отсутствие параллельной обработки. Этот компилятор был популярен в университетах Великобритании в 1970-х годах, где многие студенты -компьютерщики изучали АЛГОЛ 68 как свой первый язык программирования; компилятор был известен хорошими сообщениями об ошибках.

АЛГОЛ 68RS (РС) от RSRE представляла собой портативную систему компилятора, написанную на ALGOL 68RS (загруженную из ALGOL 68R) и реализованную на различных системах, включая ICL 2900 / Series 39 , Multics и DEC VAX/VMS . Язык был основан на пересмотренном отчете, но с ограничениями подмножества, аналогичными ALGOL 68R. Этот компилятор сохранился в форме компилятора Algol68-to-C.

В АЛГОЛЕ 68S (С) В Университете Карнеги-Меллона мощность параллельной обработки была улучшена за счет добавления ортогонального расширения eventing . Любое объявление переменной, содержащее ключевое слово EVENT, делало присвоения этой переменной допускающими параллельное вычисление, т. е. правая часть превращалась в процедуру, которая перемещалась в один из процессоров многопроцессорной системы C.mmp . Доступ к таким переменным задерживался после завершения задания.

Кембриджский Алгол 68C (С) был портативным компилятором, реализовавшим подмножество АЛГОЛА 68, ограничивающее определения операторов и опускающее сборку мусора, гибкие строки и форматированную передачу.

Алгол 68 Джинн (Г) автор М. ван дер Веер — это реализация ALGOL 68 для современных компьютеров и операционных систем.

«Несмотря на благие намерения, программист может нарушить переносимость, непреднамеренно применив локальное расширение. Чтобы защититься от этого, каждая реализация должна предоставить прагматическую опцию PORTCHECK. Пока эта опция действует, компилятор печатает сообщение для каждой конструкции, которую он распознает как нарушая некоторые ограничения переносимости». [67]

  • ... Схема композиции типов, принятая К., во многом обязана Алголу 68, хотя, возможно, она и не появилась в той форме, которую одобрили бы приверженцы Алгола. Центральным понятием, которое я усвоил из Алгола, была структура типов, основанная на атомарных типах (включая структуры), состоящих из массивов, указателей (ссылок) и функций (процедур). Концепция объединений и приведения Алгола 68 также оказала влияние, появившееся позже. Деннис Ричи, апрель 1993 г. [2]
  • ... Это правда, что C не происходит от Алгола 68, но влияние было, большая часть которого настолько тонкая, что ее трудно восстановить, даже если я хорошенько подумаю. В частности, тип объединения (позднее добавление к C) действительно обязан A68 не в деталях, а в идее наличия такого типа вообще. Если говорить глубже, то структура типов в целом и даже, каким-то странным образом, синтаксис объявления (часть конструктора типа) были вдохновлены A68. И да, конечно, «длинно». Деннис Ричи , 18 июня 1988 г. [4]
  • «Поздравляю, ваш Мастер сделал это» – Никлаус Вирт [68]
  • Чем больше я это вижу, тем несчастнее я становлюсь – Э. У. Дейкстра, 1968 г. [69]
  • [...] говорили, что популярность А68 обратно пропорциональна [...] расстоянию от Амстердама Гвидо ван Россум [70]
  • [...] Лучшее, что мы могли сделать, это отправить вместе с ним отчет меньшинства, в котором изложилось наше взвешенное мнение о том, что «... как инструмент для надежного создания сложных программ этот язык потерпел неудачу». [...] - К. А. Р. Хоар в своей на Премии Тьюринга в октябре 1980 года. лекции [71]
  • «[...] Более чем когда-либо от адекватного инструмента программирования будет требоваться, чтобы он по своей структуре помогал программисту в самых сложных аспектах его работы, а именно, в надежном создании сложных программ. В этом отношении мы Мы не видим, что предложенный здесь язык является значительным шагом вперед: напротив, мы чувствуем, что его неявное представление о задаче программиста во многом такое же, как, скажем, десять лет назад. Это наводит нас на вывод, который мы рассматривали. как инструмент программирования, этот язык следует считать устаревшим [...]» Доклад меньшинства Рабочей группы 1968 года от 23 декабря 1968 года. [72]

См. также

[ редактировать ]
  1. ^ ван Вейнгаарден, Адриан ; Майу, Барри Джеймс ; Пек, Джон Эдвард Ланселот ; Костер, Корнелис Герман Антоний ; Синцов, Мишель [на французском языке] ; Линдси, Чарльз Ходжсон ; Меертенс, Ламбер Гийом Луи Теодор ; Фискер, Ричард Г., ред. (1976). Пересмотренный отчет об алгоритмическом языке АЛГОЛ 68 (PDF) . Спрингер Верлаг . ISBN  978-0-387-07592-1 . OCLC   1991170 . Архивировано (PDF) из оригинала 19 апреля 2019 г. Проверено 11 мая 2019 г.
  2. Перейти обратно: Перейти обратно: а б Деннис Ричи (апрель 1993 г.). «Развитие языка C» (PDF) . Архивировано из оригинала (PDF) 6 ноября 2005 г. Проверено 26 апреля 2007 г.
  3. ^ Влияние на C: типы, структуры, массивы, указатели и процедуры - Деннис Ритчи [2]
  4. Перейти обратно: Перейти обратно: а б Деннис Ричи (июнь 1988 г.). «С и Алгол 68» . Проверено 15 сентября 2006 г.
  5. ^ Влияние на C: объединение, структура, синтаксис и длинная точность - Деннис Ричи [4]
  6. ^ «История C++: 1979–1991» (PDF) . Март 1993. Страница 12, 2-й абзац: Algol68 [предоставил] перегрузку операторов (§3.3.3), ссылки (§3.3.4) и возможность объявлять переменные в любом месте блока (§3.3.1) . Проверено 6 мая 2008 г.
  7. ^ «Интервью с Гвидо ван Россумом» . Июль 1998 г. Архивировано из оригинала 1 мая 2007 г. Проверено 29 апреля 2007 г.
  8. ^ «Краткая история Алгола 68» . Архивировано из оригинала 10 августа 2006 г. Проверено 15 сентября 2006 г.
  9. ^ Вир, Марсель ван дер (5 апреля 2023 г.). «Пересмотренный отчет об алгоритмическом языке Алгол 68» . jmvdveer.home.xs4all.nl/ . Архивировано из оригинала 17 марта 2013 г.
  10. ^ Вир, Марсель ван дер (5 апреля 2023 г.). «Пересмотренный отчет об алгоритмическом языке Алгол 68» . jmvdveer.home.xs4all.nl/ . Архивировано из оригинала 17 марта 2013 г.
  11. ^ Вир, Марсель ван дер (5 апреля 2023 г.). «Пересмотренный отчет об алгоритмическом языке Алгол 68» . jmvdveer.home.xs4all.nl/ . Архивировано из оригинала 17 марта 2013 г.
  12. ^ Вир, Марсель ван дер (5 апреля 2023 г.). «Пересмотренный отчет об алгоритмическом языке Алгол 68» . jmvdveer.home.xs4all.nl/ . Архивировано из оригинала 17 марта 2013 г.
  13. ^ «Гоммас?» .
  14. ^ Пересмотренный отчет об алгоритмическом языке Algol 68. Архивировано 17 марта 2013 г. в Wayback Machine . jmvdveer.home.xs4all.nl (20 декабря 1968 г.). Проверено 21 июля 2013 г.
  15. ^ Терехов, Андрей (2014). «АЛГОЛ 68 и его влияние на советское и российское программирование». 2014 Третья Международная конференция по компьютерным технологиям в России и на постсоветском пространстве . стр. 97–106. дои : 10.1109/SoRuCom.2014.29 . ISBN  978-1-4799-1799-0 . S2CID   16097093 .
  16. ^ http://toc.proceedings.com/25445webtoc.pdf "Алгол 68 и его влияние на программирование в СССР и России" – pages: 336 & 342
  17. ^ Линдси 1996 .
  18. Перейти обратно: Перейти обратно: а б Линдси, Чарльз Х. (1996). Бергин, Ти Джей; Гибсон, Р.Г. (ред.). История АЛГОЛА 68 . История языков программирования-II . Том. 28. также в Уведомлениях ACM SIGPLAN 28(3), март 1993 г. (включает исчерпывающую библиографию встреч и дискуссий до, во время и после разработки ALGOL 68). АКМ Пресс . стр. 97–132. дои : 10.1145/155360.155365 . ISBN  978-0-201-89502-5 . {{cite book}}: |journal= игнорируется ( помогите )
  19. ^ Программирование на Algol 68 стало проще
  20. ^ Вир, Марсель ван дер. «Марсель ван дер Веер — Джинн Алгола 68» . jmvdveer.home.xs4all.nl/ .
  21. ^ Линдси 1993 , с. 7.
  22. Перейти обратно: Перейти обратно: а б с д Линдси 1993 , с. 9.
  23. ^ Линдси 1993 , с. 24.
  24. Перейти обратно: Перейти обратно: а б Линдси 1993 , с. 10.
  25. ^ «Алгольский бюллетень» .
  26. Перейти обратно: Перейти обратно: а б Линдси 1993 , с. 12.
  27. ^ Линдси, Швейцария (1972). «АЛГОЛ 68 с меньшим количеством разрывов» (PDF) . Компьютерный журнал . 15 (1): 176–188. дои : 10.1093/comjnl/15.2.176 .
  28. ^ Линдси 1993 , с. 13.
  29. ^ Линдси 1993 , с. 15.
  30. ^ Хоар, Калифорния Р. (ноябрь 1968 г.). «Критика Алгола 68» . Алгол Бюллетень . 29 : 27–29.
  31. Перейти обратно: Перейти обратно: а б Пек, JEL, изд. (1970), Материалы рабочей конференции ИФИП по реализации Алгола 68 , Мюнхен: Северная Голландия, ISBN.  0-7204-2045-8
  32. Перейти обратно: Перейти обратно: а б с д Костер, CHA «Краткая история Алгола 68» . Архивировано из оригинала 17 декабря 2007 г.
  33. ^ Ван дер Веер, Марсель. «Реализации Algol 68 с открытым исходным кодом» . algol68.sourceforge.net .
  34. ^ Э. Маркези, Хосе. «Фронтенд Algol68 для GCC» . jemarch.net .
  35. ^ Ван Вейнгаарден, А.; Майу, Би Джей; Пек, Дж.; Костер, ЦДХ (1 марта 1968 г.). «Проект отчета об алгоритмическом языке АЛГОЛ 68» . Бюллетень АЛГОЛА (Sup 26): 1–84 . Получено 7 апреля 2023 г. - через март. 1968.
  36. ^ Сидни Маршалл, «Внедрение АЛГОЛа 68», Материалы рабочей конференции ИФИП по внедрению АЛГОЛа 68 , Мюнхен, 20–24 июля 1970 г., Дж. Э. Пек, редактор, Северная Голландия, страницы 239–243.
  37. ^ Сидни Маршалл, О реализации Алгола 68 , докторская диссертация, Дартмутский колледж, 1972.
  38. ^ Пересмотренный отчет Алгола 68
  39. ^ Блэк, АП; Рэйворд-Смит, виджей (1 мая 1978 г.). АЛГОЛА. «Предложения по АЛГОЛУ H — сверхязыку Бюллетень Алгола (42): 36–49 . Проверено 7 апреля 2023 г. - в мае. 1978.
  40. ^ "Алгол68 С (С) опубликовано в Интернете» . Архивировано из оригинала 3 декабря 2005 г. Проверено 30 августа 2004 г.
  41. ^ Вир, Марсель ван дер. «Марсель ван дер Веер — Джинн Алгола 68» . jmvdveer.home.xs4all.nl/ . Проверено 7 апреля 2023 г.
  42. ^ «Проект отчета об алгоритмическом языке АЛГОЛ 68» . Март 1968 г. Архивировано из оригинала 30 сентября 2007 г. Проверено 22 июня 2007 г.
  43. ^ «Предпоследний проект отчета об алгоритмическом языке АЛГОЛ 68 – главы 1–9» (PDF) . Октябрь 1968 года . Проверено 22 июня 2007 г. [ постоянная мертвая ссылка ]
  44. ^ «Предпоследний проект отчета об алгоритмическом языке АЛГОЛ 68 – главы 10–12» (PDF) . Октябрь 1968 года . Проверено 22 июня 2007 г. [ постоянная мертвая ссылка ]
  45. ^ «Отчет об алгоритмическом языке АЛГОЛ 68» (PDF) . Декабрь 1968 г. Архивировано из оригинала (PDF) 6 апреля 2008 г. Проверено 30 декабря 2007 г.
  46. ^ «Пересмотренный отчет об алгоритмическом языке Алгол 68» . Сентябрь 1973 г. Архивировано из оригинала 27 сентября 2007 г. Проверено 30 апреля 2007 г.
  47. ^ Лу Ху-цюань (1971). «Перевод Алгола 68 на китайский язык» (PDF) . Пекин, Китай: Институт математики Академии наук Синика . Проверено 17 августа 2012 г.
  48. ^ "GOST 27974-88 Programming language ALGOL 68 – Язык программирования АЛГОЛ 68" (PDF) (in Russian). GOST . 1988. Archived from the original (PDF) on 2008-11-15 . Retrieved 2008-11-15 .
  49. ^ "GOST 27975-88 Programming language ALGOL 68 extended – Язык программирования АЛГОЛ 68 расширенный" (PDF) (in Russian). GOST . 1988. Archived from the original (PDF) on 2011-04-29 . Retrieved 2008-11-15 .
  50. ^ «Синтаксис формата в АЛГОЛе 68G» . Архивировано из оригинала 9 января 2008 г. Проверено 7 апреля 2023 г.
  51. ^ Нидхэм, РМ; Уилкс, М.В. (январь 1979 г.). «Компьютер Cambridge CAP и его операционная система» (PDF) . Исследования Майкрософт .
  52. ^ Дэвид Холдсворт (зима 2009–2010 гг.). «Разделение времени KDF9: Элдон 2 — это не EGDON!» . Компьютерное воскрешение — номер 49 . Общество охраны компьютеров . Проверено 3 октября 2010 г.
  53. ^ ЕСЛИ Карри; Дж. М. Фостер (сентябрь 1982 г.). «Меморандум РСРЭ» (PDF) . vitanuova.com . Проверено 7 апреля 2023 г.
  54. ^ Эльбрус Бабаяна и Pentium Пентковского . Ixbt.com. Retrieved 21 July 2013.
  55. ^ Оливер-младший; Ньютон, Р.С. (1979). «Практический опыт работы с АЛГОЛом 68-RT» . Компьютерный журнал . 22 (2): 114–118. дои : 10.1093/comjnl/22.2.114 .
  56. ^ Приложения, библиотеки и наборы тестов — Группа сохранения программного обеспечения . Softwarepreservation.org. Проверено 21 июля 2013 г.
  57. ^ Пересмотренный отчет, стр. 123, сноска.
  58. ^ Линдси, Швейцария (июль 1974 г.). «Частичная параметризация» . Бюллетень Алгола (37): 24–26 . Проверено 19 сентября 2022 г.
  59. ^ Линдси, Швейцария; Бум, HJ (декабрь 1978 г.). «Модули и отдельная программа компиляции для АЛГОЛа 68» . Бюллетень Алгола (43): 19–53 . Проверено 29 января 2020 г. в комментариях Ошибки
  60. ^ Линдси, Швейцария (июль 1974 г.). «Модалы» . Бюллетень Алгола (37): 26–29 . Проверено 19 сентября 2022 г.
  61. ^ «Архивная копия» (PDF) . Архивировано из оригинала (PDF) 15 апреля 2010 г. Проверено 20 марта 2010 г. {{cite web}}: CS1 maint: архивная копия в заголовке ( ссылка )
  62. ^ http://htportal.acm.org/ft_gateway.cfm?id=803425&type=pdf [ постоянная мертвая ссылка ]
  63. ^ Абстрактная машина АЛГОЛ 68 и ее применение в машинно-независимом компиляторе — Springer . Springerlink.com. Проверено 21 июля 2013 г.
  64. ^ «Энциклопедия компьютерных языков» . Архивировано из оригинала 10 марта 2011 г. Проверено 20 марта 2010 г.
  65. ^ Реализации Algol 68 с открытым исходным кодом — просмотр файлов в формате . Sourceforge.net. Проверено 21 июля 2013 г.
  66. ^ [1] Архивировано 29 августа 2006 г. в Wayback Machine.
  67. ^ «Архивная копия» (PDF) . Архивировано из оригинала (PDF) 2 января 2014 г. Проверено 27 августа 2005 г. {{cite web}}: CS1 maint: архивная копия в заголовке ( ссылка )
  68. ^ ЦДХ Костер (1993). Создание Алгола 68 . Конспекты лекций по информатике. CiteSeerX   10.1.1.76.2072 .
  69. ^ Дейкстра, Э.В. «Редактору ALGOL 68 Mathematische Centrum» . Архивировано из оригинала 21 апреля 2007 г. Проверено 28 апреля 2007 г.
  70. ^ ван Россум, Гвидо (июнь 2005 г.). «Список желаний Python-Dev: бездействовать» . Проверено 28 апреля 2007 г.
  71. ^ Хоар, ЦАР (февраль 1981 г.) [на основе его лекции на Премии Тьюринга 1980 г. ]. «Старая одежда императора» . Коммуникации АКМ . 24 (2): 75–83. дои : 10.1145/358549.358561 . S2CID   97895 . Альтернативный URL-адрес. Архивировано 2 октября 2017 г. на Wayback Machine.
  72. ^ «Бюллетень Алгола (упоминается в AB30.1.1.1)» . Март 1970 г. Архивировано из оригинала 30 сентября 2007 г. Проверено 1 марта 2007 г.

Цитируемые работы

[ редактировать ]
  • Брэйлсфорд, Д.Ф. и Уокер, А.Н., Вводное программирование на ALGOL 68 , Эллис Хорвуд/Уайли, 1979 г.
  • Линдси, Ч. Х. и ван дер Мейлен, С. Г., Неофициальное введение в АЛГОЛ 68 , Северная Голландия, 1971 г.
  • Линдси, Швейцария (2 марта 1993 г.). «История Алгола 68» . Уведомления ACM SIGPLAN . 28 (3): 97–132. дои : 10.1145/155360.155365 .
  • МакГеттрик, AD, АЛГОЛ 68, Первый и второй курс , Кембриджский университет. Пресс, 1978 г.
  • Пек, ДЖЕЛ, спутник АЛГОЛА 68 , Univ. Британская Колумбия, октябрь 1971 г.
  • Таненбаум, А.С., Учебное пособие по АЛГОЛУ 68 , Computing Surveys 8 , 155–190, июнь 1976 г. и 9 , 255–256, сентябрь 1977 г., [7] [ постоянная мертвая ссылка ]
  • Вудворд, П.М. и Бонд, С.Г., Пользователи ALGOL 68-R так в оригинале Путеводитель , Лондон, канцелярия Ее Величества, 1972 год.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: f62326fb76c641ebc96cf87c66a1dd1b__1719660360
URL1:https://arc.ask3.ru/arc/aa/f6/1b/f62326fb76c641ebc96cf87c66a1dd1b.html
Заголовок, (Title) документа по адресу, URL1:
ALGOL 68 - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)