АЛГОЛ 60 - ALGOL 60

АЛГОЛ 60
Парадигмыпроцедурный, императив, структурированный
СемьяАЛГОЛ
РазработаноBackus, Бауэр, Зеленый, Кац, Маккарти, Наур, Perlis, Рутисхаузер, Самельсон, van Wijngaarden, Вокуа, Wegstein, Woodger
Впервые появился1960; 60 лет назад (1960)
Печатная дисциплинаСтатический, сильный
ОбъемЛексический
Под влиянием
АЛГОЛ 58
Под влиянием
Большинство последующих императивных языков (так называемые АЛГОЛ-подобный языки), например Симула, CPL, Паскаль, Ада, C

АЛГОЛ 60 (Короче для Алгоритмический язык 1960) является членом АЛГОЛ семейство языков программирования. Это последовало из АЛГОЛ 58 который представил блоки кода и начать и конец пары для их разграничения, что представляет собой ключевой шаг вперед в росте структурное программирование. АЛГОЛ 60 был первым языком, реализующим вложенная функция определения с лексическая область. Это привело к появлению многих других языков программирования, в том числе CPL, Симула, BCPL, B, Паскаль, и C. Практически каждый компьютер того времени имел язык системного программирования основан на концепциях АЛГОЛА 60.

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

Стандартизация

АЛГОЛ 60 - с КОБОЛ - были первыми языками, стремящимися к стандартизации.

  • ISO 1538: 1984 Языки программирования - Алгол 60 (стабилизированный)
  • ISO / TR 1672: 1977 Аппаратное представление основных символов АЛГОЛА ... (сейчас снято)

История

Алгол 60 использовался в основном учеными-компьютерщиками в Соединенных Штатах и ​​Европе. Его использованию в коммерческих приложениях мешало отсутствие стандартных средств ввода / вывода в его описании и отсутствие интереса к языку со стороны крупных поставщиков компьютеров. Однако АЛГОЛ 60 действительно стал стандартом для публикации алгоритмов и оказал глубокое влияние на развитие языков в будущем.

Джон Бэкус разработал Бэкус нормальная форма метод описания языков программирования специально для АЛГОЛА 58. Он был переработан и расширен Питер Наур для АЛГОЛА 60, а на Дональд Кнут предложение переименовано Форма Бэкуса – Наура.[1]

Питер Наур: «Как редактор бюллетеня ALGOL я был вовлечен в международные дискуссии по этому языку и в ноябре 1959 года был выбран в группу разработчиков европейских языков. В этом качестве я был редактором подготовленного отчета ALGOL 60. в результате встречи Алгола 60 в Париже в январе 1960 г. "[2]

На встрече в Париже (с 11 по 16 января) присутствовали следующие люди:

Алан Перлис ярко описал эту встречу: «Встречи были утомительными, бесконечными и волнующими. Одно раздражало, когда его хорошие идеи отбрасывались вместе с плохими другими. Тем не менее, усердие сохранялось в течение всего периода. 13 было превосходно ».

Изначально язык не включал рекурсия. Он был добавлен в спецификацию в последний момент, вопреки желанию некоторых членов комитета.[3]

Алгол 60 вдохновил многие последовавшие за ним языки. Тони Хоар заметил: «Этот язык настолько опередил свое время, что стал не только улучшением своих предшественников, но и почти всех своих преемников».[4][5]

Хронология внедрения Алгола 60

На сегодняшний день существует не менее 70 дополнений, расширений, производных и подъязыков Algol 60.[6]

