АЛГОЛ 68
![]() Пересмотренный отчет об алгоритмическом языке - алгоритм 68. Под редакцией: А. ван Вейнгаардена и др., сентябрь 1973 г. [1] | |
Парадигмы | Мультипарадигма : одновременная , императивная |
---|---|
Семья | АЛГОЛ |
Разработано | А. ван Вейнгаарден , Б. Дж. Майу , Дж. Э. Пек и ЧА Костер и др. |
Впервые появился | Итоговый отчет: 1968 г р0 |
Стабильная версия | Алгол 68/РР
/ Пересмотренный отчет: 1973 г р1 |
Дисциплина набора текста | статический , прочный , безопасный , структурный |
Объем | Лексический |
Основные реализации | |
АЛГОЛ 68C , Алгол 68 Джинн (недавний), АЛГОЛ 68-R , АЛГОЛ 68RS , АЛГОЛ 68S , FLACC , Ленин 68 Ленинградский отряд/Ленинградский отряд , Одра АЛГОЛ 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 был первым (и, возможно, одним из последних) основных языков, для которого было дано полное формальное определение до его реализации.
Основные цели и принципы проектирования АЛГОЛА 68:
- Полнота и ясность описания [9]
- Ортогональность дизайна [10]
- Безопасность [11]
- Эффективность: [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]
- a68g , GPLv3 , написанная Марселем ван дер Веером.
- algol68toc — с открытым исходным кодом программный порт ALGOL 68RS .
- экспериментальный интерфейс Algol68 для GCC , написанный Хосе Э. Марчези. [34]
Хронология [ править ]
Год | Событие | Автор |
---|---|---|
Март 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-Р (Р) под управлением 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 г. | Предложения по ALGORA H – сверхязыку ALGORA 68 [39] | А.П. Блэк, В.Дж. Рэйворд-Смит |
1984 | Полный АЛГОЛ 68S (С) компилятор для Sun, SPARC и ПК | CH Линдси и др., Манчестер |
август 1988 г. | Бюллетень Алгола, выпуск 52 (последний) | Эд. CH Линдси / ACM |
май 1997 г. | Алгол68 С (С) опубликовано в Интернете [40] | Чарльз Х. Линдси |
ноябрь 2001 г. | Алгол 68 Джинн (Г) опубликовано в Интернете [41] (лицензирование открытого исходного кода GNU GPL) | Марсель ван дер Веер |
об алгоритмическом языке ALGOL 68 и члены рабочих Отчеты групп
- Март 1968 г.: проект отчета об алгоритмическом языке АЛГОЛ 68. [42] – Под редакцией: Адриан ван Вейнгаарден , Барри Дж. Майу , Джон Пек и Корнелис Х.А. Костер .
«Ван Вейнгаарден однажды, несколько иронично, охарактеризовал четырех авторов так: Костер: транспьютер , Пек: синтаксис, Майу: исполнитель, Ван Вейнгаарден: партийный идеолог». – Костер.
- Октябрь 1968 г.: предпоследний проект отчета об алгоритмическом языке АЛГОЛ 68 — главы 1–9. [43] Главы 10-12 [44] - Под редакцией: А. ван Вейнгаарден, Б. Дж. Майу, Дж. Э. Пек и ЧА Костер.
- Декабрь 1968 г.: Отчет об алгоритмическом языке АЛГОЛ 68 — Отпечаток из журнала Numerische Mathematik, 14, 79–218 (1969); Спрингер Верлаг. [45] - Под редакцией: А. ван Вейнгаарден, Б. Дж. Майу, Дж. Э. Пек и ЧА Костер.
- Март 1970: Отчет меньшинства, Бюллетень ALGOL AB31.1.1 — подписан Эдсгером Дейкстрой , Фрейзером Дунканом , Яном Гарвиком , Тони Хоаром , Брайаном Рэнделлом , Герхардом Зигмюллером , Владом Турски и Майком Вудгером .
- Сентябрь 1973 г.: Пересмотренный отчет об алгоритмическом языке Algol 68 - Springer-Verlag 1976 г. [46] - Под редакцией: А. ван Вейнгаарден, Б. Майлу, Дж. Пек, К. Костер, Мишель Синцов , Чарльз Х. Линдси , Ламберт Меертенс и Ричард Г. Фискер .
- другие члены WG 2.1, работающие над разработкой ALGOL 68: [18] Фридрих Л. Бауэр • Ханс Бекич • Герхард Гус • Петер Зилахи Ингерман • Питер Ландин • Джон Маккарти • Джек Мернер • Питер Наур • Манфред Пауль • Виллем ван дер Поэль • Даг Росс • Клаус Самельсон • Никлаус Вирт • Нобуо Йонеда .
Хронология стандартизации [ править ]
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]
Известные языковые элементы [ править ]
Жирные символы и зарезервированные слова [ править ]
Стандартный язык содержит около шестидесяти зарезервированных слов, обычно выделенных жирным шрифтом, а некоторые имеют эквиваленты «кратких символов»:
РЕЖИМ , ОП , ПРИО , ПРОЦ , FLEX , HEAP , LOC , LONG , REF , SHORT , БИТЫ , BOOL , БАЙТЫ , CHAR , COMPL , INT , REAL , SEMA , STRING , VOID , КАНАЛ , ФАЙЛ , ФОРМАТ , СТРУКТУРА , СОЮЗ , НА "@", ЛИБО р0 , ЕСТЬ ":=:", НЕТ ЕСТЬ НЕ р0 ":/=:" ":≠:", OF "→" р0 , ИСТИНА , ЛОЖЬ , ПУСТОЙ , НОЛЬ «○», ПРОПУСК «~», CO "¢", КОММЕНТАРИЙ "¢", PR , PRAGMAT , CASE ~ IN ~ OUSE ~ IN ~ OUT ~ ESAC "( ~ | ~ |: ~ | ~ | ~ )", ДЛЯ ~ ОТ ~ ДО ~ ПО ~ ПОКА ~ ДЕЛАТЬ ~ ОД , IF ~ THEN ~ ELIF ~ THEN ~ ELSE ~ FI "( ~ | ~ |: ~ | ~ | ~ )", PAR BEGIN ~ END "( ~ )", GO TO , GOTO , EXIT "□" р0 .
Единицы: Выражения [ править ]
Основная языковая конструкция — это единица . Единицей может быть формула , вложенное предложение , обычный текст или одна из нескольких технически необходимых конструкций (присваивание, переход, пропуск, ничто). Технический термин «прилагаемое предложение» объединяет некоторые конструкции, заключающие в скобки, известные как «блок» , «оператор do» , «оператор переключения» в других современных языках. При использовании ключевых слов обычно для завершения вложения используется обратная последовательность символов вводного ключевого слова, например ( IF ~ THEN ~ ELSE ~ FI , CASE ~ IN ~ OUT ~ ESAC , FOR ~ WHILE ~ DO ~ OD ). Этот защищенной команды синтаксис был повторно использован Стивеном Борном в общей оболочке Unix Bourne . Выражение может также давать множественное значение , которое создается из других значений с помощью вспомогательного предложения . Эта конструкция выглядит как пакет параметров вызова процедуры.
режим: Объявления [ править ]
Основные типы данных (называемые mode
s на языке Алгола 68) real
, int
, compl
( комплексное число ), bool
, char
, bits
и bytes
. Например:
ИНТ n = 2; CO n имеет фиксированное значение 2. CO INT m := 3; CO m — это вновь созданная локальная переменная , значение которой изначально установлено равным 3. CO CO Это сокращение от ref int m = loc int := 3; CO REAL авогадро = 6,0221415⏨23; CO число Авогадро CO long long real long long pi = 3,14159 26535 89793 23846 26433 83279 50288 41971 69399 37510; COMPL квадратный корень из минус единицы = 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 в Паскале:
ИНТ макс=99; MODE новый режим = [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 ; короткий я , j , k ; плавать * р ;
} новый режим [ 9 + 1 ] [ макс + 1 ];
В АЛГОЛе 68 NEWMODE слева от символа равенства появляется только индикация режима , и, что особенно важно, конструкция создается и может быть прочитана слева направо, независимо от приоритетов. Кроме того, нижняя граница массивов Algol 68 по умолчанию равна единице, но может быть любым целым числом от -max int до max int .
Объявления режима позволяют типам быть рекурсивными : определяться прямо или косвенно в терминах самих себя. На это распространяются некоторые ограничения – например, эти заявления являются незаконными:
РЕЖИМ A = ССЫЛКА A РЕЖИМ A = СТРУКТУРА ( A a, B b) РЕЖИМ A = ПРОЦ ( A a) A
пока они действительны:
РЕЖИМ A = СТРУКТУРА ( REF A a, B b) РЕЖИМ A = PROC ( REF A a) REF A
Принуждения: кастинг [ править ]
Принуждение . порождает принуждение из принуждения в соответствии с тремя критериями: априорный способ принуждения до применения какого-либо принуждения, апостериорный способ принуждения, требуемый после этих принуждений, и синтаксическая позиция или «вид» принуждения . Принуждения могут быть каскадными.
Шесть возможных принуждений называются депроцедурой , разыменованием , объединением , расширением , гребли и аннулированием . Каждое приведение, за исключением объединения , предписывает соответствующее динамическое воздействие на связанные значения. Следовательно, многие примитивные действия могут быть запрограммированы неявно посредством принуждения.
Сила контекста – разрешенные приведения:
- мягкий – депроцессинг
- слабый - разыменование или депроцессирование, получение имени
- кроткий – разыменование или депроцедура
- твердый – кроткий, с последующим объединением
- сильный – твердый, за которым следует расширение, гребень или опорожнение
Иерархия приведения с примерами [ править ]
В АЛГОЛе 68 имеется иерархия контекстов, определяющая тип приведения, доступный в конкретной точке программы. Эти контексты:
Контекст
|
Местоположение контекста | Доступны приведения | Примеры принуждения в контексте | ||||
---|---|---|---|---|---|---|---|
Мягкий
|
Слабый
|
Кроткий
|
Твердый
|
Сильный
| |||
Сильный
|
Правая сторона:
Также:
|
депроц edur в
|
Все SOFT, затем слабое разыменование (разыменование или депроцессирование с получением имени)
|
Все WEAK затем разыменовывают (разыменовывают или депроцедурируют)
|
Все MEEK затем объединяются
|
Все ФИРМЫ затем расширяются, гребут или опорожняются.
|
Расширение происходит, если нет потери точности. Например: INT будет преобразовано в REAL , а REAL будет преобразовано в LONG REAL . Но не наоборот. Примеры:
Переменную также можно привести к массиву длиной 1. Например:
|
Твердый
|
|
Пример:
| |||||
Кроткий
|
|
Примеры:
| |||||
Слабый
|
|
Примеры:
| |||||
Мягкий
|
LHS присвоений, как «~» в: ~ := ...
|
Пример:
|
Более подробную информацию о первичных, вторичных, третичных и четвертичных типах см. в разделе Приоритет операторов .
pr & co: Прагматы и комментарии [ править ]
Прагматы — это директивы программы, обычно подсказки компилятору; в новых языках они называются «прагмы» (без «т»). например
Куча PRAGMAT =32 Куча PRAGMAT PR =32 PR
Комментарии можно вставлять разными способами:
¢ Оригинальный способ добавить свои 2 цента в программу ¢ КОММЕНТАРИЙ «жирный» комментарий КОММЕНТАРИЙ CO Стиль i комментарий CO # Комментарий к стилю ii # £ Это комментарий в виде решётки/решетки для британской клавиатуры £
Обычно в АЛГОЛе 68 комментарии не могут быть вложенными. Это ограничение можно обойти, используя различные разделители комментариев (например, использовать хэш только для временного удаления кода).
Выражения и составные операторы [ править ]
АЛГОЛ 68 является языком программирования, ориентированным на выражения , значение, возвращаемое оператором присваивания , является ссылкой на пункт назначения. Таким образом, следующий действительный код АЛГОЛА 68:
НАСТОЯЩАЯ половина пи, одно пи; одно пи := 2 * (половина пи := 2 * дуга 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 условие THEN операторы [ ELSE операторы ] FI «краткая» форма: (условие | утверждения | утверждения )
IF условие1 THEN операторы ELIF условие2 THEN операторы [ ELSE операторы ] FI «краткая» форма: (условие1 | операторы |: условие2 | операторы | операторы )
Эта схема не только позволяет избежать проблемы с висячим else , но также позволяет избежать использования BEGIN
и END
во встроенных последовательностях операторов .
- Условия выбора CASE :
CASE переключатель IN операторы, операторы,... [ OUT операторы ] ESAC «краткая» форма: (переключатель | утверждения, утверждения,... | утверждения )
CASE switch1 IN операторы, операторы,... OUSE switch2 IN операторы, операторы,... [ OUT операторы ] ESAC «Краткая» форма оператора CASE : ( переключатель1 | операторы, операторы,... |: переключатель2 | операторы, операторы,... | операторы )
Пример предложения выбора с краткими символами:
PROC дней в месяце = ( INT год, месяц) INT : (месяц| 31, (год÷×4=0 ∧ год÷×100≠0 ∨ год÷×400=0 | 29 | 28 ), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 );
Пример предложения выбора, выделенного жирным шрифтом:
PROC дней в месяце = ( INT год, месяц) INT : ДЕЛО месяц IN 31, ЕСЛИ год MOD 4 EQ 0 И год MOD 100 NE 0 ИЛИ год MOD 400 EQ 0 THEN 29 ELSE 28 FI , 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ЭСАК ;
Пример предложения выбора, сочетающего жирные и краткие символы:
PROC дней в месяце = ( INT год, месяц) INT : ДЕЛО месяц IN ¢янв.¢ 31, ¢Фев¢ (год MOD 4 = 0 И год MOD 100 ≠ 0 ИЛИ год MOD 400 = 0 | 29 | 28 ), ¢Марта ¢ 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ¢ по декабрь ¢ ЭСАК ;
Algol68 позволял использовать переключатель либо типа INT , либо (единственно) UNION . Последнее позволяет применять строгую типизацию к переменным UNION . . см. , например, объединение ниже
- do : предложение цикла
[ Индекс FOR ] [ FROM first ] [ BY приращение ] [ TO Last ] [ WHILE условие ] DO Операторы OD Таким образом, минимальная форма «предложения цикла» такова: DO операторы OD
Это считалось « универсальным » циклом, полный синтаксис:
ДЛЯ i ОТ 1 ОТ -22 ДО -333 ПОКА i×i≠4444 DO ~ OD
У конструкции есть несколько необычных аспектов:
- только часть DO ~ OD была обязательной, и в этом случае цикл будет повторяться бесконечно.
- таким образом, предложение TO 100 DO ~ OD будет повторяться только 100 раз.
- «Синтаксический элемент WHILE цикла » позволял программисту досрочно выйти из FOR . например
INT сумма sq:=0; ДЛЯ Я ПОКА print(("Пока:",i,newline)); сумма кв≠70↑2 ДЕЛАТЬ сумма sq+:=i↑2 ОД
Последующие «расширения» стандарта Algol68 позволили TO заменить синтаксический элемент на UPTO и DOWNTO для достижения небольшой оптимизации. Те же компиляторы также включили:
- ДО (С) – для позднего завершения шлейфа.
- ДЛЯ КАЖДОГО (С) — для параллельной работы с массивами .
Дополнительные примеры можно найти в примерах кода ниже.
структура, объединение и [:]
: Структуры, объединения и массивы [ править ]
АЛГОЛ 68 поддерживает массивы любого числа измерений и позволяет разрезать целые или частичные строки или столбцы.
РЕЖИМ ВЕКТОР = [1:3] РЕАЛЬНЫЙ ; # векторное объявление MODE (typedef) # MODE MATRIX = [1:3,1:3] REAL ; # объявление MODE матрицы (typedef) # VECTOR v1 := (1,2,3); # переменная массива изначально (1,2,3) # [] РЕАЛЬНЫЙ v2 = (4,5,6); # массив констант, тип эквивалентен VECTOR , границы подразумеваются # OP + = ( VECTOR a,b) VECTOR : двоичного OP- # определение генератора # ( VECTOR out; FOR i FROM ⌊a TO ⌈a DO out[i] := a[i]+b[i] OD ; out); МАТРИЦА m := (v1, v2, v1+v2); печать ((m[,2:])); # фрагмент 2-го и 3-го столбцов #
Матрицы можно разрезать любым способом, например:
ССЫЛОЧНЫЙ ВЕКТОР строка = m[2,]; # определяем REF (указатель) на вторую строку # REF VECTOR col = m[,2]; # определяем REF (указатель) на второй столбец #
АЛГОЛ 68 поддерживает структуры нескольких полей ( STRUCT ) и объединенные режимы . Ссылочные переменные могут указывать на любой MODE, включая срезы массива и поля структуры.
В качестве примера всего этого приведем традиционное объявление связанного списка:
УЗЕЛ РЕЖИМА = СОЮЗ ( VOID , REAL , INT , COMPL , STRING ), LIST = STRUCT ( NODE val, REF LIST следующий);
использования UNION CASE NODE : Пример
Алгол68 р0 как в Заключительном отчете 1968 года | Алгол68 р1 как в пересмотренном отчете 1973 года. |
---|---|
УЗЕЛ n := "1234"; НАСТОЯЩИЙ р; ИНТ я; КОМПЛ с; STRING с СЛУЧАЙ r,i,c,s::=n IN print(("реальный:", r)), print(("int:", i)), print(("compl:", c)), print(("строка:", с)) ВЫХОД печати(("?:", n)) ЭСАК |
УЗЕЛ n := "1234"; # или n := ПУСТОЙ; # СЛУЧАЙ № В ( VOID ): print(("void:", "EMPTY")), ( REAL r): print(("real:", r)), ( INT i): print(("int:", i)), ( COMPL c): print(("compl:", c)), ( STRING s): print(("строка:", s)) ВЫХОД печати(("?:", n)) ЭСАК |
proc: Процедуры [ править ]
Объявления процедур ( PROC ) требуют указания типа как для параметров, так и для результата ( VOID , если нет):
PROC max of real = ( REAL a, b) REAL : ЕСЛИ a > b ТО 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
как с диадической, так и с монадической версиями (сканирование элементов массива).
ПРИО МАКС = 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 ; вне)
Массив, процедура, разыменование и операции приведения [ править ]
ПРИОРИТЕТ | Операция р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 , SHORT |
¬, ↑, ↓, ⌊, ⌈ | НОРМ , СЛЕД , Т , ДЕТ , ИНВ. | 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 и MODE UPB автоматически доступны в UNION разных порядков (и ) массивах . например. УПБ
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
будучи законным, он, вероятно, не сделает того, чего можно было бы ожидать. Они всегда вернутся ЛОЖЬ , потому что они сравнивают фактические адреса переменных ip
и jp
, а не то, на что они указывают . Чтобы добиться нужного эффекта, пришлось бы написать
ip :=: REF INT(jp)
ip :=: REF INT(NIL)
Специальные символы [ править ]
Клавиатура IBM 2741 с символами APL
Большинство «специальных» символов Алгола (⊂, ≡, ␣, ×, ÷, ≤, ≥, ≠, ¬, ⊃, ≡, ∨, ∧, →, ↓, ↑, ⌊, ⌈, ⎩, ⎧, ⊥, ⏨, ¢, ○ и □) можно найти на клавиатуре IBM 2741 со вставленной печатающей головкой APL «мяч для гольфа»; они стали доступны в середине 1960-х годов, когда разрабатывался Алгол 68. Эти символы также являются частью стандарта Unicode , и большинство из них доступны в нескольких популярных шрифтах .
транспут: ввод и вывод [ править ]
Транспут — это термин, используемый для обозначения средств ввода и вывода Алгола 68. Он включает в себя заранее определенные процедуры для неформатированной, форматированной и двоичной передачи. Файлы и другие устройства передачи обрабатываются согласованным и машинонезависимым образом. В следующем примере выводится неформатированный вывод на стандартное устройство вывода :
print ((новая страница, «Название», новая строка, «Значение i равно», i, "и x[i] есть ", x[i], новая строка))
Обратите внимание на предопределенные процедуры 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"Сумма:"x, g(0)$, m + n)); ¢ печатается так же, как: ¢ print ((новая строка, новая строка, «Сумма равна:», пробел, целое (m + n, 0))
пар: Параллельная обработка [ править ]
АЛГОЛ 68 поддерживает программирование параллельной обработки. С помощью ключевого слова PAR вспомогательное предложение преобразуется в параллельное предложение , где синхронизация действий контролируется с помощью семафоров . В A68G параллельные действия отображаются в потоки, если они доступны в операционной системе хоста . В A68S была реализована другая парадигма параллельной обработки (см. ниже).
ПРОК eat = VOID : ( muffins-:=1; print(("Ням!", новая строка))), говорить = VOID : (words-:=1; print(("Як...",новая строка))); INT кексы:= 4, слова:= 8; Устье SEMA = УРОВЕНЬ 1; PAR НАЧИНАЕТСЯ , ПОКА кексы > 0 ДЕЛАТЬ ВНИЗ рта; есть; ВВЕРХ рот ОД , ПОКА слова > 0 ДЕЛАЙТЕ ВНИЗ рта; говорить; ВВЕРХ рот КОНЕЦ ОД
Разное [ править ]
Из-за своей технической сложности АЛГОЛ 68 нуждается в роге изобилия методов, позволяющих отрицать существование чего-либо:
ПРОПУСК , "~" или "?" С – неопределенное значение всегда синтаксически допустимо, EMPTY – единственное допустимое значение VOID , необходимое для выбора VOID в UNION , VOID – синтаксически как MODE , но не один, NIL или «○» – имя, ничего не обозначающее, неопределенного эталонного режима, () или конкретно [1:0] INT — вакуум — это пустой массив (здесь конкретно MODE [] INT ). undefined – процедура отчетов по стандартам, вызывающая исключение в системе времени выполнения. ℵ — используется в отчете о стандартах для предотвращения самоанализа определенных типов. например, SEMA
Термин NIL IS var всегда оценивается как TRUE для любой переменной (но см. выше правильное использование IS :/=:), тогда как неизвестно, какое значение оценивается сравнением x < SKIP для любого целого числа x .
АЛГОЛ 68 намеренно оставляет неопределенным то, что происходит в случае целочисленного переполнения , представление целочисленных битов и степень числовой точности для чисел с плавающей запятой.
Оба официальных отчета включали некоторые расширенные функции, которые не были частью стандартного языка. Они были отмечены знаком ℵ и считались фактически частными. Примеры включают «≮» и «≯» для шаблонов, OUTTYPE / INTYPE для грубого набора текста , а также операторы STRAIGHTOUT и STRAIGHTIN для «выпрямления» вложенных массивов и структур.
Примеры использования [ править ]
Пример кода [ править ]
Этот пример программы реализует «Решето Эратосфена» для поиска всех простых чисел меньше 100. NIL — это аналог нулевого указателя в АЛГОЛе 68 в других языках. Обозначение x OF y обращается к элементу x структуры STRUCT y .
НАЧАЛО # Сито простых чисел Алгол-68, функциональный стиль # Ошибка PROC = ( STRING s) VOID : (print(( новая строка, "ошибка: ", s, новая строка)); ПЕРЕЙТИ к остановке); PROC от одного до = ( INT n) СПИСОК : ( PROC f = ( INT m,n) LIST : (m>n | NIL | cons(m, f(m+1,n))); f(1,n)); РЕЖИМОВ СПИСОК = ОПОРНЫЙ УЗЕЛ ; 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 -фильтр = ( PROC ( INT ) BOOL p, LIST l) LIST : ЕСЛИ l НУЛЬ , ТО НОЛЬ ELIF p(hd(l)) THEN cons(hd(l), filter(p,tl(l))) ELSE фильтр(p, tl(l)) ФИ ; PROC сито = ( СПИСОК l) СПИСОК : THEN I IS NIL ; NIL ELSE PROC not Multiple = ( INT n) BOOL : n MOD hd(l) ~= 0 cons(hd(l), сито( фильтр( не кратный, tl(l) ))) ФИ ; Простые числа PROC = ( INT n) LIST : sieve(tl(one to(n))); показать(простые числа(100)) КОНЕЦ
Операционные системы, написанные 68 ALGOL на
- Компьютер 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 самостоятельным приложением. Другие приложения включают в себя:
- ELLA — язык описания оборудования и набор инструментов поддержки. Разработан Королевским институтом сигналов и радаров в 1980-х и 1990-х годах.
- Система ударного командования RAF 400 тысяч безошибочного кода ALGOL 68-RT . ...» - «... за три человеко-года работы было создано [55]
Библиотеки и API [ править ]
- NAG Numerical Libraries – программная библиотека процедур численного анализа . Поставлялся в АЛГОЛЕ 68 в 1980-х годах.
- TORRIX – система программирования для операций над векторами и матрицами над произвольными полями и переменного размера, разработанная С.Г. ван дер Мейленом и М. Вельдхорстом. [56]
Представление программы [ править ]
Особенностью АЛГОЛА 68, унаследованной от традиции АЛГОЛА , являются его различные представления. Существует язык представления , используемый для описания алгоритмов в печатных работах, строгий язык (строго определенный в Отчете) и официальный справочный язык , предназначенный для использования во входных данных компилятора. В примерах используются слова, набранные ЖИРНЫМ шрифтом, это СТРОГО язык. Зарезервированные слова АЛГОЛа 68 фактически находятся в другом пространстве имен, чем идентификаторы, и в идентификаторах разрешены пробелы, поэтому следующий фрагмент является допустимым:
INT реальный int = 3 ;
Программист, который пишет исполняемый код, не всегда имеет возможность использовать ЖИРНЫЙ шрифт или подчеркивание в коде, поскольку это может зависеть от аппаратного обеспечения и культурных особенностей. Были разработаны различные методы обозначения этих идентификаторов. Это называется стропинг -режимом . Например, все или некоторые из следующих представлений могут быть доступными программными представлениями :
INT реальное int = 3; # СТРОГО язык # 'INT'A REAL INT = 3; # ЦИТАТА обрезает стиль # .INT РЕАЛЬНОЕ INT = 3; # Стиль обрезки POINT # INT реальное int = 3; # ВЕРХНИЙ стиль обрезки # интервал a_real_int = 3; # Стиль ограничения RES, разрешено 61 зарезервированное слово #
Все реализации должны распознавать как минимум POINT, UPPER и RES внутри разделов PRAGMAT. Из них ограничение POINT и UPPER довольно распространено, тогда как ограничение RES противоречит спецификации (поскольку в нем нет зарезервированных слов). ЦИТАТА (кавычка с одинарным апострофом) была первоначальной рекомендацией, тогда как кавычки с совпадающим апострофом, распространенные в АЛГОЛе 60, не часто используются в АЛГОЛе 68. [57]
Следующие символы были рекомендованы для переносимости и названы «достойными символами» в Отчете о стандартном аппаратном представлении Алгола 68, заархивированном 2 января 2014 г. на Wayback Machine :
- ^ Достойные персонажи: ABCDEFGHIJKLM
НОПQRSTUVWXYZ 0123456789 "#$%'()*+,-./:;<=>@[ ]_|
Это отражало проблему 1960-х годов, когда некоторое оборудование не поддерживало ни строчные буквы, ни некоторые другие символы, отличные от ASCII , действительно, в отчете 1973 года было написано: «Четыре достойных символа — «|», «_», «[ «и «]» — часто кодируются по-разному, даже на установках, номинально использующих один и тот же набор символов».
- Базовые персонажи: «Достойные персонажи» представляют собой подмножество «базовых персонажей».
Пример различных представлений программы [ править ]
Представление | Код |
---|---|
Алгол68 "строгий" как обычно публикуется |
¢ подчеркнутый или жирный шрифт ¢ MODE XINT = INT ; XINT сумма кв:=0; ДЛЯ Я ПОКА сумма кв≠70×70 ДЕЛАТЬ сумма sq+:=i↑2 ОД |
Обрезание цитат (например , викитекст ) |
'пр' цитирую 'пр'
'режим' 'xint' = 'int';
'xint' сумма sq:=0;
«для» и «пока»
сумма кв≠70×70
делать
сумма sq+:=i↑2
'странный'
|
Для компилятора 7-битного кода символов | . PR ВЕРХНИЙ .PR
РЕЖИМ XINT = INT;
XINT сумма кв:=0;
ДЛЯ Я ПОКА
сумма кв/=70*70
ДЕЛАТЬ
сумма sq+:=i**2
ОД
|
Для компилятора 6-битного кода символов | . ПР ТОЧКА .PR
. РЕЖИМ .XINT = .INT;
. XINT SUM SQ:=0;
. ДЛЯ Я .ПОКА
СУММА КВ.НЕ 70*70
. ДЕЛАТЬ
СУММА SQ .PLUSAB I .UP 2
. ОД
|
Algol68 с использованием RES -обвязки (зарезервированное слово) |
. PR РЕС .PR
режим .xint = int;
. xint sum sq:=0;
потому что я пока
сумма кв≠70×70
делать
сумма sq+:=i↑2
о.д.
|
АЛГОЛ 68 позволяет каждому естественному языку определять свой собственный набор ключевых слов Алгол-68. В результате программисты могут писать программы, используя ключевые слова своего родного языка. Ниже приведен пример простой процедуры расчета «на следующий день», код на двух языках: английском и немецком. [ нужна цитата ]
# Дата следующего дня — английский вариант # MODE DATE = STRUCT ( INT день, STRING месяц, INT год); PROC на следующий день = ( ДАТА x) ДАТА : ЕСЛИ день OF x < длина месяца (месяц OF x, год OF x) ТОГДА (день x + 1, месяц x , год x ) ELIF месяц OF x = «Декабрь» ТОГДА (1, «январь», год x + 1) ELSE (1, последующий месяц (месяц x ), год x ) ФИ ;
# Последующий день - немецкий вариант # КОЛИЧЕСТВО ДАТА = КОРПУС ( ЦЕЛЫЙ день, СЛОВО месяц, ЦЕЛЫЙ год); ФУНКЦИЯ на следующий день после = ( ДАТА x) ДАТА : ЕСЛИ день x ОТ < длина месяца (месяц ОТ x, год ОТ x) ТО (день ОТ х + 1, месяц ОТ х, год ОТ х) ЕСЛИ месяц ОТ x = "Декабрь" ТОГДА (1, «январь», год ОТ х + 1) ИНАЧЕ (1, последующий месяц(месяц ОТ х), год ОТ х) КОНДИФ ;
Российский/советский пример: На английском языке оператор случая Algol68 читается CASE ~ IN ~ OUT ~ ESAC , на кириллице это читается выб ~ в ~ либо ~ быв .
Изменения [ править ]
Если не указано иное (с надстрочный индекс ), язык, описанный выше, соответствует языку «Пересмотренного отчета (р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 («Не должно выполняться»); TRUE ) ЗАТЕМ ...
вопреки наивным ожиданиям программистов, печать будет только значение разработанного вложенного предложения после ANDF выполнена, поскольку обработано . Текстовая вставка закомментированного PROC BOOL : заставляет его работать.
Некоторые реализации эмулируют ожидаемое поведение для этого особого случая путем расширения языка.
Перед доработкой программист мог решить, что аргументы процедуры будут оцениваться последовательно, а не побочно, используя точки с запятой вместо запятых ( гомм ).
Например в:
PROC- тест = ( REAL a; REAL b) :... ... тест (х ПЛЮС 1, х);
Первый аргумент проверки гарантированно будет оценен раньше второго, но как обычно:
PROC- тест = ( REAL a, b):... ... тест (х ПЛЮС 1, х);
тогда компилятор мог оценивать аргументы в любом порядке.
Предложения по расширению от 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.
Реализация конкретных расширений [ править ]
АЛГОЛ 68Р (Р) от RRE была первой реализацией подмножества ALGOL 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]
См. также [ править ]
Ссылки [ править ]
Цитаты [ править ]
- ^ ван Вейнгаарден, Адриан ; Майу, Барри Джеймс ; Пек, Джон Эдвард Ланселот ; Костер, Корнелис Герман Антоний ; Синцов, Мишель [на французском языке] ; Линдси, Чарльз Ходжсон ; Меертенс, Ламбер Гийом Луи Теодор ; Фискер, Ричард Г., ред. (1976). Пересмотренный отчет об алгоритмическом языке АЛГОЛ 68 (PDF) . Спрингер Верлаг . ISBN 978-0-387-07592-1 . OCLC 1991170 . Архивировано (PDF) из оригинала 19 апреля 2019 г. Проверено 11 мая 2019 г.
- ^ Перейти обратно: а б Деннис Ричи (апрель 1993 г.). «Развитие языка C» (PDF) . Архивировано из оригинала (PDF) 6 ноября 2005 г. Проверено 26 апреля 2007 г.
- ^ Влияние на C: типы, структуры, массивы, указатели и процедуры - Деннис Ритчи [2]
- ^ Перейти обратно: а б Деннис Ричи (июнь 1988 г.). «С и Алгол 68» . Проверено 15 сентября 2006 г.
- ^ Влияние на C: объединение, структура, синтаксис и длинная точность - Деннис Ричи [4]
- ^ «История C++: 1979–1991» (PDF) . Март 1993. Страница 12, 2-й абзац: Algol68 [предоставил] перегрузку операторов (§3.3.3), ссылки (§3.3.4) и возможность объявлять переменные в любом месте блока (§3.3.1) . Проверено 6 мая 2008 г.
- ^ «Интервью с Гвидо ван Россумом» . Июль 1998 г. Архивировано из оригинала 1 мая 2007 г. Проверено 29 апреля 2007 г.
- ^ «Краткая история Алгола 68» . Архивировано из оригинала 10 августа 2006 г. Проверено 15 сентября 2006 г.
- ^ Вир, Марсель ван дер (5 апреля 2023 г.). «Пересмотренный отчет об алгоритмическом языке Алгол 68» . jmvdveer.home.xs4all.nl/ . Архивировано из оригинала 17 марта 2013 г.
- ^ Вир, Марсель ван дер (5 апреля 2023 г.). «Пересмотренный отчет об алгоритмическом языке Алгол 68» . jmvdveer.home.xs4all.nl/ . Архивировано из оригинала 17 марта 2013 г.
- ^ Вир, Марсель ван дер (5 апреля 2023 г.). «Пересмотренный отчет об алгоритмическом языке Алгол 68» . jmvdveer.home.xs4all.nl/ . Архивировано из оригинала 17 марта 2013 г.
- ^ Вир, Марсель ван дер (5 апреля 2023 г.). «Пересмотренный отчет об алгоритмическом языке Алгол 68» . jmvdveer.home.xs4all.nl/ . Архивировано из оригинала 17 марта 2013 г.
- ^ «Гоммас?» .
- ^ Пересмотренный отчет об алгоритмическом языке Algol 68. Архивировано 17 марта 2013 г. в Wayback Machine . jmvdveer.home.xs4all.nl (20 декабря 1968 г.). Проверено 21 июля 2013 г.
- ^ Терехов, Андрей (2014). «АЛГОЛ 68 и его влияние на советское и российское программирование». 2014 Третья Международная конференция по компьютерным технологиям в России и на постсоветском пространстве . стр. 97–106. дои : 10.1109/SoRuCom.2014.29 . ISBN 978-1-4799-1799-0 . S2CID 16097093 .
- ^ http://toc.proceedings.com/25445webtoc.pdf "Алгол 68 и его влияние на программирование в СССР и России" – pages: 336 & 342
- ^ Линдси 1996 .
- ^ Перейти обратно: а б
Линдси, Чарльз Х. (1996). Бергин, Ти Джей; Гибсон, Р.Г. (ред.). История АЛГОЛА 68 . История языков программирования-II . Том. 28. также в Уведомлениях ACM SIGPLAN 28(3), март 1993 г. (включает исчерпывающую библиографию встреч и дискуссий до, во время и после разработки ALGOL 68). АКМ Пресс . стр. 100-1 97–132. дои : 10.1145/155360.155365 . ISBN 978-0-201-89502-5 .
{{cite book}}
:|journal=
игнорируется ( помогите ) - ^ Программирование на Algol 68 стало проще
- ^ Вир, Марсель ван дер. «Марсель ван дер Веер — Джинн Алгола 68» . jmvdveer.home.xs4all.nl/ .
- ^ Линдси 1993 , с. 7.
- ^ Перейти обратно: а б с д Линдси 1993 , с. 9.
- ^ Линдси 1993 , с. 24.
- ^ Перейти обратно: а б Линдси 1993 , с. 10.
- ^ «Алгольский бюллетень» .
- ^ Перейти обратно: а б Линдси 1993 , с. 12.
- ^ «АЛГОЛ 68 с меньшим количеством разрывов» (PDF) . Компьютерный журнал . 15 (1): 176–188.
- ^ Линдси 1993 , с. 13.
- ^ Линдси 1993 , с. 15.
- ^ Хоар, Калифорния Р. (ноябрь 1968 г.). «Критика Алгола 68» . Алгол Бюллетень . 29 : 27–29.
- ^ Перейти обратно: а б Пек, JEL, изд. (1970), Материалы рабочей конференции ИФИП по реализации Алгола 68 , Мюнхен: Северная Голландия, ISBN 0-7204-2045-8
- ^ Перейти обратно: а б с д Костер, CHA «Краткая история Алгола 68» . Архивировано из оригинала 17 декабря 2007 г.
- ^ Ван дер Веер, Марсель. «Реализации Algol 68 с открытым исходным кодом» . algol68.sourceforge.net .
- ^ Э. Маркези, Хосе. «Фронтенд Algol68 для GCC» . jemarch.net .
- ^ Ван Вейнгаарден, А.; Майу, Би Джей; Пек, Дж.; Костер, ЦДХ (1 марта 1968 г.). «Проект отчета об алгоритмическом языке АЛГОЛ 68» . Бюллетень АЛГОЛА (Sup 26): 1–84 . Получено 7 апреля 2023 г. - через март. 1968.
- ^ Сидни Маршалл, «Внедрение АЛГОЛа 68», Материалы рабочей конференции ИФИП по внедрению АЛГОЛа 68 , Мюнхен, 20–24 июля 1970 г., Дж. Э. Пек, редактор, Северная Голландия, страницы 239–243.
- ^ Сидни Маршалл, О реализации Алгола 68 , докторская диссертация, Дартмутский колледж, 1972.
- ^ Пересмотренный отчет Алгола 68
- ^ Блэк, АП; Рэйворд-Смит, виджей (1 мая 1978 г.). АЛГОЛА. «Предложения по АЛГОЛУ H — сверхязыку Бюллетень Алгола (42): 36–49 . Проверено 7 апреля 2023 г. - в мае. 1978.
- ^ "Алгол68 С (С) опубликовано в Интернете» . Архивировано из оригинала 3 декабря 2005 г. Проверено 30 августа 2004 г.
- ^ Вир, Марсель ван дер. «Марсель ван дер Веер — Джинн Алгола 68» . jmvdveer.home.xs4all.nl/ . Проверено 7 апреля 2023 г.
- ^ «Проект отчета об алгоритмическом языке АЛГОЛ 68» . Март 1968 г. Архивировано из оригинала 30 сентября 2007 г. Проверено 22 июня 2007 г.
- ^ «Предпоследний проект отчета об алгоритмическом языке АЛГОЛ 68 – главы 1–9» (PDF) . Октябрь 1968 года . Проверено 22 июня 2007 г. [ постоянная мертвая ссылка ]
- ^ «Предпоследний проект отчета об алгоритмическом языке АЛГОЛ 68 – главы 10–12» (PDF) . Октябрь 1968 года . Проверено 22 июня 2007 г. [ постоянная мертвая ссылка ]
- ^ «Отчет об алгоритмическом языке АЛГОЛ 68» (PDF) . Декабрь 1968 г. Архивировано из оригинала (PDF) 0 апреля 2008 г. Проверено 30 декабря 2007 г.
- ^ «Пересмотренный отчет об алгоритмическом языке Алгол 68» . Сентябрь 1973 г. Архивировано из оригинала 27 сентября 2007 г. Проверено 30 апреля 2007 г.
- ^ Лу Ху-цюань (1971). «Перевод Алгола 68 на китайский язык» (PDF ) Пекин, Китай: Институт математики Академии наук Синика . Проверено 1 августа 2012 г.
- ^ "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 .
- ^ "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 .
- ^ «Синтаксис формата в АЛГОЛе 68G» . Архивировано из оригинала 9 января 2008 г. Проверено 7 апреля 2023 г.
- ^ Нидхэм, РМ; Уилкс, М.В. (январь 1979 г.). «Компьютер Cambridge CAP и его операционная система» (PDF) . Исследования Майкрософт .
- ^ Дэвид Холдсворт (зима 2009–2010 гг.). «Разделение времени KDF9: Элдон 2 — это не EGDON!» . Компьютерное воскрешение — номер 49 . Общество охраны компьютеров . Проверено 3 октября 2010 г.
- ^ ЕСЛИ Карри; Дж. М. Фостер (сентябрь 1982 г.). «Меморандум РСРЭ» (PDF) . vitanuova.com . Проверено 7 апреля 2023 г.
- ^ Эльбрус Бабаяна и Pentium Пентковского . Ixbt.com. Retrieved 21 July 2013.
- ^ Оливер-младший; Ньютон, Р.С. (1979). «Практический опыт работы с АЛГОЛом 68-RT» . Компьютерный журнал . 22 (2): 114–118. дои : 10.1093/comjnl/22.2.114 .
- ^ Приложения, библиотеки и наборы тестов — Группа сохранения программного обеспечения . Softwarepreservation.org. Проверено 21 июля 2013 г.
- ^ Пересмотренный отчет, стр. 123, сноска.
- ^ Линдси, Швейцария (июль 1974 г.). «Частичная параметризация» . Бюллетень Алгола (37): 24–26 . Проверено 19 сентября 2022 г.
- ^ Линдси, Швейцария; Бум, HJ (декабрь 1978 г.). «Модули и отдельная программа компиляции для АЛГОЛа 68» . Бюллетень Алгола (43): 19–53 . Проверено 29 января 2020 г. комментариях Ошибки в
- ^ Линдси, Швейцария (июль 1974 г.). «Модалы» . Бюллетень Алгола (37): 26–29 . Проверено 19 сентября 2022 г.
- ^ «Архивная копия» (PDF) . Архивировано из оригинала (PDF) 15 апреля 2010 г. Проверено 20 марта 2010 г.
{{cite web}}
: CS1 maint: архивная копия в заголовке ( ссылка ) - ^ http://htportal.acm.org/ft_gateway.cfm?id=803425&type=pdf [ постоянная мертвая ссылка ]
- ^ Абстрактная машина АЛГОЛ 68 и ее применение в машинно-независимом компиляторе — Springer . Springerlink.com. Проверено 21 июля 2013 г.
- ^ «Энциклопедия компьютерных языков» . Архивировано из оригинала 10 марта 2011 г. Проверено 20 марта 2010 г.
- ^ Реализации Algol 68 с открытым исходным кодом — просмотр файлов в формате . Sourceforge.net. Проверено 21 июля 2013 г.
- ^ [1] Архивировано 29 августа 2006 г. в Wayback Machine.
- ^ «Архивная копия» (PDF) . Архивировано из оригинала (PDF) 2 января 2014 г. Проверено 27 августа 2005 г.
{{cite web}}
: CS1 maint: архивная копия в заголовке ( ссылка ) - ^ ЦДХ Костер (1993). Создание Алгола 68 . Конспекты лекций по информатике. CiteSeerX 10.1.1.76.2072 .
- ^ Дейкстра, Э.В. «Редактору ALGOL 68 Mathematische Centrum» . Архивировано из оригинала 21 апреля 2007 г. Проверено 28 апреля 2007 г.
- ^ ван Россум, Гвидо (июнь 2005 г.). «Список желаний Python-Dev: бездействовать» . Проверено 28 апреля 2007 г.
- ^ Хоар, ЦАР (февраль 1981 г.) [на основе его лекции на Премии Тьюринга 1980 г. ]. «Старая одежда императора» . Коммуникации АКМ . 24 (2): 75–83. дои : 10.1145/358549.358561 . S2CID 97895 . Альтернативный URL-адрес. Архивировано 2 октября 2017 г. на Wayback Machine.
- ^ «Бюллетень Алгола (упоминается в 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 год.
Внешние ссылки [ править ]
- Пересмотренный отчет об алгоритмическом языке ALGOL 68. Официальный справочник для пользователей и разработчиков языка (большой файл в формате PDF, отсканированный из бюллетеня Algol).
- Пересмотренный отчет об алгоритмическом языке ALGOL 68. HTML-версия пересмотренного отчета с гиперссылкой.
- Учебник по алгоритму 68 , Эндрю С. Таненбаум , в Computing Surveys , Vol. 8, нет. 2 июня 1976 г., с исправлениями (том 9, № 3, сентябрь 1977 г.)
- Algol 68 Genie — компилятор-интерпретатор GNU GPL Algol 68.
- Реализации ALGOL 68 с открытым исходным кодом на SourceForge
- Представление стандартного оборудования Algol68 (.pdf). Архивировано 2 января 2014 г. на Wayback Machine.
- Из истории создания компилятора с Алгол 68
- Алголь 68 – 25 лет в СССР
- Система программ динамической поддержки для транслятора с Алгол 68
- История C с наследием Algol68
- МакДжонс, Пол, «Реализации и диалекты Algol 68» , Группа сохранения программного обеспечения , Музей истории компьютеров , 5 июля 2011 г.
- Компилятор ALGOL 68 с поддержкой Интернета для небольших экспериментов