АЛГОЛ 60 (сокращение от Algorithmic Language 1960 ) — член семейства языков программирования АЛГОЛ . Он последовал за АЛГОЛом 58 , в котором были введены блоки кода и пары и для их разграничения, что представляет собой ключевой шаг на пути развития структурного программирования . АЛГОЛ 60 был одним из первых языков, реализующих определения функций (которые можно было вызывать рекурсивно). Определения функций ALGOL 60 могли быть вложены друг в друга (что впервые было введено в любом языке программирования) с лексической областью действия . Он породил множество других языков, включая CPL , PL/ I , Simula , BCPL , B , Pascal и C. Практически каждый компьютер той эпохи имел язык системного программирования, основанный на концепциях АЛГОЛ-60.begin
end
Никлаус Вирт основал свой собственный АЛГОЛ 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]
На сегодняшний день существует не менее 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 », которые используются для ее реализации. Дональд Кнут разработал « тест мужчины или мальчика » для разделения компиляторов, которые правильно реализовали « рекурсию и нелокальные ссылки». Этот тест содержит пример вызова по имени.
В стандартном подъязыке Burroughs Large Systems 35 таких зарезервированных слов :
В стандартном подъязыке Burroughs Large Systems имеется 71 такой ограниченный идентификатор:
а также имена всех встроенных функций.
процедура 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 не было средств ввода-вывода, в АЛГОЛе нет переносимой программы 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.
{{cite thesis}}
: CS1 maint: местоположение ( ссылка )