Введение
Язык программирования ALGOL 60 (сокращение от Algorithmic Language 1960) является членом семейства языков программирования ALGOL. Он развился из ALGOL 58, который представил блоки кода и пары операторов `begin` и `end` для их ограничения, что стало важным шагом в развитии структурированного программирования. ALGOL 60 был одним из первых языков, реализовавших определения функций (которые можно было вызывать рекурсивно). Определения функций в ALGOL 60 могли быть вложены друг в друга (что было впервые реализовано в каком-либо языке программирования) с лексической областью видимости. Он послужил основой для многих других языков, включая CPL, PL/I, Simula, BCPL, B, Pascal и C. Практически на каждом компьютере того времени существовал язык системного программирования, основанный на концепциях ALGOL 60. Никлаус Вирт разработал свой ALGOL W на основе ALGOL 60, прежде чем приступить к разработке Pascal. ALGOL W задумывался как следующее поколение ALGOL, но комитет ALGOL 68 принял решение о более сложном и продвинутом дизайне, а не об упрощенной и очищенной версии ALGOL 60. Официальные версии ALGOL названы по году их первой публикации. ALGOL 68 существенно отличается от ALGOL 60 и подвергался критике отчасти за это, поэтому обычно под термином "ALGOL" подразумеваются диалекты ALGOL 60.
the programming language
ALGOL 60 (short for Algorithmic Language 1960) is a member of the ALGOL family of computer programming languages. It followed on from ALGOL 58 which had introduced code blocks and the begin and end pairs for delimiting them, representing a key advance in the rise of structured programming. ALGOL 60 was one of the first languages implementing function definitions (that could be invoked recursively). ALGOL 60 function definitions could be nested within one another (which was first introduced by any programming language), with lexical scope. It gave rise to many other languages, including CPL, PL/I, Simula, BCPL, B, Pascal, and C. Practically every computer of the era had a systems programming language based on ALGOL 60 concepts. Niklaus Wirth based his own ALGOL W on ALGOL 60 before moving to develop Pascal. Algol W was intended to be the next generation ALGOL but the ALGOL 68 committee decided on a design that was more complex and advanced rather than a cleaned simplified ALGOL 60. The official ALGOL versions are named after the year they were first published. ALGOL 68 is substantially different from ALGOL 60 and was criticised partially for being so, so that in general "ALGOL" refers to dialects of ALGOL 60.
Сроки внедрения ALGOL 60
На сегодняшний день существует не менее 70 дополнений, расширений, производных и подязыков ALGOL 60. НазваниеГодАвторСтатусОписаниеЦелевой процессор X1 ALGOL 60 Август 1960 Эдсгер В. Дикстра и Жаап А. Зонневельд Первая реализация ALGOL 60 Electrologica X1 Algol 1960 Эдгар Т. Ирсон ALGOL 60 CDC 1604 Burroughs Algol (несколько вариантов) 1961 Burroughs Corporation (с участием Хоаре, Дикстра и других) Основа компьютеров Burroughs (и теперь Unisys MCP) Burroughs Large Systems и систем среднего диапазона Case ALGOL 1961 Simula первоначально разрабатывалась как расширение для моделирования Case ALGOL UNIVAC 1107 GOGOL 1961 Уильям М. МакКейман Для ODIN системы совместного использования времени PDP 1 DASK ALGOL 1961 Питер Наур, Йорн Йенсен ALGOL 60 DASK в Regnecentralen SMIL ALGOL 1962 Торгиль Экман, Карл Эрик Фрёберг ALGOL 60 SMIL в Lund University GIER ALGOL 1962 Питер Наур, Йорн Йенсен ALGOL 60 GIER в Regnecentralen Dartmouth ALGOL 30 1962 Томас Юджин Куртц, Стивен Дж. Гарланд, Роберт Ф. Харгрейвс, Энтони У. Кнапп, Хорхе Льясер ALGOL 60 LGP 30 Alcor Mainz 2002 1962 Урсула Хилл Самэльсон, Ханс Лангмаак Siemens 2002 ALCOR Illinois 7090 1962 Манфред Пауль, Ханс Рюдигер Виле, Дэвид Гриз, и Рудольф Байер ALGOL 60 Реализовано в Illinois и TH München 1962 1964 IBM 7090 USS 90 Algol 1962 Л. Петроне Elliott ALGOL 1962 C. A. R. Hoare Обсуждалось в его лекции 1980 года, удостоенной премии Тьюринга Elliott 803 & the Elliott 503 ALGOL 60 1962 Роланд Штробель Реализовано Институтом прикладной математики, Германской академией наук в Берлине Zeiss Rechenautomat ZRA 1 ALGOL 60 1962 Бернар Вокуа, Луи Боллие Institut d'Informatique et Mathématiques Appliquées de Grenoble (IMAG) и Compagnie des Machines Bull Bull Gamma 60 Algol Translator 1962 G. van der Mey и W. L. van der Poel Staatsbedrijf der Posterijen, Telegrafie en Telefonie ZEBRA Kidsgrove Algol 1963 F. G. Duncan English Electric Company KDF9 SCALP 1963 Стивен Дж. Гарланд, Энтони У. Кнапп, Томас Юджин Куртц Self Contained Algol Processor для подмножества ALGOL 60 LGP 30 VALGOL 1963 Вал Шорре Тест компилятора META II FP6000 Algol 1963 Роджер Мур Написано для Saskatchewan Power Corp FP6000 Whetstone 1964 Брайан Рэнделл и Лоуфорд Джон Рассел Atomic Power Division of English Electric Company. Предшественник Ferranti Pegasus, National Physical Laboratories ACE и English Electric DEUCE реализаций English Electric Company KDF9 ALGOL 60 1964 Жан-Клод Буссар fr IBM 7090 ALGOL 60 1965 fr Centre de calcul de la Faculté des Sciences de Nancy IBM 1620 Dartmouth ALGOL 1965 Стивен Дж. Гарланд, Сарр Блумсон, Рон Мартин ALGOL 60 Dartmouth Time Sharing System для GE 235 NU ALGOL 1965 UNIVAC ALGOL 60 1965 F. E. J. Kruseman Aretz MC компилятор для EL X8 Electrologica X8 ALGEK 1965 Минск 22 АЛГЭК, основанный на ALGOL 60 и поддержке COBOL, для экономических задач MALGOL 1966 Публ. A. Viil, M Kotli & M. Rakhendi, Минск 22 ALGAMS 1967 Группа автоматизации программирования для машин среднего класса (ГАМС), сотрудничество Академий наук Comecon Comecon Минск 22, позже ES EVM, BESM ALGOL/ZAM 1967 Польский компьютер ZAM Китайский Algol 1972 Китайские символы, выраженные через систему символов DG/L 1972 DG Eclipse семейство компьютеров NASE 1990 Эрик Шенфельдер Интерпретатор Linux и MS Windows MARST 2000 Андрей Махорин ALGOL 60 to C транслятор Все CPU, поддерживаемые GNU Compiler Collection; MARST является частью проекта GNU Диалекты Burroughs включали специальные диалекты системного программирования, такие как ESPOL и NEWP.
The Burroughs dialects included special system programming dialects such as ESPOL and NEWP.
Свойства
ALGOL 60, как официально определено, не имел средств ввода/вывода; реализации определяли их самостоятельно, зачастую несовместимым друг с другом образом. В отличие от него, ALGOL 68 предлагал обширную библиотеку транспаутов (термин ALGOL 68 для обозначения ввода/вывода). ALGOL 60 предоставлял две стратегии вычисления для передачи параметров: общепринятый вызов по значению и вызов по имени. Объявление процедуры определяло для каждого формального параметра, какая из них должна использоваться: `value` указывалось для вызова по значению, а опускалось для вызова по имени. Вызов по имени имеет некоторые эффекты, отличающиеся от вызова по ссылке. Например, без явного указания параметров как передаваемых по значению или по ссылке, невозможно разработать процедуру, которая поменяет местами значения двух параметров, если фактические параметры, передаваемые в процедуру, – это целочисленная переменная и массив, индексируемый этой же целочисленной переменной. Представьте себе передачу указателя на функцию `swap(i, A[i])`. Теперь, каждый раз при обращении к `swap`, происходит его повторное вычисление. Допустим, `i := 1` и `A[i] := 2`, тогда при каждом обращении к `swap` будет возвращаться другая комбинация значений ([1, 2], [2, 1], [1, 2] и так далее). Аналогичная ситуация возникает при передаче случайной функции в качестве фактического аргумента. Вызов по имени известен многим разработчикам компиляторов благодаря интересным "прослойкам" (thunks), используемым для его реализации. Дональд Кнут разработал "тест «мужчина или мальчик»" для отделения компиляторов, правильно реализовавших "рекурсию и нелокальные ссылки". Этот тест содержит пример вызова по имени.
LEAP (полное название)
LEAP — это расширение языка программирования ALGOL 60, предоставляющее ассоциативную память, организованную в виде троек. Три элемента каждой тройки обозначают связь между Атрибутом Объекта и его Значением. LEAP был разработан Джеромом Фельдманом (Университет Калифорнии, Беркли) и Полом Ровнером (MIT Lincoln Lab) в 1967 году. Реализация LEAP также была выполнена в SAIL.