Парадигмы | процедурный, императивный, структурированный |
---|---|
Семейство | АЛГОЛ |
Разработано | Бэкусом, Бауэром, Кацем, Маккарти, Наур, Перлис, Рутисхаузер, Самельсон, ван Вейнгаарден, Вегштейн, Вудгер |
Впервые появилось | 1960; 60 лет назад (1960) |
Печатная дисциплина | Статический, сильный |
Объем | Лексический |
Под влиянием | |
АЛГОЛ 58 | |
Под влиянием | |
Самые последующие императивные языки (так называемые АЛГОЛ-подобные языки), например Simula, CPL, Pascal, Ada, C |
ALGOL 60(сокращение от Algorithmic Language 1960) является членом АЛГОЛ семейство языков программирования. Он последовал за АЛГОЛОМ 58, в котором были введены кодовые блоки и пары начало
и конец
для их разделения, что представляет собой ключевой прогресс в рост структурного программирования. АЛГОЛ 60 был первым языком, реализующим определения вложенных функций с лексической областью видимости. Это привело к появлению множества других языков программирования, включая CPL, Simula, BCPL, B, Pascal и C. Практически на каждом компьютере той эпохи был язык системного программирования, основанный на концепциях АЛГОЛА 60.
Никлаус Вирт основал свой собственный АЛГОЛ W на АЛГОЛе 60, прежде чем перейти к разработке Паскаль. Алгол-W должен был стать АЛГОЛОМ следующего поколения, но комитет АЛГОЛ 68 принял решение о более сложной и продвинутой конструкции, чем очищенный упрощенный АЛГОЛ 60. Официальные версии АЛГОЛА названы в честь года, в котором они были были впервые опубликованы. Алгол 68 существенно отличается от Алгола 60 и подвергался частичной критике за то, что он таков, так что в целом "Алгол" относится к диалектам Алгола 60.
АЛГОЛ 60 - с COBOL - были первыми языками, стремящимися к стандартизации.
АЛГОЛ 60 использовался в основном учеными-компьютерщиками в США и Европе. Его использованию в коммерческих приложениях мешало отсутствие стандартных средств ввода / вывода в его описании и отсутствие интереса к языку со стороны крупных поставщиков компьютеров. Однако АЛГОЛ 60 стал стандартом для публикации алгоритмов и оказал глубокое влияние на развитие языков в будущем.
Джон Бэкус разработал метод нормальной формы Бэкуса для описания языков программирования специально для АЛГОЛА 58. Он был переработан и расширен Питером Науром для АЛГОЛА 60 и в Предложение Дональда Кнута было переименовано в форму Бэкуса-Наура.
Питер Наур: «Как редактор бюллетеня ALGOL я был вовлечен в международные дискуссии по языку и был избран членом Европейской группа языкового дизайна в ноябре 1959 года. В этом качестве я был редактором отчета ALGOL 60, подготовленного в результате встречи ALGOL 60 в Париже в январе 1960 года ».
Следующие люди присутствовали на встрече в Париже (с 11 по 16 января):
Алан Перлис дал яркое описание встречи: «Встречи были утомительными, бесконечными и волнующими. Одно раздражало, когда его хорошие идеи отбрасывались вместе с плохими идеями других. Тем не менее усердие сохранялось на протяжении всего периода. Химия 13 была превосходной. "
Изначально язык не включал рекурсию. Он был вставлен в спецификацию в последнюю минуту, вопреки желанию некоторых членов комитета.
АЛГОЛ 60 вдохновил многие языки, которые последовали за ним. Тони Хоар заметил: «Этот язык настолько опередил свое время, что он был не только улучшением своих предшественников, но и почти всех. его преемники. "
На сегодняшний день было произведено не менее 70 дополнений, расширений, производных и подъязыков Алгола 60.
Имя | Год | Автор | Состояние | Описание | Целевой ЦП |
---|---|---|---|---|---|
X1 АЛГОЛ 60 | август 1960 г. | Эдсгер В. Дейкстра и Яап А. Зонневельд | Нидерланды | Первая реализация ALGOL 60 | Electrologica X1 |
Algol | 1960 | Эдгар Т.. Утюги | USA | Algol 60 | CDC 1604 |
Burroughs Algol (несколько вариантов) | 1961 | Корпорация Берроуза (с участием Хора, Дейкстры и др.) | США | Основа Берроуза (а теперь на Unisys MCP ) компьютеры | большие системы Берроуза , а также их средний уровень. |
1961 | США | Simula изначально была заключена по контракту как расширение моделирования Case ALGOL | UNIVAC 1107 | ||
1961 | USA | для разделения времени ODIN система | PDP-1 | ||
1961 | Питер Наур, Йорн Йенсен | Дания | Algol 60 | DASK в Regnecentralen | |
1962 | , | Швеция | Алгол 60 | СМИЛ в Лундском университете | |
1962 | Питер Наур, Йорн Йенсен | Дания | Algol 60 | GIER at Regnecentralen | |
Дартмут ALGOL 30 | 1962 | Томас Юджин Курц и др. | США | LGP-30 | |
Алькор Майнц 2002 | 1962 | Урсула Хилл-Самельсон, Ханс Лангмаак | Германия | Siemens 2002 | |
1962 | Италия | ||||
Эллиотт АЛГОЛ | 1962 | С. А. Р. Хоар | UK | Обсуждался в его лекции 1980 Премии Тьюринга | Эллиот 803 и Эллиотт 503 |
Алгол 60 | 1962 | Роланд Штробель | Восточная Германия | Осуществляется Институтом прикладной математики Немецкой академии наук в Берлине | Zeiss-Rechenautomat ZRA 1 |
Algol Translator | 1962 | Г. ван дер Мей и В.Л. van der Poel | Нидерланды | Staatsbedrijf der Posterijen, Telegrafie en Telefonie | ZEBRA |
1963 | UK | English Electric Company KDF9 | |||
1963 | США | Тест компилятора META II, компилятор | |||
FP6000 Algol | 1963 | Roger Moore | Canada | , написанный для Saskatchewan Power Corp | FP6000 |
Whetstone | 1964 | Брайан Рэнделл и Лоуфорд Джон Рассел | UK | Подразделение атомной энергии English Electric Company. Предшественник реализации Ferranti Pegasus, National Physical Laboratories ACE и English Electric DEUCE. | English Electric Company KDF9 |
1965 | Норвегия | UNIVAC | |||
Algol 60 | 1965 | FEJ Kruseman Aretz | Нидерланды | Компилятор MC для EL-X8 | Electrologica X8 |
ALGEK | 1965 | СССР | Минск-22 | АЛГЭК, основанный на поддержке АЛГОЛ-60 и COBOL, для хозяйственных задач | |
1966 | опубл. А. Виил, М. Котли и М. Рахенди, | Эстонская ССР | Минск-22 | ||
1967 | Группа GAMS (ГАМС, группа автоматизированного программирования для машин среднего класса), сотрудничество Академий Comecon наук | Comecon | Минск-22, позже ES EVM, BESM | ||
1967 | Польша | Польский компьютер | |||
Китайский Алгол | 1972 | Китай | Китайские иероглифы, выраженные через систему символов | ||
DG / L | 1972 | США | DG Eclipse семейство компьютеров | ||
NASE | 1990 | Эрик Шёнфельдер | Германия | Переводчик | Linux и MS Windows |
MARST | 2000 | Андрей Махорин | Россия | Транслятор из Алгола-60 в C | Все процессоры, поддерживаемые GNU Compiler Collection; MARST является частью проекта GNU |
Диалекты Берроуза включали специальные диалекты системного программирования, такие как ESPOL и NEWP.
Алгол 60, как официально определено, не имел I / O объекты; реализации определяли свои собственные способы, которые редко были совместимы друг с другом. Напротив, АЛГОЛ 68 предлагал обширную библиотеку средств передачи (на языке АЛГОЛ 68 для ввода / вывода).
АЛГОЛ 60 предоставляет две стратегии оценки для передачи параметра : обычный вызов по значению и вызов по имя. В объявлении процедуры для каждого формального параметра, который должен использоваться, указывается: значение, указанное для вызова по значению и опущенное для вызова по имени. Вызов по имени имеет определенные эффекты в отличие от вызова по ссылке. Например, без указания параметров в качестве значения или ссылки невозможно разработать процедуру, которая будет менять местами значения двух параметров, если фактические параметры, которые передаются, являются целочисленной переменной и массивом, который индексируется той же целочисленной переменной.. Подумайте о передаче указателя на swap (i, A [i]) в функцию. Теперь, когда на своп ссылаются каждый раз, он переоценивается. Скажем, i: = 1 и A [i]: = 2, поэтому каждый раз, когда используется своп, он будет возвращать другую комбинацию значений ([1,2], [2,1], [1,2] и т.д. на). Аналогичная ситуация возникает со случайной функцией, переданной как фактический аргумент.
Call-by-name известен многим разработчикам компиляторов благодаря интересным "thunks ", которые используются для его реализации. Дональд Кнут разработал «тест« мужчина или мальчик »для разделения компиляторов, которые правильно реализовали« рекурсию и нелокальные ссылки ». Этот тест содержит пример вызова по имени.
В стандарте больших систем Берроуза подъязык 35 таких зарезервированных слов:
|
|
|
|
|
В стандартном суб-языке больших систем Burroughs есть 71 такой ограниченный идентификатор:
|
|
|
|
|
, а также имена всех встроенных функций.
Приоритет | Оператор | |
---|---|---|
первый арифметический | первый | ↑ (мощность) |
секунда | ×, / (действительное число), ÷ (целое число) | |
третья | +, - | |
секунда | <, ≤, =, ≥, >, ≠ | |
третья | ¬ (не ) | |
четвертый | ∧ (и) | |
пятый | ∨ (или) | |
шестой | ⊃ (следствие) | |
седьмой | ≡ (эквивалентность) |
процедураAbsmax (a) Размер: (n, m) Результат : (y) Индексы: (i, k); значениеn, m; массивa; целое числоn, m, i, k; реальныйy; комментарийАбсолютно наибольший элемент матрицы a размером n на m переносится в y, а нижние индексы этого элемента в i и k; beginцелое числоp, q; у: = 0; i: = k: = 1; дляp: = 1 шаг1 доn doдляq: = 1 шаг1 доm doifabs (a [p, q])>y затемbeginy: = abs (a [p, q]); i: = p; k: = q endendAbsmax
Реализации различаются по способу написания текста, выделенного жирным шрифтом. Слово «INTEGER», включая кавычки, должно использоваться в некоторых реализациях вместо целого числа, приведенного выше, тем самым обозначая как специальное ключевое слово.
Ниже приведен пример создания таблицы с использованием АЛГОЛА Эллиотта 803 :
АЛГОЛ ПЛАВАЮЩЕЙ ТОЧКИ ТЕСТ 'НАЧАЛО REAL A, B, C, D' READ D 'FOR A: = 0.0 ШАГ D ДО 6.3 НАЧАТЬ ПЕЧАТЬ ПУАНСОН (3), £ $$ L ??' B: = SIN (A) 'C: = COS (A)' PRINT PUNCH (3), SAMELINE, ALIGNED (1,6), A , B, C 'END' END '
Поскольку в ALGOL 60 не было средств ввода-вывода, в АЛГОЛе нет переносимой программы hello world. Следующая программа может (и по-прежнему будет) компилироваться и запускаться на реализации АЛГОЛА для мэйнфрейма Unisys A-Series и представляет собой прямое упрощение кода, взятого из The Language Guide в Мичиганском университете -Dearborn Computer и Департамент информатики Привет, мир! Страница примера программы ALGOL.
НАЧАТЬ ФАЙЛ F (KIND = REMOTE); EBCDIC ARRAY E [0:11]; ЗАМЕНИТЕ E НА «ПРИВЕТ, МИР!»; ЗАПИСАТЬ (F, *, E); КОНЕЦ.
Более простая программа, использующая встроенный формат:
BEGIN FILE F (KIND = REMOTE); ЗАПИСАТЬ (F, <"HELLO WORLD!">); КОНЕЦ.
Еще более простая программа, использующая оператор Display:
BEGIN DISPLAY («HELLO WORLD!») END.
Альтернативный пример использования ввода-вывода Elliott Algol выглядит следующим образом. Эллиотт Алгол использовал разные символы для "кавычки-открытой строки" и "кавычки-закрытия", представленных здесь ‘ и ’.
программойHiFolks; beginprint‘ Hello world 'end;
Вот версия для Elliott 803 Algol (A104). В стандартном Elliott 803 использовалась бумажная лента с 5 отверстиями, поэтому был только верхний регистр. В коде отсутствовали символы кавычек, поэтому £ (знак фунта) использовался для открытой кавычки и ? (вопросительный знак) для закрывающей кавычки. Специальные последовательности были заключены в двойные кавычки (например, на телетайпе появилась новая строка с помощью £$ L ??).
HIFOLKS 'BEGIN PRINT £ HELLO WORLD £ L ??' END '
В версии ICT 1900 series Algol I / O версия допускала ввод с бумажной ленты или перфокарты. Бумажная лента в «полном» режиме допускает строчные буквы. Вывод был на строчный принтер. Обратите внимание на использование '(', ')' и%.
'PROGRAM' (HELLO) 'BEGIN' 'COMMENT' OPEN QUOTE IS '(', CLOSE IS ')', ПЕЧАТНОЕ ПРОСТРАНСТВО ДОЛЖНО БЫТЬ НАПИСАНО КАК% ПОТОМУ ЧТО ПРОСТРАНСТВА ИГНОРИРУЮТСЯ; НАПИСАТЬ ТЕКСТ ('(' HELLO% WORLD ')'); 'END' 'FINISH'
| journal =
(help )