Язык программирования
ALGOL 58 , первоначально названный IAL , является одним из языков программирования семейства ALGOL . Это был ранний компромиссный проект , вскоре замененный ALGOL 60 . По словам Джона Бэкуса :
На конференции ACM-GAMM в Цюрихе было два основных мотива при предложении IAL: (a) предоставить средство для передачи численных методов и других процедур между людьми и (b) предоставить средство для реализации указанного процесса на различных машинах... [2]
В ALGOL 58 было введено фундаментальное понятие составного оператора , но оно ограничивалось только потоком управления и не было привязано к области действия идентификатора так, как это было с блоками в Algol 60 .
Имя
Бауэр приписывает это название Герману Боттенбруху , который ввел термин «алгоритмический язык » (algorithmische Sprache) в 1957 году, «по крайней мере, в Германии». [3] [4]
История
Предложения по созданию универсального языка были выдвинуты Ассоциацией вычислительной техники (ACM), а также Немецким обществом прикладной математики и механики (GAMM). Было решено организовать совместное заседание, чтобы объединить их. Заседание проходило с 27 мая по 2 июня 1958 года в ETH Zurich , в нем приняли участие следующие лица:
Первоначально предлагалось назвать язык IAL ( International Algebraic Language ), но, по словам Перлиса, [5]
это название было отклонено как «непроизносимая» и напыщенная аббревиатура. Вместо этого было предложено название ALGOL, хотя официально оно было принято лишь год спустя. В публикации, последовавшей за встречей, по-прежнему использовалось название IAL. [6]
К концу 1958 года группа ZMMD создала работающий компилятор ALGOL 58 для компьютера Z22 . ZMMD было аббревиатурой от Цюриха (где работал Рутисхаузер), Мюнхена (место работы Бауэра и Замельсона), Майнца (место работы компьютера Z22), Дармштадта (место работы Боттенбруха).
ALGOL 58 имел некоторые попытки внедрения в IBM , но эти попытки конкурировали с FORTRAN , и вскоре были заброшены. Он также был реализован в Дартмутском колледже на LGP-30 , но эта реализация вскоре превратилась в ALGOL 60. Реализация для Burroughs 220 под названием BALGOL также развивалась по своим собственным направлениям, но сохранила большую часть оригинального характера ALGOL 58. [7]
Основной вклад ALGOL 58 был в более поздние языки; он был использован в качестве основы для JOVIAL , [4] MAD , NELIAC [4] и ALGO . Он также использовался в 1959 году для публикации алгоритмов в CACM , положив начало тенденции использования нотации ALGOL в публикациях, которая продолжалась много лет.
Хронология реализаций вариантов АЛГОЛа 58
Влияние АЛГОЛА 58 на АЛГОЛ 60
- IAL ввел трехуровневую концепцию языка ссылок, публикаций и аппаратного обеспечения, а также концепцию «разделителей слов», имеющих отдельное представление от свободно выбираемых идентификаторов (следовательно, нет зарезервированных слов). ALGOL 60 сохранил эту трехуровневую концепцию. [8]
- Различие между присваиванием (
:=
представляющим собой стрелку, направленную влево) и отношением равенства =
было введено в IAL и сохранено в ALGOL 60. - Как IAL, так и ALGOL 60 допускают массивы с произвольными нижними и верхними границами индексов, а также позволяют определять границы индексов с помощью целочисленных выражений.
- Как IAL, так и ALGOL 60 допускают вложение объявлений процедур и соответствующих областей действия идентификаторов.
- В отчете IAL подстановка параметров описывалась примерно в тех же терминах, что и в отчете ALGOL 60, оставляя открытой возможность вызова по имени . Неясно, было ли это реализовано в то время.
- IAL допускает числовые метки операторов, которые сохранились в ALGOL 60.
- Возможность включения в программу кода, не являющегося кодом ALGOL, уже упоминалась в контексте параметров процедур.
- И в IAL, и в ALGOL 60 имеется обозначение switch , однако оно не связано с оператором switch в C и других языках.
- Встроенные функции вида ; были предложены в IAL, но исключены в ALGOL 60.
f(x) := x / 2
- Объявления процедур IAL предоставляют отдельные списки объявлений для входных и выходных параметров, процедура может возвращать несколько значений; этот механизм был заменен в ALGOL 60 объявлением значений .
- Объявления переменных в IAL могут быть размещены в любом месте программы и не обязательно в начале процедуры. Напротив, объявления в блоке ALGOL 60 должны располагаться перед всеми операторами выполнения.
- Оператор for имеет форму
for i:=base(increment)limit
, напрямую напоминающую цикл языка программирования Рутисхаузера Superplan , заменяя его =
на :=
, а его немецкое ключевое слово Für
— прямым переводом на английский язык for
; в АЛГОЛ 60 скобки были заменены на разделители слов step
и until
, так что предыдущий оператор вместо этого будет иметь вид .i:=base step increment until limit
- В IAL if -statement нет then -предложения или else -предложения; он скорее охраняет последующее утверждение. IAL предоставляет if either -statement, который позволяет чисто проверять несколько условий. Оба были заменены конструкцией if - then из ALGOL с введением неоднозначности " dangling- else ".
- В IAL реализована макроподстановка с помощью оператора do ; в ALGOL 60 эта возможность была исключена.
- IAL позволяет опускать один или несколько индексов массива при передаче массивов в процедуры, а также предоставлять любые или все аргументы процедуре, переданной другой процедуре.
- Все инфиксные булевы операторы IAL имеют одинаковый уровень приоритета. Экспоненты обозначены парными стрелками вверх и вниз, что устраняет путаницу относительно правильной интерпретации вложенных экспонент; ALGOL 60 заменил парные стрелки одной стрелкой вверх, функция которой эквивалентна ** в FORTRAN .
- В отчете IAL не указано явно, какие стандартные функции должны быть предоставлены, а делается расплывчатая ссылка на «стандартные функции анализа». В отчете ALGOL 60 имеется более подробный список стандартных функций.
Ссылки
- ^ Рохас, Рауль; Хашаген, Ульф (2002). Первые компьютеры: история и архитектура. MIT Press. стр. 292. ISBN 978-0262681377. Получено 25 октября 2013 г. .
- ^ Бэкус, Дж. В. (1959). «Синтаксис и семантика предлагаемого международного алгебраического языка Цюрихской конференции ACM-GAMM». Труды Международной конференции по обработке информации . ЮНЕСКО. С. 125–132.
- ↑ Аспрей, Уильям (17 февраля 1987 г.), Интервью с Фридрихом Л. Бауэром (PDF) , Институт Чарльза Бэббиджа , архивировано из оригинала (PDF) 22 апреля 2012 г.
- ^ abc Goos, Герхард [на немецком языке] (07 августа 2017 г.). Geschichte der deutschsprachigen Informatik - Programmiersprachen und Übersetzerbau [ История информатики в немецкоязычных странах - Языки программирования и проектирование компиляторов ] (PDF) (на немецком языке). Карлсруэ, Германия: Факультет информатики, Технологический институт Карлсруэ (KIT). Архивировано (PDF) из оригинала 19 мая 2022 г. Проверено 14 ноября 2022 г.(11 страниц)
- ^ Perlis, AJ (1981). «Talk on Computing in the fifties». Национальная конференция ACM. Нэшвилл, Теннесси . Лос-Аламито, Калифорния: (Стенограмма в JAN Lee (ред.), Computer Pioneers, IEEE Computer Society Press (опубликовано в 1995 г.). стр. 545–556).
- ^ Перлис, А. Дж .; Самельсон, К. (1958). «Предварительный отчет: международный алгебраический язык». Сообщения ACM . 1 (12): 8–22. doi : 10.1145/377924.594925 . S2CID 28755282.
- ^ "Algol 58 implementations and dialects", Software Preservation Group , Computer History Museum . Дональд Кнут цитируется на BALGOL: "Я на втором году обучения в Caltech, и я был консультантом Burroughs. Закончив свой компилятор для Burroughs, я присоединился к отделу планирования продукта. Отдел планирования продукта в основном состоял из людей, которые написали лучшее программное обеспечение, когда-либо созданное в мире на тот момент, а именно компилятор Burroughs ALGOL для компьютера 220. Это был большой скачок вперед для программного обеспечения. Это было первое программное обеспечение, которое использовало обработку списков и высокоуровневые структуры данных разумным образом. Они взяли идеи Ньюэлла и Саймона и применили их к компиляторам. Это было круговоротом всего того, что мы делали". [Дон Кнут, CHM Oral History, 2007, стр. 9]
- ^ Наур, П., ред. (1962). Пересмотренный отчет об алгоритмическом языке АЛГОЛ 60 (PDF) . Международная федерация по обработке информации.
Внешние ссылки
- Algol 58 в Группе сохранения программного обеспечения (см. Музей истории компьютеров )
- Отчет по Algol 58 от CACM в группе по сохранению программного обеспечения
- Руководство BALGOL Алгебраический компилятор Берроуза (пересмотренное издание 1963 г.)
- Фон BALGOL в блоге Burroughs 205 и 220