~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ 430FC9D7A27F1F8F8598B556BFBE4DA3__1717322580 ✰
Заголовок документа оригинал.:
✰ ALGOL 68 - Wikipedia ✰
Заголовок документа перевод.:
✰ Алгол 68 — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/ALGOL_68 ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/43/a3/430fc9d7a27f1f8f8598b556bfbe4da3.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/43/a3/430fc9d7a27f1f8f8598b556bfbe4da3__translat.html ✰
Дата и время сохранения документа:
✰ 11.06.2024 06:15:29 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 2 June 2024, at 13:03 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

Алгол 68 — Википедия Jump to content

АЛГОЛ 68

Из Википедии, бесплатной энциклопедии

АЛГОЛ 68
Пересмотренный отчет об алгоритмическом языке - алгоритм 68. Под редакцией: А. ван Вейнгаардена и др., сентябрь 1973 г. [1]
Парадигмы Мультипарадигма : одновременная , императивная
Семья АЛГОЛ
Разработано А. ван Вейнгаарден , Б. Дж. Майу , Дж. Э. Пек и ЧА Костер и др.
Впервые появился Итоговый отчет: 1968 г .; 56 лет назад ( 1968 ) р0
Стабильная версия
Алгол 68/РР / Пересмотренный отчет: 1973 г .; 51 год назад ( 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 был первым (и, возможно, одним из последних) основных языков, для которого было дано полное формальное определение до его реализации.

ЦДХ Костер [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-Р (Р) под управлением 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: 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 . Выражение может также давать множественное значение , которое создается из других значений с помощью вспомогательного предложения . Эта конструкция выглядит как пакет параметров вызова процедуры.

режим: Объявления [ править ]

Основные типы данных (называемые modes на языке Алгола 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 имеется иерархия контекстов, определяющая тип приведения, доступный в конкретной точке программы. Эти контексты:

Контекст
Местоположение контекста Доступны приведения Примеры принуждения в контексте
Мягкий
Слабый
Кроткий
Твердый
Сильный
Сильный
Правая сторона:
  • Декларации личности, как «~» в: 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  =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 самостоятельным приложением. Другие приложения включают в себя:

Библиотеки и API [ править ]

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

Особенностью АЛГОЛА 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]

См. также [ править ]

Ссылки [ править ]

Цитаты [ править ]

  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). АКМ Пресс . стр. 100-1 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. ^ «АЛГОЛ 68 с меньшим количеством разрывов» (PDF) . Компьютерный журнал . 15 (1): 176–188.
  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) 0 апреля 2008 г. Проверено 30 декабря 2007 г.
  46. ^ «Пересмотренный отчет об алгоритмическом языке Алгол 68» . Сентябрь 1973 г. Архивировано из оригинала 27 сентября 2007 г. Проверено 30 апреля 2007 г.
  47. ^ Лу Ху-цюань (1971). «Перевод Алгола 68 на китайский язык» (PDF ) Пекин, Китай: Институт математики Академии наук Синика . Проверено 1 августа 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
Номер скриншота №: 430FC9D7A27F1F8F8598B556BFBE4DA3__1717322580
URL1:https://en.wikipedia.org/wiki/ALGOL_68
Заголовок, (Title) документа по адресу, URL1:
ALGOL 68 - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)