Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

АЛГОЛ 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]

Диалекты Берроуза включали специальные диалекты системного программирования, такие как 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-алгол
  • Схема (язык программирования)

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

  1. ^ Кнут, Дональд Э. (декабрь 1964 г.). «Нормальная форма Бэкуса против формы Бэкуса Наура». Comm. ACM . 7 (12): 735–6. DOI : 10.1145 / 355588.365140 . S2CID  47537431 .
  2. Перейти ↑ ACM Award Citation / Peter Naur , 2005
  3. Перейти ↑ van Emden, Maarten (2014). «Как рекурсия попала в программирование: рассказ об интригах, предательстве и продвинутой семантике языка программирования» . Место программиста .
  4. Перейти ↑ Hoare, CAR (декабрь 1973). «Советы по дизайну языков программирования» (PDF) . п. 27. (Это утверждение иногда ошибочно приписывают Эдсгеру В. Дейкстре , который также участвовал в реализации первого компилятора ALGOL 60. )
  5. ^ Абельсон, Хэл; Дыбвиг, РК; и другие. Рис, Джонатан; Клингер, Уильям (ред.). «Пересмотренный (3) отчет по алгоритмической языковой схеме (посвященный памяти АЛГОЛА 60)» . Проверено 20 октября 2009 .
  6. Энциклопедия компьютерных языков, заархивированная 27 сентября 2011 г., на Wayback Machine.
  7. ^ Дневной свет, EG (2011). «Призыв Дейкстры к обобщению: появление рекурсивной процедуры, конец 1950-х - начало 1960-х годов» . Компьютерный журнал . 54 (11): 1756–1772. DOI : 10.1093 / comjnl / bxr002 .
  8. ^ Kruseman Арец, FEJ (30 июня 2003). «Компилятор Алгола 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. Жан-Клод Буссар (июнь 1964 г.). Разработка и реализация компилятора Algol60 на электронном калькуляторе IBM 7090/94 и 7040/44 . Institut d'informatique et mathématiques appliquées de Grenoble  [ fr ] .CS1 maint: location ( ссылка )
  12. ^ Claude пара (27 апреля 1965). Описание программы-компилятора АЛГОЛА . Группа пользователей Европейского региона 1620 . IBM.
  13. ^ Kruseman Арец, FEJ (1973). Компилятор Algol 60 в Algol 60 . Математический центр трактатов. Амстердам: Mathematisch Centrum.
  14. ^ Ахо, Альфред В .; Рави Сетхи ; Джеффри Д. Ульман (1986). Составители: принципы, методы и инструменты (1-е изд.). Эддисон-Уэсли. ISBN 978-0-201-10194-2., Раздел 7.5 и ссылки в нем
  15. ^ "803 ALGOL" , руководство для Elliott 803 ALGOL
  16. ^ https://web.archive.org/web/20100209040840/http://www.engin.umd.umich.edu/CIS/course.des/cis400/index.html
  17. ^ https://web.archive.org/web/20100204112923/http://www.engin.umd.umich.edu/CIS/course.des/cis400/algol/hworld.html
  18. ^ "Серия 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.