АЛГОЛ 60 - ALGOL 60
Парадигмы | процедурный, императив, структурированный |
---|---|
Семья | АЛГОЛ |
Разработано | Backus, Бауэр, Зеленый, Кац, Маккарти, Наур, Perlis, Рутисхаузер, Самельсон, van Wijngaarden, Вокуа, Wegstein, Woodger |
Впервые появился | 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] | Эдгар Т. Айронс | Соединенные Штаты Америки | Алгол 60 | CDC 1604 |
Берроуз Алгол (Несколько вариантов) | 1961 | Корпорация Берроуз (при участии Хора, Dijkstra, и другие) | Соединенные Штаты Америки | Основа Берроуз (и сейчас Unisys MCP на базе) компьютеров | Большие системы Берроуза а также их средние частоты. |
Кейс АЛГОЛ | 1961 | Соединенные Штаты Америки | Симула изначально был заключен по контракту как расширение моделирования Case ALGOL | UNIVAC 1107 | |
ГОГОЛЬ | 1961 | Уильям М. МакКиман | Соединенные Штаты Америки | Для системы разделения времени ODIN | PDP-1 |
DASK АЛГОЛ | 1961 | Питер Наур, Йорн Йенсен | Дания | Алгол 60 | DASK в Regnecentralen |
SMIL АЛГОЛ | 1962 | Торгил Экман, Карл-Эрик Фрёберг | Швеция | Алгол 60 | SMIL в Лундский университет |
ГИЕРОВСКИЙ АЛГОЛ | 1962 | Питер Наур, Йорн Йенсен | Дания | Алгол 60 | GIER в Regnecentralen |
Дартмутский АЛГОЛ 30 | 1962 | Томас Юджин Курц и другие. | Соединенные Штаты Америки | LGP-30 | |
Алькор Майнц 2002 | 1962 | Урсула Хилл-Самельсон, Ханс Лангмаак | Германия | Сименс 2002 | |
USS 90 Алгол | 1962 | Л. Петроне | Италия | ||
Эллиотт АЛГОЛ | 1962 | К. А. Р. Хоар | Великобритания | Обсуждается в его 1980 г. Премия Тьюринга лекция | Эллиот 803 и Elliott 503 |
Алгол 60 | 1962 | Роланд Штробель[10] | Восточная Германия | Осуществляется Институтом прикладной математики, Немецкая академия наук в Берлине | Zeiss-Rechenautomat ZRA 1 |
Переводчик Алгола | 1962 | Г. ван дер Мей и W.L. ван дер Поэль | Нидерланды | Staatsbedrijf der Posterijen, Telegrafie en Telefonie | ЗЕБРА |
Kidsgrove Algol | 1963 | Ф. Дж. Дункан | Великобритания | Английская электрическая компания KDF9 | |
ВАЛГОЛ | 1963 | Валь Шорре | Соединенные Штаты Америки | Испытание МЕТА II компилятор компилятор | |
FP6000 Алгол | 1963 | Роджер Мур | Канада | написано для Саскачеван Пауэр Корп | FP6000 |
Точильный камень | 1964 | Брайан Рэнделл и Лоуфорд Джон Рассел | Великобритания | Подразделение атомной энергии английской электрической компании. Предшественник Ферранти Пегас, Национальные физические лаборатории ACE и Английский Electric DEUCE реализации. | Английская электрическая компания KDF9 |
НУ АЛГОЛ | 1965 | Норвегия | UNIVAC | ||
Алгол 60 | 1965[11] | F.E.J. Круземан Арец | Нидерланды | Компилятор MC для EL-X8 | Electrologica X8 |
АЛГЕК | 1965 | СССР | Минск-22 | АЛГЭК, на базе АЛГОЛ-60 и КОБОЛ поддержка, для хозяйственных задач | |
МАЛГОЛ | 1966 | опубл. А. Виил, М. Котли и М. Рахенди, | Эстонская ССР | Минск-22 | |
АЛГАМЫ | 1967 | Группа GAMS (ГАМС, группа автоматизированного программирования для машин среднего класса), сотрудничество Академии наук Comecon | Comecon | Минск-22, позже ES EVM, БЭСМ | |
АЛГОЛ / ЗАМ | 1967 | Польша | Польский ZAM компьютер | ||
Китайский Алгол | 1972 | Китай | Китайские иероглифы, выраженные через систему символов | ||
DG / L | 1972 | Соединенные Штаты Америки | DG Затмение семейство компьютеров | ||
NASE | 1990 | Эрик Шенфельдер | Германия | Переводчик | 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 Большие системы Берроуза подъязык:
|
|
|
|
|
В стандартном подязыке больших систем Burroughs есть 71 такой ограниченный идентификатор:
|
|
|
|
|
а также имена всех встроенных функций.
Стандартные операторы
Приоритет | Оператор | |
---|---|---|
первый арифметика | первый | ↑ (мощность) |
второй | ×, / (вещественное), ÷ (целое) | |
в третьих | +, - | |
второй | <, ≤, =, ≥, >, ≠ | |
в третьих | ¬ (нет) | |
четвертый | ∧ (и) | |
пятый | ∨ (или) | |
шестой | ⊃ (импликация) | |
седьмой | ≡ (эквивалентность) |
Примеры и проблемы переносимости
Сравнение образцов кода
АЛГОЛ 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 ')'); 'КОНЕЦ' 'ОТДЕЛКА'
Смотрите также
использованная литература
- ^ Кнут, Дональд Э. (декабрь 1964 г.). «Нормальная форма Бэкуса против формы Бэкуса Наура». Comm. ACM. 7 (12): 735–6. Дои:10.1145/355588.365140. S2CID 47537431.
- ^ Ссылка на премию ACM / Питер Наур, 2005
- ^ ван Эмден, Маартен (2014). «Как рекурсия попала в программирование: рассказ об интригах, предательстве и продвинутой семантике языка программирования». Место программиста.
- ^ Хоар, C.A.R. (Декабрь 1973 г.). «Подсказки по дизайну языков программирования» (PDF). п. 27. (Это утверждение иногда ошибочно приписывают Эдсгер В. Дейкстра, также участвовал в реализации первого АЛГОЛА 60 компилятор.)
- ^ Абельсон, Хэл; Dybvig, R.K .; и другие. Рис, Джонатан; Клингер, Уильям (ред.). «Пересмотренный (3) отчет по алгоритмической языковой схеме (посвященный памяти АЛГОЛА 60)». Получено 2009-10-20.
- ^ Энциклопедия компьютерных языков В архиве 27 сентября 2011 г. Wayback Machine
- ^ Дневной свет, Э. Г. (2011). «Призыв Дейкстры к обобщению: появление рекурсивной процедуры, конец 1950-х - начало 1960-х годов». Компьютерный журнал. 54 (11): 1756–1772. Дои:10.1093 / comjnl / bxr002.
- ^ Круземан Арец, F.E.J. (30 июня 2003 г.). "Компилятор Dijkstra-Zonneveld ALGOL 60 для Electrologica X1" (PDF). Программная инженерия. История компьютерных наук. Kruislaan 413, 1098 SJ Amsterdam: Centrum Wiskunde & Informatica.CS1 maint: location (ссылка на сайт)
- ^ Айронс, Эдгар Т., Синтаксически управляемый компилятор для АЛГОЛА 60, Сообщения ACM, Vol. 4, стр. 51. (январь 1961 г.).
- ^ Rechenautomaten mit Trommelspeicher, Förderverein der Technischen Sammlung Dresden
- ^ Круземан Арец, F.E.J. (1973). Компилятор Algol 60 в Algol 60. Математический центр трактатов. Амстердам: Mathematisch Centrum.
- ^ Ахо, Альфред В.; Рави Сетхи; Джеффри Д. Уллман (1986). Компиляторы: принципы, методы и инструменты (1-е изд.). Эддисон-Уэсли. ISBN 978-0-201-10194-2., Раздел 7.5 и ссылки в нем
- ^ «АЛГОЛ 803», руководство для Эллиот 803 АЛГОЛ
- ^ https://web.archive.org/web/20100209040840/http://www.engin.umd.umich.edu/CIS/course.des/cis400/index.html
- ^ https://web.archive.org/web/20100204112923/http://www.engin.umd.umich.edu/CIS/course.des/cis400/algol/hworld.html
- ^ «Серия ICL 1900: язык Алгол». Техническая публикация ICL 3340. 1965.
дальнейшее чтение
- Дейкстра, Эдсгер В. (1961). «Перевод на Алгол 60: транслятор на Алгол 60 для X1 и создание транслятора для Алгола 60» (PDF) (Технический отчет). Амстердам: Mathematisch Centrum. 35.
- Рэнделл, Брайан; Рассел, Лоуфорд Джон (1964). Реализация АЛГОЛА 60: перевод и использование программ АЛГОЛА 60 на компьютере. Академическая пресса. OCLC 526731. Дизайн Компилятор Whetstone. Одно из ранее опубликованных описаний реализации компилятора. См. Соответствующие статьи: Вертикальный Алгол точильного камня, и Переводчик Алгола Whetstone KDF9 от Брайан Рэнделл
внешние ссылки
- Пересмотренный отчет по алгоритмическому языку Algol 60 Питер Наур и др. Определение АЛГОЛА
- BNF резюме синтаксиса АЛГОЛА 60
- "Старая одежда императора" - Речь Хора на Премии Тьюринга 1980 ACM, в которой обсуждается история Алгола и его участие
- МАРСТ, бесплатный переводчик Algol-to-C
- Реализация АЛГОЛА 60 для FP6000 Обсуждение некоторых вопросов реализации.
- Наур, Питер (август 1978 г.). «Европейская сторона последней фазы разработки АЛГОЛА 60». Уведомления ACM SIGPLAN. 13 (8): 15–44. Дои:10.1145/960118.808370. S2CID 15552479.
- Эдинбургский университет написал компиляторы для Algol60 (позже обновленный для Algol60M) на основе компиляторов Atlas Autocode, изначально загруженных из Atlas в KDF-9. Компиляторы Эдинбурга сгенерировали код для ICL1900, ICL4 / 75 (клон IBM360) и ICL2900. Здесь BNF для Algol60 и Исходный код компилятора ICL2900, документация библиотеки, и значительный набор тестов в том числе Тесты Брайана Вихмана. Также есть довольно поверхностный Переводчик уровня исходного кода с Algol60 в Atlas Autocode.
- Эрик С. Раймонд с Музей ретрокомпьютеров, в том числе ссылка на интерпретатор NASE Algol-60, написанный на C.
- Интерпретатор NASE
- Истории о B5000 и людях, которые там были: специальный компьютер на языке ALGOL [1], [2]
- Герман Боттенбрух (1961). «Структура и использование АЛГОЛА 60». Дои:10.2172/4020495. Цитировать журнал требует
| журнал =
(Помогите) - ЧИСЛО Библиотека числовых процедур на Алголе 60, разработанная в Stichting Centrum Wiskunde & Informatica (правопреемник Stichting Mathematisch Centrum) законный владелец.
- Ресурсы по Algol 60: переводчики, документация, программы