Алгол 68
Алгол 68 | |
---|---|
Класс языка | версия или издание[вд] и язык программирования |
Автор | Адриан ван Вейнгаарден, Барри Майо[вд] и Грегори Пек[d] |
Разработчик | Барри Майо[вд], Грегори Пек[d], Корнелис Костер[вд] и Адриан ван Вейнгаарден |
Испытал влияние | ALGOL Y[вд] и ALGOL 60[d] |
Повлиял на | BETA |
Алго́л 68 (англ. Algol 68 от англ. algorithmic — алгоритмический и англ. language — язык) — процедурный императивный высокоуровневый язык программирования, потомок языка Алгол, существенно доработанный. Разрабатывался в период 1964—1968 годов. Позиционировался как универсальный язык для описания произвольных алгоритмов обработки данных высокой сложности. Отличается большим объёмом, богатством возможностей и сложностью синтаксиса.
Особенности
Несмотря на схожесть названия и официальную преемственность по отношению к языку Алгол 60, Алгол 68 унаследовал от него лишь некоторые элементы синтаксиса и существенно отличается от языка-предшественника прежде всего наличием большого числа дополнительных синтаксических средств и изобразительных возможностей. В частности, он включает встроенные в язык средства организации параллельных вычислений, операции со структурами как с едиными объектами, матричные операции.
Наиболее характерной особенностью синтаксиса Алгола-68 является возможность переопределения синтаксиса и операторов — программист может активно расширять язык в требуемом направлении, создавать собственные операции. Целью включения таких средств в язык было достижение максимальной выразительности и получение возможности удобного описания максимально абстрактных алгоритмов. За эти возможности, а также за наличие мощных операторов для обработки структур и массивов Алгол 68 иногда называют «языком сверхвысокого уровня».
Формально Алгол 68 является процедурным языком программирования, ориентированным на описание последовательности команд, но благодаря развитым средствам описания типов и операций он может быть использован для написания программ практически в любом стиле. Так, в приведённом ниже примере программа на Алголе-68 написана в функциональном стиле.
Эта программа реализует классический
begin # Algol-68 prime number sieve, functional style #
proc error = (string s) void:
(print(( newline, " error: ", s, newline)); goto stop);
proc one to = (int n) list:
(proc f = (int m,n) list: (m>n | nil | cons(m, f(m+1,n))); f(1,n));
mode list = ref node;
mode node = struct (int h, list t);
proc cons = (int n, list l) list: heap node := (n,l);
proc hd = (list l) int: ( l is nil | error("hd nil"); skip | h of l );
proc tl = (list l) list: ( l is nil | error("tl nil"); skip | t of l );
proc show = (list l) void: ( l isnt nil | print((" ",whole(hd(l),0))); show(tl(l)));
proc filter = (proc (int) bool p, list l) list:
if l is nil then nil
elif p(hd(l)) then cons(hd(l), filter(p,tl(l)))
else filter(p, tl(l))
fi;
proc sieve = (list l) list:
if l is nil then nil
else
proc not multiple = (int n) bool: n mod hd(l) ? 0;
cons(hd(l), sieve( filter( not multiple, tl(l) )))
fi;
proc primes = (int n) list: sieve( tl( one to(n) ));
show( primes(100) )
end
Ещё одна интересная особенность языка Алгол 68 — его «многоязычность» — в язык заложена возможность использования различных таблиц трансляции, что позволяет для каждого естественного языка определить свой набор ключевых слов Алгола-68. В результате программисты получают возможность писать программы ключевыми словами родного языка. Ниже приведён пример простейшей процедуры на Алголе-68, выполняющей вычисление даты, следующей за переданной в параметре, на двух языках: английском и немецком.
# Next day date - english variant
mode date = struct(Int day, string month, Int year);
proc the day following = (date x) date:
If day of x < length of month (month of x, year of x)
then (day of x + 1, month of x, year of x)
elif month of x = "December"
then (1, "January", year of x + 1)
else (1, successor of month (month of x), year of x)
fi;
# Nachfolgetag - Deutsche Variante
menge datum = tupel(ganz tag, wort monat, ganz Jahr);
funktion naechster tag nach = (datum x) datum:
wenn tag von x < monatslaenge(monat von x, jahr von x)
dann (tag von x + 1, monat von x, jahr von x)
wennaber monat von x = "Dezember"
dann (1, "Januar", jahr von x + 1)
ansonsten (1, nachfolgemonat(monat von x), jahr von x)
endewenn;
История языка
К 1960 году была закончена работа Комитета по языку высокого уровня IFIP (International Federation for Information Processing, Международная федерация по обработке информации), сформировавшего один из первых «классических» ЯВУ — Алгол. Алгол сразу же завоевал популярность, в первую очередь — в академических кругах Европы, не только как язык практического программирования, но и как универсальный язык описания вычислительных алгоритмов в научных работах. Но уже тогда было ясно, что Алгол не идеален и требует доработки. С одной стороны, в языке отсутствовали некоторые весьма желательные возможности, с другой — некоторые механизмы и конструкции Алгола использовались настолько редко, что встал вопрос об исключении их из языка для упрощения транслятора. В результате к 1962 году IFIP собрал из специалистов множества стран Западной Европы и Америки новый комитет по Алголу. Комитету было поставлено две задачи:
- Согласовать и утвердить сокращённый вариант Алгола, в котором отсутствовали бы редко используемые конструкции исходного языка.
- Создать язык-преемник Алгола с учётом известных достоинств и недостатков языка-предка.
Работа комитета длилась в течение шести лет — с 1962 по 1968 годы. Довольно быстро комитету удалось выполнить первую задачу — согласовать сокращённое подмножество Алгола, содержащее только широко используемые его элементы. Вопрос же о языке-преемнике решался в течение нескольких лет, в постоянных дискуссиях. Двое членов комитета: Чарльз Хоар из Оксфордского университета и Никлаус Вирт из Швейцарии (в то время он преподавал в США, в Станфордском университете) в 1965 году предложили комитету свой вариант нового языка, названного ими Algol-W. Он представлял собой умеренную переработку Алгола, очищенную от известных недостатков и дополненную минимумом необходимых возможностей. Будучи опубликован, проект был положительно оценён многими учёными, но комитет отклонил его. Предложений различной степени проработанности, было много, часть из них отвергалась, часть была использована в проектировании языка. В декабре 1968 года в Мюнхене на заседании комитета был официально представлен новый язык программирования, получивший название Алгол 68. Язык оказался чрезвычайно развитым, но при этом весьма объёмным и сложным. Даже опытные программисты испытывали затруднения в понимании «сообщения о языке», выпущенного комитетом.
Официальные документы комитета оценивают проделанную им работу положительно, хотя некоторые из членов комитета высказывались как о работе, так и о её результатах крайне негативно. Из критиков языка наиболее известны вышеупомянутые
Для описания языка был использован оригинальный формализм —
Того успеха, который имел Алгол 60, Алгол 68 не достиг. В академических кругах он оказался не востребован из-за сложности и громоздкости, а в промышленном программировании не смог потеснить широко использовавшиеся в то время Фортран и Кобол. В каком-то смысле Алгол 68 повторил судьбу языка
Возможно, одним из факторов, предопределивших фактический провал Алгола-68, стало появление в начале
Несмотря на неудачу, Алгол 68 повлиял на разработчиков более поздних объектно-ориентированных языков, в частности,
Критика языка
Прежде всего, отрицательные отзывы касаются сложности синтаксиса Алгола-68. В частности, Хоар отмечал, что, отойдя от простоты языка-прародителя, новый язык совершенно не облегчает разработку программ. Как говорил Хоар, «члены комитета использовали постоянные задержки в его работе, чтобы втиснуть в будущий язык всё более сложные конструкции, вместо того, чтобы попытаться упростить его».
Критики отмечали также, что язык провоцирует разработчика на свободное неструктурное программирование с активным использованием собственных абстрактных категорий и обозначений. От этого код программы становился неудобочитаемым, что затрудняет групповую разработку программ и их сопровождение. Кроме того, чрезмерное обилие возможностей языка делало затруднительным полноценную реализацию компилятора.
Литература
- Пейган Ф. Дж. Практическое руководство по Алголу 68 = A Practical Guide to ALGOL 68 / пер. с англ. А.Ф. Рара, под ред. А. П. Ершова. — М.: Мир, 1979. — 240 с.
- Пересмотренное сообщение об Алголе 68 = Revised Report on the Algorithmic Language ALGOL 68 / ред. А. ван Вейнгаарден и др.; пер. с англ. А.А. Берса. — М.: Мир, 1979. — 533 с.
- А. Н. Балуев и др. Алгол 68: Методы реализации / под ред. Г. С. Цейтина. — Л.: изд-во Ленингр. ун-та, 1976. — 224 с.
- Ч. Линдси, С. ван дер Мюйлен. Неформальное введение в Алгол 68 / пер. с англ.. — М.: Мир, 1973. — 408 с.
- Роберт В Себеста. Глава 2.11. Ортогональная структура: язык ALGOL 68 // Основные концепции языков программирования = Concepts of Programming Languages. — 5-е изд. — М.: «Вильямс», 2001. — С. 672. — ISBN 5-8459-0192-8.
- Язык компьютера. — М.: Мир, 1989. — С. 163, 190, 194. — ISBN 5-03-001148-X.
- ГОСТы
- ГОСТ 27974-88 — Язык программирования АЛГОЛ 68
- ГОСТ 27975-88 — Язык программирования АЛГОЛ 68 расширенный
- Литература на английском языке
- Brailsford, D.F. and Walker, A.N., Introductory ALGOL 68 Programming, Ellis Horwood/Wiley, 1979
- McGettrick, A.D., ALGOL 68, A First and Second Course, Cambridge Univ. Press, 1978
- Peck, J.E.L., An ALGOL 68 Companion, Univ. of British Columbia, October 1971
- Tanenbaum, A.S., A Tutorial on ALGOL 68, Computing Surveys 8, 155—190, June 1976 and 9, 255—256, September 1977, [1] (недоступная ссылка)
Ссылки
- Tutorial — on the A68LGU compiler (a computer-printed text). -Date: 19.02.1981 Архивная копия от 3 декабря 2013 на Wayback Machine
- Проект Open source Algol 68 implementations на сайте SourceForge.net
- Programming Algol 68 Made Easy Архивная копия от 3 сентября 2013 на Wayback Machine
- Из истории создания компилятора с Алгол 68 Архивная копия от 17 января 2020 на Wayback Machine
- Диалог об Алголе-68 (Авторы просматривают архивные материалы и непринужденно беседуют) Архивная копия от 31 октября 2007 на Wayback Machine
- Система программ динамической поддержки для транслятора с Алгола 68
- Revised Report on the Algorithmic Language ALGOL 68 (англ.) — The official reference for users and implementors of the language
- Revised Report on the Algorithmic Language ALGOL 68 (англ.) — HTML version of the above
- Charles Lindsey’s paper on the development of ALGOL 68 for the 2nd History of Programming Languages conference proceedings Архивная копия от 3 декабря 2005 на Wayback Machine (англ.)
- Algol68 Standard Hardware representation Архивная копия от 2 января 2014 на Wayback Machine (англ.)
- History of ALGOL Архивная копия от 3 июля 2010 на Wayback Machine
Для улучшения этой статьи желательно: |