имяГодАвторгосударствоОписаниеЦелевой ЦП
X1 АЛГОЛ 60Август 1960 г.[7]Эдсгер В. Дейкстра и Яап А. ЗонневельдНидерландыПервая реализация АЛГОЛА 60[8]Electrologica X1
Алгол1960[9]Эдгар Т. АйронсСоединенные Штаты АмерикиАлгол 60CDC 1604
Берроуз Алгол
(Несколько вариантов)
1961Корпорация Берроуз (при участии Хора, Dijkstra, и другие)Соединенные Штаты АмерикиОснова Берроуз (и сейчас Unisys MCP на базе) компьютеровБольшие системы Берроуза
а также их средние частоты.
Кейс АЛГОЛ1961Соединенные Штаты АмерикиСимула изначально был заключен по контракту как расширение моделирования Case ALGOLUNIVAC 1107
ГОГОЛЬ1961Уильям М. МакКиманСоединенные Штаты АмерикиДля системы разделения времени ODINPDP-1
DASK АЛГОЛ1961Питер Наур, Йорн ЙенсенДанияАлгол 60DASK в Regnecentralen
SMIL АЛГОЛ1962Торгил Экман, Карл-Эрик ФрёбергШвецияАлгол 60SMIL в Лундский университет
ГИЕРОВСКИЙ АЛГОЛ1962Питер Наур, Йорн ЙенсенДанияАлгол 60GIER в Regnecentralen
Дартмутский АЛГОЛ 301962Томас Юджин Курц и другие.Соединенные Штаты АмерикиLGP-30
Алькор Майнц 20021962Урсула Хилл-Самельсон, Ханс ЛангмаакГерманияСименс 2002
USS 90 Алгол1962Л. ПетронеИталия
Эллиотт АЛГОЛ1962К. А. Р. ХоарВеликобританияОбсуждается в его 1980 г. Премия Тьюринга лекцияЭллиот 803 и Elliott 503
Алгол 601962Роланд Штробель[10]Восточная ГерманияОсуществляется Институтом прикладной математики, Немецкая академия наук в БерлинеZeiss-Rechenautomat ZRA 1
Переводчик Алгола1962Г. ван дер Мей и W.L. ван дер ПоэльНидерландыStaatsbedrijf der Posterijen, Telegrafie en TelefonieЗЕБРА
Kidsgrove Algol1963Ф. Дж. ДунканВеликобританияАнглийская электрическая компания KDF9
ВАЛГОЛ1963Валь ШорреСоединенные Штаты АмерикиИспытание МЕТА II компилятор компилятор
FP6000 Алгол1963Роджер МурКанаданаписано для Саскачеван Пауэр КорпFP6000
Точильный камень1964Брайан Рэнделл и Лоуфорд Джон РасселВеликобританияПодразделение атомной энергии английской электрической компании. Предшественник Ферранти Пегас, Национальные физические лаборатории ACE и Английский Electric DEUCE реализации.Английская электрическая компания KDF9
НУ АЛГОЛ1965НорвегияUNIVAC
Алгол 601965[11]F.E.J. Круземан АрецНидерландыКомпилятор MC для EL-X8Electrologica X8
АЛГЕК1965СССРМинск-22АЛГЭК, на базе АЛГОЛ-60 и КОБОЛ поддержка, для хозяйственных задач
МАЛГОЛ1966опубл. А. Виил, М. Котли и М. Рахенди,Эстонская ССРМинск-22
АЛГАМЫ1967Группа GAMS (ГАМС, группа автоматизированного программирования для машин среднего класса), сотрудничество Академии наук ComeconComeconМинск-22, позже ES EVM, БЭСМ
АЛГОЛ / ЗАМ1967ПольшаПольский ZAM компьютер
Китайский Алгол1972КитайКитайские иероглифы, выраженные через систему символов
DG / L1972Соединенные Штаты АмерикиDG Затмение семейство компьютеров
NASE1990Эрик ШенфельдерГерманияПереводчикLinux и MS Windows
МАРСТ2000Андрей МахоринРоссияПереводчик из Алгол-60 в СиВсе процессоры, поддерживаемые коллекцией компиляторов GNU; MARST является частью проекта GNU

Диалекты Берроуза включали специальные диалекты системного программирования, такие как ESPOL и NEWP.

Свойства

Алгол 60, как официально определено, не имел средств ввода / вывода; реализации определяли свои собственные способы, которые редко были совместимы друг с другом. Напротив, АЛГОЛ 68 предлагает обширную библиотеку передавать (Ввод / вывод на языке Алгола 68).

