stringtranslate.com

АЛГОЛ 60

АЛГОЛ 60 (сокращение от Algorithmic Language 1960 ) — член семейства языков программирования АЛГОЛ . Он последовал за АЛГОЛом 58 , в котором были введены блоки кода и пары и для их разграничения, что представляет собой ключевой шаг на пути развития структурного программирования . АЛГОЛ 60 был одним из первых языков, реализующих определения функций (которые можно было вызывать рекурсивно). Определения функций ALGOL 60 могли быть вложены друг в друга (что впервые было введено в любом языке программирования) с лексической областью действия . Он породил множество других языков, включая CPL , PL/ I , Simula , BCPL , B , Pascal и C. Практически каждый компьютер той эпохи имел язык системного программирования, основанный на концепциях АЛГОЛ-60.beginend

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

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

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

История

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

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

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

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

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

Язык изначально не включал рекурсию . Его включили в спецификацию в последнюю минуту, вопреки желанию некоторых членов комитета. [3]

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

График реализации ALGOL 60

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

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

Характеристики

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

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

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

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

В стандартном подъязыке Burroughs Large Systems 35 таких зарезервированных слов :

В стандартном подъязыке Burroughs Large Systems имеется 71 такой ограниченный идентификатор:

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

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

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

Сравнение примеров кода

АЛГОЛ 60

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

Реализации различаются тем, как должен быть написан текст, выделенный жирным шрифтом. Слово «ЦЕЛОЕ», включая кавычки, должно использоваться в некоторых реализациях вместо целого числа , приведенного выше, тем самым обозначая его как специальное ключевое слово.

Ниже приведен пример создания таблицы с использованием Elliott 803 ALGOL: [20]

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

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

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

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

Где * и т. д. представляют спецификацию формата, используемого в FORTRAN, например [23]

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

 НАЧАТЬ  ФАЙЛ  F ( ВИД = УДАЛЕННЫЙ );  WRITE ( F ,  < "HELLO WORLD!" > );  КОНЕЦ .

Еще более простая программа, использующая оператор Display:

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

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

 программа HiFolks ; начало печати ' Привет, мир ' конец ;      

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

 ПРИВЕТ НАРОД' НАЧИНАТЬ НАПЕЧАТАЙТЕ £HELLO WORLD£L??' КОНЕЦ'

Версия Algol I/O серии ICT 1900 позволяла вводить данные с бумажной ленты или перфокарты. В режиме «заполнения» бумажной ленты разрешен нижний регистр. Вывод осуществлялся на построчный принтер. Обратите внимание на использование символов «(», «)» и %. [24]

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

ПРЫГНУТЬ

LEAP — это расширение языка программирования АЛГОЛ 60, обеспечивающее ассоциативную память троек. Три элемента в тройке обозначают связь с тем, что атрибут объекта имеет определенное значение. LEAP был создан Джеромом Фельдманом (Калифорнийский университет в Беркли) и Полом Ровнером (Лаборатория Линкольна Массачусетского технологического института) в 1967 году. LEAP также был реализован в SAIL.

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

Рекомендации

  1. ^ Кнут, Дональд Э. (декабрь 1964 г.). «Обычная форма Бэкуса против формы Бэкуса Наура». Коммуникации АКМ . 7 (12): 735–6. дои : 10.1145/355588.365140 . S2CID  47537431.
  2. ^ Цитирование премии ACM / Питер Наур, 2005 г.
  3. ^ ван Эмден, Мартен (2014). «Как рекурсия проникла в программирование: история об интригах, предательстве и продвинутой семантике языка программирования». Место программиста .
  4. ^ Хоар, ЦАР (декабрь 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. Круземан Арец, FEJ (30 июня 2003 г.). «Компилятор Дейкстра-Зонневельда ALGOL 60 для Electrologica X1» (PDF) . Программная инженерия . История информатики. Амстердам: Centrum Wiskunde & Informatica.[ постоянная мертвая ссылка ]
  9. ^ Айронс, Эдгар Т., Синтаксически управляемый компилятор для АЛГОЛА 60, Communications of the ACM, Vol. 4, с. 51. (январь 1961 г.)
  10. ^ Курц, Томас Э. (1978). "БАЗОВЫЙ". История языков программирования . стр. 515–537. дои : 10.1145/800025.1198404. ISBN 0127450408.
  11. ^ Грис, Д.; Пол, М.; Виле, HR (1965). «Некоторые методы, использованные в ALCOR Illinois 7090». Коммуникации АКМ . 8 (8): 496–500. дои : 10.1145/365474.365511 . S2CID  18365024.
  12. ^ Байер, Р.; Грис, Д.; Пол, М.; Виле, HR (1967). «Свалка вскрытия ALCOR Illinois 7090/7094». Коммуникации АКМ . 10 (12): 804–808. дои : 10.1145/363848.363866 . S2CID  3783605.
  13. ^ Rechenautomaten mit Trommelspeicher, Förderverein der Technischen Sammlung Dresden
  14. ^ Мунье-Кун, Пьер (2014). «Алголь во Франции: от универсального проекта к встроенной культуре». IEEE Анналы истории вычислений . 36 (4): 6. ISSN  1058-6180.
  15. ^ Курц, соч. цит. , стр. 517.
  16. ^ Буссар, Жан-Клод (июнь 1964 г.). Проектирование и реализация компилятора Алгол60 на электронных калькуляторах IBM 7090/94 и 7040/44 (кандидатская диссертация). Институт информатики и прикладных математических технологий Гренобля  [ фр ] : Университет Жозефа-Фурье - Гренобль I.{{cite thesis}}: CS1 maint: местоположение ( ссылка )
  17. Клод Пэйр (27 апреля 1965 г.). Описание компилятора АЛГОЛА . Группа пользователей Европейского региона 1620 . ИБМ.
  18. ^ Круземан Арец, FEJ (1973). Компилятор Алгола 60 в Алголе 60 . Трактаты Математического центра. Амстердам: Математический центр.
  19. ^ Ахо, Альфред В .; Сетхи, Рави ; Уллман, Джеффри Д. (1986). Составители: принципы, методы и инструменты (1-е изд.). Аддисон-Уэсли. ISBN 978-0-201-10194-2., Раздел 7.5 и ссылки в нем
  20. ^ «803 АЛГОЛ», руководство для Elliott 803 АЛГОЛ .
  21. ^ «Язык программирования АЛГОЛ». www.engin.umd.umich.edu . Архивировано из оригинала 10 февраля 2010 года . Проверено 11 января 2022 г.
  22. ^ «Привет, мир! Пример программы» . www.engin.umd.umich.edu . Архивировано из оригинала 4 февраля 2010 года . Проверено 11 января 2022 г.
  23. ^ Фортран#"Привет, мир!" пример
  24. ^ "Серия ICL 1900: Язык Алгол" . Техническая публикация ICL 3340. 1965 г.

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

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