Парадигмы | процедурный , императивный , структурированный |
---|---|
Семья | АЛГОЛ |
Разработано | Бэкус , Бауэр , Грин , Кац , Маккарти , Наур , Перлис , Рутисхаузер , Самельсон , ван Вейнгаарден , Вокуа , Вегштейн , Вудгер |
Впервые появился | 1960 |
Печатная дисциплина | Статичный , сильный |
Объем | Лексический |
Под влиянием | |
АЛГОЛ 58 | |
Под влиянием | |
Большинство последующих императивных языков (так называемых АЛГОЛ-подобных языков), например Simula , CPL , Pascal , Ada , C |
АЛГОЛ 60 (сокращение от « Алгоритмический язык 1960» ) является членом семейства языков программирования АЛГОЛ . Она последовала за Алгол 58 , который ввел кодовые блоки и тому begin
и end
пар для ограничивающих их, представляя собой ключевой шаг вперед в повышении структурного программирования . АЛГОЛ 60 был первым языком, реализующим определения вложенных функций с лексической областью видимости . Это привело к появлению многих других языков программирования, включая CPL , Simula , BCPL , B , Pascal и C.. Практически каждый компьютер того времени имел язык системного программирования, основанный на концепциях АЛГОЛА 60.
Никлаус Вирт основал свой собственный ALGOL W на ALGOL 60, прежде чем перейти к разработке Pascal . Предполагалось, что Алгол-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 дополнений, расширений, производных и подъязыков Алгола 60. [6]
Имя | Год | Автор | Состояние | Описание | Целевой ЦП | ||
---|---|---|---|---|---|---|---|
X1 АЛГОЛ 60 | Август 1960 [7] | Эдсгер В. Дейкстра и Яап А. Зонневельд | Нидерланды | Первая реализация АЛГОЛА 60 [8] | Electrologica X1 | ||
Алгол | 1960 [9] | Эдгар Т. Айронс | Соединенные Штаты Америки | Алгол 60 | CDC 1604 | ||
Алгол Берроуза (несколько вариантов) | 1961 г. | Burroughs Corporation (при участии Хора, Дейкстры и др.) | Соединенные Штаты Америки | Основа компьютеров Burroughs (а теперь и Unisys MCP ) | Большие системы Берроуза, а также их среднечастотные системы. | ||
Кейс АЛГОЛ | 1961 г. | Соединенные Штаты Америки | Изначально Simula была разработана как расширение для моделирования Case ALGOL. | UNIVAC 1107 | |||
ГОГОЛЬ | 1961 г. | Уильям М. МакКиман | Соединенные Штаты Америки | Для системы разделения времени ODIN | PDP-1 | ||
DASK АЛГОЛ | 1961 г. | Питер Наур , Йорн Йенсен | Дания | Алгол 60 | DASK в Regnecentralen | ||
SMIL АЛГОЛ | 1962 г. | Торгил Экман , Карл-Эрик Фрёберг | Швеция | Алгол 60 | СМИЛ в Лундском университете | ||
ГИЕРОВСКИЙ АЛГОЛ | 1962 г. | Питер Наур , Йорн Йенсен | Дания | Алгол 60 | GIER в Regnecentralen | ||
Дартмутский АЛГОЛ 30 | 1962 г. | Томас Юджин Курц и др. | Соединенные Штаты Америки | LGP-30 | |||
Алькор Майнц 2002 | 1962 г. | Урсула Хилл-Самельсон, Ханс Лангмаак | Германия | Сименс 2002 | |||
USS 90 Алгол | 1962 г. | Л. Петроне | Италия | ||||
Эллиотт АЛГОЛ | 1962 г. | АВТОМОБИЛЬ Хоар | Великобритания | Обсуждался в его лекции 1980 года по Премии Тьюринга. | Elliott 803 и Elliott 503 | ||
Алгол 60 | 1962 г. | Роланд Штробель [10] | Восточная Германия | Осуществляется Институтом прикладной математики Немецкой академии наук в Берлине. | Zeiss-Rechenautomat ZRA 1 | ||
Переводчик Алгола | 1962 г. | Г. ван дер Мей и В. Л. ван дер Поэль | Нидерланды | Staatsbedrijf der Posterijen, Telegrafie en Telefonie | ЗЕБРА | ||
Kidsgrove Algol | 1963 г. | Ф. Г. Дункан | Великобритания | Английская электрическая компания KDF9 | |||
ВАЛГОЛ | 1963 г. | Валь Шорре | Соединенные Штаты Америки | Тест компилятора компилятора META II | |||
FP6000 Алгол | 1963 г. | Роджер Мур | Канада | написано для Saskatchewan Power Corp | FP6000 | ||
Точильный камень | 1964 г. | Брайан Рэнделл и Лоуфорд Джон Рассел | Великобритания | Подразделение Атомной Энергии Английской Электрической Компании. Предшественник Ferranti Pegasus , национальных физических лабораторий ACE и английских реализаций Electric DEUCE . | Английская электрическая компания KDF9 | ||
АЛГОЛ 60 | 1964 г. | Жан-Клод Буссар [11] | Франция | Institut d'informatique et mathématiques appliquées de Grenoble | IBM 7090 | ||
АЛГОЛ 60 | 1965 г. | Клод Пара | [12]Франция | Centre de Calcul de la Faculté des Sciences de Nancy | IBM 1620 | ||
НУ АЛГОЛ | 1965 г. | Норвегия | UNIVAC | ||||
Алгол 60 | 1965 [13] | FEJ Kruseman Aretz | Нидерланды | Компилятор MC для EL-X8 | Electrologica X8 | ||
АЛГЕК | 1965 г. | СССР | Минск-22 | АЛГЭК на базе АЛГОЛ-60 и COBOL для хозяйственных задач. | |||
МАЛГОЛ | 1966 г. | опубл. А. Виил, М. Котли и М. Рахенди, | Эстонская ССР | Минск-22 | |||
АЛГАМЫ | 1967 | Группа GAMS (ГАМС, группа автоматизированного программирования для машин среднего класса), сотрудничество Академии наук Comecon | Comecon | Минск-22 , позже ЕС ЭВМ , БЭСМ | |||
АЛГОЛ / ЗАМ | 1967 | Польша | Польский компьютер ZAM | ||||
Китайский Алгол | 1972 г. | Китай | Китайские иероглифы, выраженные через систему символов | ||||
DG / L | 1972 г. | Соединенные Штаты Америки | Семейство компьютеров DG Eclipse | ||||
NASE | 1990 г. | Эрик Шенфельдер | Германия | Устный переводчик | Linux и MS Windows | ||
МАРСТ | 2000 г. | Андрей Махорин | Россия | Переводчик из Алгол-60 в Си | Все процессоры, поддерживаемые коллекцией компиляторов GNU; MARST является частью проекта GNU |
Диалекты Берроуза включали специальные диалекты системного программирования, такие как ESPOL и NEWP .
Свойства [ править ]
Алгол 60, как он официально определен, не имел средств ввода-вывода; реализации определяли свои собственные способы, которые редко были совместимы друг с другом. В противоположность этому , алгол 68 предложил обширную библиотеку transput (Algol 68 просторечии для ввода / вывода) объектов.
Алгол 60 предоставляет две стратегии оценки для передачи параметров : общий вызов по значению и вызов по имени . В объявлении процедуры указывается для каждого формального параметра, который должен использоваться: значение, указанное для вызова по значению, и опускается для вызова по имени. Вызов по имени имеет определенные эффекты в отличие от вызова по ссылке . Например, без указания параметров в качестве значения или ссылки невозможно разработать процедуру, которая будет менять местами значения двух параметров, если фактические параметры, которые передаются, являются целочисленной переменной и массивом, который индексируется той же целочисленной переменной. . [14]Подумайте о передаче указателя на swap (i, A [i]) в функцию. Теперь, когда на своп ссылаются каждый раз, он переоценивается. Скажем, i: = 1 и A [i]: = 2, поэтому каждый раз, когда используется своп, он будет возвращать другую комбинацию значений ([1,2], [2,1], [1,2] и т. Д. на). Аналогичная ситуация происходит со случайной функцией, переданной как фактический аргумент.
Функция вызова по имени известна многим разработчикам компиляторов благодаря интересным « переходникам », которые используются для ее реализации. Дональд Кнут разработал « тест человека или мальчика » для разделения компиляторов, которые правильно реализовали « рекурсию и нелокальные ссылки». Этот тест содержит пример вызова по имени.
АЛГОЛ 60 Зарезервированные слова и ограниченные идентификаторы [ править ]
В стандартном подязыке больших систем Burroughs есть 35 таких зарезервированных слов :
|
|
|
|
|
В стандартном подязыке больших систем Burroughs есть 71 такой ограниченный идентификатор:
|
|
|
|
|
а также имена всех встроенных функций.
Стандартные операторы [ править ]
Приоритет | Оператор | |
---|---|---|
первая арифметика | первый | ↑ (мощность) |
второй | ×, / (вещественное), ÷ (целое) | |
в третьих | +, - | |
второй | <, ≤, =, ≥,>, ≠ | |
в третьих | ¬ (нет) | |
четвертый | ∧ (и) | |
пятый | ∨ (или) | |
шестой | ⊃ (импликация) | |
седьмой | ≡ (эквивалентность) |
Примеры и проблемы переносимости [ править ]
Сравнение примеров кода [ править ]
АЛГОЛ 60 [ править ]
процедура Absmax (a) Размер: (n, m) Результат: (y) Индексы: (i, k); значение n, м; массив a; целое число n, m, i, k; реальный y;комментарий Абсолютно наибольший элемент матрицы a размером n на m, передается в y, а индексы этого элемента в i и k;начало целого числа p, q; у: = 0; i: = k: = 1; для p: = 1 шаг 1 до n выполнить для q: = 1 шаг 1 до m выполнить если abs (a [p, q])> y then begin y: = abs (a [p, q]); i: = p; k: = q конец конец Absmax
Реализации различаются тем, как должен быть написан текст, выделенный полужирным шрифтом. Слово INTEGER, включая кавычки, должно использоваться в некоторых реализациях вместо целого числа , указанного выше, тем самым обозначая его как специальное ключевое слово.
Ниже приведен пример создания таблицы с использованием АЛГОЛА Elliott 803 : [15]
ТЕСТ АЛГОЛА ПЛАВАЮЩЕЙ ТОЧКИ ' НАЧАТЬ РЕАЛЬНОЕ A, B, C, D ' ПРОЧИТАЙТЕ D ' ДЛЯ A: = 0,0 ШАГ D ДО 6,3 ДЕЛАТЬ НАЧИНАТЬ ПУАНСОН ДЛЯ ПЕЧАТИ (3) , L ?? ' B: = SIN (A) ' C: = COS (A) ' ПЕЧАТЬ ПУНШ (3) , SAMELINE , ALIGNED (1,6) , А, В, С» КОНЕЦ' КОНЕЦ'
Семейство АЛГОЛ 60 [ править ]
Поскольку в Алголе 60 не было средств ввода-вывода, в Алголе нет переносимой программы hello world . Следующая программа может (и будет) компилироваться и запускаться на реализации АЛГОЛА для мэйнфрейма Unisys A-Series и представляет собой прямое упрощение кода, взятого из The Language Guide [16] в Мичиганском университете - Дирборн, компьютерные и информационные науки. Департамент Привет, мир! Страница примера программы ALGOL. [17]
НАЧИНАТЬ ФАЙЛ F (ВИД = УДАЛЕННЫЙ); EBCDIC ARRAY E [0:11]; ЗАМЕНИТЕ E НА «ПРИВЕТ, МИР!»; ЗАПИСАТЬ (F, *, E);КОНЕЦ.
Более простая программа, использующая встроенный формат:
НАЧИНАТЬ ФАЙЛ F (ВИД = УДАЛЕННЫЙ); НАПИСАТЬ (F, <"ПРИВЕТ, МИР!">);КОНЕЦ.
Еще более простая программа, использующая оператор Display:
НАЧАТЬ ОТОБРАЖЕНИЕ («ПРИВЕТ, МИР!») КОНЕЦ.
Альтернативный пример использования ввода-вывода Elliott Algol выглядит следующим образом. Elliott Algol используются различные символы для «открытой строки кавычки» и «близко-струнной кавычки», представленный здесь « и » .
программа HiFolks; begin print ' Hello world ' end ;
Вот версия для Elliott 803 Algol (A104). Стандартный Elliott 803 использовал бумажную ленту с 5 отверстиями и, следовательно, имел только верхний регистр. Код отсутствовали кавычки так £ (знак фунта) был использован для открытия цитаты и ? (знак вопроса) для закрытия цитаты. Специальные последовательности были заключены в двойные кавычки (например, на телетайпе появилась новая строка с помощью £$ L ??).
ПРИВЕТ НАРОД' НАЧИНАТЬ ПЕЧАТЬ £ ПРИВЕТ, МИР £ L ?? ' КОНЕЦ'
ИКТ 1900 серия Алгол ввод / вывод версия допускается ввод из бумажной ленты или перфокарты. Бумажная лента в «полном» режиме допускает строчные буквы. Вывод был на строчный принтер. Обратите внимание на использование '(', ')' и%. [18]
'ПРОГРАММА' (ПРИВЕТ) 'НАЧИНАТЬ' 'КОММЕНТАРИЙ' ОТКРЫТАЯ ЦИТАТА '(', ЗАКРЫТЬ ')', ПЕЧАТЬ ДОЛЖНА БЫТЬ НАПИСАННЫМ КАК% ПОТОМУ ЧТО ПРОБЕЛЫ ИГНОРИРОВАНЫ; НАПИСАТЬ ТЕКСТ ('(' ПРИВЕТ, МИР% ')'); 'КОНЕЦ' 'КОНЕЦ'
См. Также [ править ]
- АБВ АЛГОЛ
- АЛГОЛ
- АЛГОЛ 58
- АЛГОЛ N
- АЛГОЛ 68
- АЛГОЛ W
- АЛГОЛ X
- Атлас Автокод
- Коралловый 66
- Эдинбург IMP
- Устройство Дженсена
- Я ПЛАВАЮ
- Веселый
- НЕЛИАК
- Симула
- S-алгол
- Схема (язык программирования)
Ссылки [ править ]
- ^ Кнут, Дональд Э. (декабрь 1964 г.). «Нормальная форма Бэкуса против формы Бэкуса Наура». Comm. ACM . 7 (12): 735–6. DOI : 10.1145 / 355588.365140 . S2CID 47537431 .
- Перейти ↑ ACM Award Citation / Peter Naur , 2005
- Перейти ↑ van Emden, Maarten (2014). «Как рекурсия попала в программирование: рассказ об интригах, предательстве и продвинутой семантике языка программирования» . Место программиста .
- Перейти ↑ Hoare, CAR (декабрь 1973). «Советы по дизайну языков программирования» (PDF) . п. 27. (Это утверждение иногда ошибочно приписывают Эдсгеру В. Дейкстре , который также участвовал в реализации первого компилятора ALGOL 60. )
- ^ Абельсон, Хэл; Дыбвиг, РК; и другие. Рис, Джонатан; Клингер, Уильям (ред.). «Пересмотренный (3) отчет по алгоритмической языковой схеме (посвященный памяти АЛГОЛА 60)» . Проверено 20 октября 2009 .
- ↑ Энциклопедия компьютерных языков, заархивированная 27 сентября 2011 г., на Wayback Machine.
- ^ Дневной свет, EG (2011). «Призыв Дейкстры к обобщению: появление рекурсивной процедуры, конец 1950-х - начало 1960-х годов» . Компьютерный журнал . 54 (11): 1756–1772. DOI : 10.1093 / comjnl / bxr002 .
- ^ Kruseman Арец, FEJ (30 июня 2003). «Компилятор Алгола 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
- ↑ Жан-Клод Буссар (июнь 1964 г.). Разработка и реализация компилятора Algol60 на электронном калькуляторе IBM 7090/94 и 7040/44 . Institut d'informatique et mathématiques appliquées de Grenoble .CS1 maint: location ( ссылка )
- ^ Claude пара (27 апреля 1965). Описание программы-компилятора АЛГОЛА . Группа пользователей Европейского региона 1620 . IBM.
- ^ Kruseman Арец, FEJ (1973). Компилятор Algol 60 в Algol 60 . Математический центр трактатов. Амстердам: Mathematisch Centrum.
- ^ Ахо, Альфред В .; Рави Сетхи ; Джеффри Д. Ульман (1986). Составители: принципы, методы и инструменты (1-е изд.). Эддисон-Уэсли. ISBN 978-0-201-10194-2., Раздел 7.5 и ссылки в нем
- ^ "803 ALGOL" , руководство для Elliott 803 ALGOL
- ^ 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). «Перевод ALGOL 60: переводчик ALGOL 60 для X1 и создание переводчика для ALGOL 60 (PDF) (технический отчет). Амстердам: Mathematisch Centrum. 35.
- Рэнделл, Брайан ; Рассел, Лоуфорд Джон (1964). Реализация АЛГОЛА 60: перевод и использование программ АЛГОЛА 60 на компьютере . Академическая пресса. OCLC 526731 .Дизайн компилятора Whetstone . Одно из ранее опубликованных описаний реализации компилятора. См соответствующие документы: Ветстоун Алголь Revisited и The точильный KDF9 Алголь Переводчик от Brian Randell
Внешние ссылки [ править ]
- Пересмотренный отчет по алгоритмическому языку Algol 60 Питера Наура и др. Определение АЛГОЛА
- Краткое описание синтаксиса BNF Алгола 60
- «Старая одежда императора» - речь Хора на Премии Тьюринга 1980 года, в которой обсуждается история Алгола и его участие
- MARST , бесплатный переводчик с Algol на C
- Реализация АЛГОЛА 60 для FP6000 Обсуждение некоторых вопросов реализации.
- Наур, Питер (август 1978 г.). «Европейская сторона последней фазы развития АЛГОЛА 60» . Уведомления ACM SIGPLAN . 13 (8): 15–44. DOI : 10.1145 / 960118.808370 . S2CID 15552479 .
- Эдинбургский университет написал компиляторы для Algol60 (позже обновленный для Algol60M) на основе своих компиляторов автокода Атласа, изначально загруженных из Атласа в KDF-9. Компиляторы Эдинбурга сгенерировали код для ICL1900, ICL4 / 75 (клон IBM360) и ICL2900. Вот BNF для Algol60 и источник ICL2900 компилятора , библиотека документации , а также значительный набор тестов , включая тесты Брайана ВИХМАННА в. Также существует довольно поверхностный переводчик уровня исходного кода с Algol60 на Atlas Autocode .
- Eric S. Raymond «s ретрокомпьютинг музей , среди прочего ссылка на переводчик NASE Алгол-60 написана на C.
- Интерпретатор NASE
- Истории о B5000 и людях, которые там были: специализированный компьютер на Алголе [1] , [2]
- Герман Боттенбрух (1961). «Структура и использование АЛГОЛА 60» . DOI : 10.2172 / 4020495 . Цитировать журнал требует
|journal=
( помощь ) - NUMAL Библиотека числовых процедур на АЛГОЛе 60, разработанная юридическим владельцем Stichting Centrum Wiskunde & Informatica (правопреемник Stichting Mathematisch Centrum) .
- Ресурсы по Algol 60: переводчики, документация, программы
- Алгол-60 входит в состав Racket.