АЛГОЛ 60 предоставляет два стратегии оценки для параметр прохождение: общий вызов по стоимости, и вызов по имени. В объявлении процедуры указывается для каждого формального параметра, который должен использоваться: ценность указывается для вызова по значению и опускается для вызова по имени. Вызов по имени имеет определенные эффекты в отличие от вызов по ссылке. Например, без указания параметров как ценность или Справка, невозможно разработать процедуру, которая будет менять местами значения двух параметров, если фактические параметры, которые передаются, являются целочисленной переменной и массивом, который индексируется той же целочисленной переменной.[12] Подумайте о передаче указателя на swap (i, A [i]) в функцию. Теперь, когда на своп ссылаются каждый раз, он переоценивается. Скажем, i: = 1 и A [i]: = 2, поэтому каждый раз, когда используется своп, он будет возвращать другую комбинацию значений ([1,2], [2,1], [1,2] и т. Д. на). Аналогичная ситуация возникает со случайной функцией, переданной как фактический аргумент.

Call-by-name известен многим разработчикам компиляторов как интересный "thunks "которые используются для его реализации. Дональд Кнут разработал "тест на мужчину или мальчика "разделить правильно реализованные компиляторы"рекурсия и нелокальные ссылки ». Этот тест содержит пример вызова по имени.

АЛГОЛ 60 Зарезервированные слова и ограниченные идентификаторы

Таких зарезервированных слов в стандарте 35 Большие системы Берроуза подъязык:

  • АЛЬФА
  • ARRAY
  • НАЧАТЬ
  • BOOLEAN
  • КОММЕНТАРИЙ
  • ПРОДОЛЖАТЬ
  • НЕПОСРЕДСТВЕННЫЙ
  • ДЕЛАТЬ
  • ДВОЙНОЙ
  • ELSE
  • КОНЕЦ
  • МЕРОПРИЯТИЕ
  • ЛОЖНЫЙ
  • ФАЙЛ
  • ДЛЯ
  • ФОРМАТ
  • ИДТИ
  • ЕСЛИ
  • ЦЕЛОЕ
  • МЕТКА
  • СПИСОК
  • ДЛИННАЯ
  • СВОЯ
  • УКАЗАТЕЛЬ
  • ПРОЦЕДУРА
  • НАСТОЯЩИЙ
  • ШАГ
  • ПЕРЕКЛЮЧАТЕЛЬ
  • ЗАДАЧА
  • ТОГДА
  • ПРАВДА
  • ДО ТЕХ ПОР
  • ЦЕННОСТЬ
  • В ТО ВРЕМЯ КАК
  • ZIP

В стандартном подязыке больших систем Burroughs есть 71 такой ограниченный идентификатор:

  • ПРИНЯТЬ
  • И
  • ПРИКРЕПЛЯТЬ
  • ОТ
  • ВЫЗОВ
  • КЕЙС
  • ПРИЧИНА
  • БЛИЗКО
  • ОТКЛЮЧИТЬ
  • ОПРЕДЕЛЕНИЕ
  • ОТКЛЮЧИТЬ
  • ОТКЛЮЧИТЬ
  • ДИСПЛЕЙ
  • DIV
  • ДАМП
  • ВКЛЮЧИТЬ
  • EQL
  • EQV
  • ОБМЕН
  • ВНЕШНИЙ
  • ЗАПОЛНИТЬ
  • ВПЕРЕД
  • GEQ
  • GTR
  • IMP
  • В
  • ПРЕРЫВАНИЕ
  • ЯВЛЯЕТСЯ
  • ФУНТ
  • LEQ
  • ОСВОБОДИТЬ
  • ЛИНИЯ
  • ЗАМОК
  • LSS
  • ОБЪЕДИНЕНИЕ
  • MOD
  • МОНИТОР
  • MUX
  • NEQ
  • Нет
  • НЕ
  • НА
  • ОТКРЫТО
  • ИЛИ
  • ВНЕ
  • КАРТИНА
  • ОБРАБОТАТЬ
  • ЗАКАЗАТЬ
  • PROGRAMDUMP
  • РБ
  • ЧИТАТЬ
  • ВЫПУСК
  • ЗАМЕНИТЬ
  • СБРОС НАСТРОЕК
  • ИЗМЕНИТЬ РАЗМЕР
  • НАЗАД
  • БЕГАТЬ
  • СКАНИРОВАТЬ
  • СТРЕМИТЬСЯ
  • НАБОР
  • ПРОПУСКАТЬ
  • СОРТИРОВАТЬ
  • КОСМОС
  • СВОП
  • THRU
  • ВРЕМЯ
  • К
  • ПОДОЖДИТЕ
  • КОГДА
  • С УЧАСТИЕМ
  • ЗАПИСЫВАТЬ

а также имена всех встроенных функций.

Стандартные операторы

ПриоритетОператор
первый
арифметика
первый↑ (мощность)
второй×, / (вещественное), ÷ (целое)
в третьих+, -
второй<, ≤, =, ≥, >, ≠
в третьих¬ (нет)
четвертый∧ (и)
пятый∨ (или)
шестой⊃ (импликация)
седьмой≡ (эквивалентность)

Примеры и проблемы переносимости

Сравнение образцов кода

АЛГОЛ 60

процедура Absmax (a) Размер: (n, m) Результат: (y) Индексы: (i, k); ценность п, м; массив а; целое число п, м, я, к; настоящий у;комментарий Абсолютно наибольший элемент матрицы a размером n на m переносится в y, а нижние индексы этого элемента в i и k;начать    целое число р, д; у: = 0; i: = k: = 1; для р: = 1 шаг 1 до тех пор п делать        для q: = 1 шаг 1 до тех пор м делать            если abs (a [p, q])> y тогда                начать y: = abs (a [p, q]); i: = p; k: = q конецконец Absmax

Реализации отличаются тем, как должен быть написан текст, выделенный жирным шрифтом. Слово INTEGER, включая кавычки, должно использоваться в некоторых реализациях вместо целое число, выше, тем самым обозначение это как особое ключевое слово.

Ниже приведен пример создания таблицы с использованием Эллиот 803 АЛГОЛ:[13]

 ТЕСТ АЛГОЛА С ПЛАВАЮЩЕЙ ТОЧКОЙ 'НАЧАТЬ REAL A, B, C, D' ПРОЧИТАТЬ D 'ДЛЯ A: = 0,0 ШАГ D ДО 6,3 НАЧАТЬ ПЕЧАТЬ ПУАНСОН (3), $$ L ?? ' B: = SIN (A) 'C: = COS (A)' ПЕЧАТЬ ПУАНСОН (3),САМЕЛИН,ВЫРАВНИВАЕМЫЙ (1,6), A, B, C 'КОНЕЦ' КОНЕЦ '

Семейство АЛГОЛ 60

Поскольку в ALGOL 60 не было средств ввода-вывода, нет переносимого привет мировая программа в АЛГОЛ. Следующая программа может (и по-прежнему будет) компилироваться и запускаться на реализации ALGOL для мэйнфрейма Unisys A-Series и представляет собой прямое упрощение кода, взятого из The Language Guide.[14] на университет Мичигана -Дорогой отдел компьютерных и информационных наук Привет, мир! Страница примера программы ALGOL.[15]

НАЧАТЬ ФАЙЛ F (KIND = REMOTE); EBCDIC ARRAY E [0:11]; ЗАМЕНИТЕ E НА «ПРИВЕТ, МИР!»; ЗАПИСАТЬ (F, *, E); КОНЕЦ.

Более простая программа, использующая встроенный формат:

НАЧАТЬ ФАЙЛ F (KIND = REMOTE); WRITE (F, <"ПРИВЕТ, МИР!">); КОНЕЦ.

Еще более простая программа с использованием оператора Display:

НАЧАТЬ ОТОБРАЖЕНИЕ («ПРИВЕТ, МИР!») КОНЕЦ.

Альтернативный пример использования ввода-вывода Elliott Algol выглядит следующим образом. Эллиот Алгол использовал разные символы для "кавычки-открытой строки" и "кавычки-закрытой строки", представленных здесь и .

 программа Привет народ; начать    Распечатать Привет мирконец;

Вот версия для Elliott 803 Algol (A104). В стандартной версии Elliott 803 использовалась бумажная лента с 5 отверстиями и, следовательно, только верхний регистр. В коде отсутствовали кавычки, поэтому £ (знак фунта) использовался для открытой котировки и ? (знак вопроса) для закрытия цитаты. Специальные последовательности были заключены в двойные кавычки (например, на телетайпе появилась новая строка с помощью £$ L ??).

  HIFOLKS 'НАЧАТЬ ПЕЧАТЬ £ HELLO WORLD £ L ??' КОНЕЦ'

В ИКТ 1900 серии Версия ввода / вывода Algol допускала ввод с бумажной ленты или перфокарты. Бумажная лента в «полном» режиме допускает строчные буквы. Вывод был на строчный принтер. Обратите внимание на использование '(', ')' и%.[16]

  'ПРОГРАММА' (ПРИВЕТ) 'НАЧАЛО' 'КОММЕНТАРИЙ' ОТКРЫТАЯ ЦИТАТА '(', ЗАКРЫТЬ ')', ПЕЧАТЬ ДОЛЖНА БЫТЬ НАПИСАНА, КАК%, ПОТОМУ ЧТО ПРОБЕЛЫ ИГНОРИРОВАНЫ; НАПИСАТЬ ТЕКСТ ('(' HELLO% WORLD ')'); 'КОНЕЦ' 'ОТДЕЛКА'

Смотрите также

использованная литература

  1. ^ Кнут, Дональд Э. (декабрь 1964 г.). «Нормальная форма Бэкуса против формы Бэкуса Наура». Comm. ACM. 7 (12): 735–6. Дои:10.1145/355588.365140. S2CID  47537431.
  2. ^ Ссылка на премию ACM / Питер Наур, 2005
  3. ^ ван Эмден, Маартен (2014). «Как рекурсия попала в программирование: рассказ об интригах, предательстве и продвинутой семантике языка программирования». Место программиста.
  4. ^ Хоар, C.A.R. (Декабрь 1973 г.). «Подсказки по дизайну языков программирования» (PDF). п. 27. (Это утверждение иногда ошибочно приписывают Эдсгер В. Дейкстра, также участвовал в реализации первого АЛГОЛА 60 компилятор.)
  5. ^ Абельсон, Хэл; Dybvig, R.K .; и другие. Рис, Джонатан; Клингер, Уильям (ред.). «Пересмотренный (3) отчет по алгоритмической языковой схеме (посвященный памяти АЛГОЛА 60)». Получено 2009-10-20.
  6. ^ Энциклопедия компьютерных языков В архиве 27 сентября 2011 г. Wayback Machine
  7. ^ Дневной свет, Э. Г. (2011). «Призыв Дейкстры к обобщению: появление рекурсивной процедуры, конец 1950-х - начало 1960-х годов». Компьютерный журнал. 54 (11): 1756–1772. Дои:10.1093 / comjnl / bxr002.
  8. ^ Круземан Арец, F.E.J. (30 июня 2003 г.). "Компилятор Dijkstra-Zonneveld ALGOL 60 для Electrologica X1" (PDF). Программная инженерия. История компьютерных наук. Kruislaan 413, 1098 SJ Amsterdam: Centrum Wiskunde & Informatica.CS1 maint: location (ссылка на сайт)
  9. ^ Айронс, Эдгар Т., Синтаксически управляемый компилятор для АЛГОЛА 60, Сообщения ACM, Vol. 4, стр. 51. (январь 1961 г.).
  10. ^ Rechenautomaten mit Trommelspeicher, Förderverein der Technischen Sammlung Dresden
  11. ^ Круземан Арец, F.E.J. (1973). Компилятор Algol 60 в Algol 60. Математический центр трактатов. Амстердам: Mathematisch Centrum.
  12. ^ Ахо, Альфред В.; Рави Сетхи; Джеффри Д. Уллман (1986). Компиляторы: принципы, методы и инструменты (1-е изд.). Эддисон-Уэсли. ISBN  978-0-201-10194-2., Раздел 7.5 и ссылки в нем
  13. ^ «АЛГОЛ 803», руководство для Эллиот 803 АЛГОЛ
  14. ^ https://web.archive.org/web/20100209040840/http://www.engin.umd.umich.edu/CIS/course.des/cis400/index.html
  15. ^ https://web.archive.org/web/20100204112923/http://www.engin.umd.umich.edu/CIS/course.des/cis400/algol/hworld.html
  16. ^ «Серия ICL 1900: язык Алгол». Техническая публикация ICL 3340. 1965.

дальнейшее чтение

внешние ссылки