Алгол 68 (англ.
Algol 68 от англ.
algorithmic — алгоритмический и англ.
language — язык) — процедурный императивный высокоуровневый язык программирования, потомок языка
Алгол, существенно доработанный. Разрабатывался в период 1964—1968 годов. Позиционировался как универсальный язык для описания произвольных алгоритмов обработки данных высокой сложности. Отличается большим объёмом, богатством возможностей и сложностью синтаксиса.
Далее текст от лица Андрея Николаевича Терехова - доктора физико-математических наук, профессора, заведующего кафедрой системного программирования Санкт-Петербургского государственного университета.
История создания языка
В начале 60-ых годов XX века сложилась следующая ситуация с языками программирования: в Америке – безраздельно царствовал
Фортран, в Европе все большую популярность получал язык Алгол 60, кстати, в его разработке принимали участие и американские учёные. Этот язык был довольно стройный, имел более-менее точное описание синтаксиса, в нём были некоторые новые интересные языковые черты (прежде всего, - рекурсия, чего не было в Фортране). В то же время язык обладал массой недостатков, как технических (например, использование целых числе в качестве меток) так и, собственно, языковых (например, никак не был стандартизован ввод/вывод, не была поддержана обработка литер и строк, а это уже в то время было довольно важной частью программирования, не было сложных структур данных). Поэтому авторы языка продолжили работу и в 1964 году выпустили Пересмотренное сообщение. Чтобы организационно оформить эти работы, международная федерация IFIP (International Federation for Information Processing) в 1962 г. создала Рабочую группу Working Group 2.1 по алголоподобным языкам. После выпуска Пересмотренного сообщения об Алголе 60 эта группа приступила к разработке планов следующих языков программирования – наследников Алгола 60. Была выпущена так называемая Белая книга, которая содержала несколько очень интересных статей. Например, статья Ральфа Лондона, одного из создателей языка Alphard – в котором были некоторые предпосылки для доказательств корректности программ. В статье
Барбары Лисков «Язык CLU» впервые были сформулировано понятие абстрактных типов данных. Была статья голландского ученого ван Вейнгаардена о двухуровневых грамматиках. Дело в том, что контекстно-свободные грамматики, которыми традиционно пользовались в то время, обычно в нормальной форме Бэкуса-Наура (
Бэкус – разработчик Фортрана, а
Наур – главный редактор сообщения об Алголе 60), были удобными и используются, кстати, до сих пор, но все-таки недостаточно сильными и выразительными, например, нельзя было описать контекст использования конструкции. Грамматики ван Вейнгаардена имеют двухуровневую структуру и по выразительной мощности эквивалентны машине
Тьюринга, т.е. в принципе, с помощью такой грамматики можно описать любой алгоритм.
На основе Белой книги, а именно, на основе предложения ван Вейнгаардена, было предложено создавать новый язык, существенно более точный, с более формализованным описанием не только синтаксиса, но и семантики. В результате, после многолетних дискуссий Рабочей группы (РГ) 2.1, в работе которой приняли участие множество известных ученых из Америки и Европы, в декабре 1968 года IFIP приняла сообщение о языке Алгол 68. Надо сказать, что этот язык в ту пору был очень тяжелым и трудным в понимании, поэтому РГ 2.1 продолжила свою работу, расширила состав авторов языка, и к 1973 году было подготовлено Пересмотренное сообщение об Алголе 68, в котором на основе всех базовых идей исходного языка и грамматик ван Вейнгаардена был определен существенно более приемлемый язык, более простой в реализации.
Начало работ по Алголу 68 в СССР
В СССР первую информацию о работах по Алголу 68 привез член РГ 2.1, будущий академик, а тогда еще член-корреспондент АН СССР –
Андрей Петрович Ершов из Академгородка (Новосибирск). Через него эта информация распространилась по стране, в том числе её получил мой научный руководитель доктор физ-мат наук Григорий Самуилович Цейтин, который в то время руководил лабораторией математической лингвистики НИИММ ЛГУ. Он принял активное участие в обсуждение языка, писал весьма дельные замечания авторам и удостоился благодарности в предисловии к публикации по Алголу 68. Понятно, что язык с новыми выразительными возможностями, с новым способом описания синтаксиса и семантики вызвал большой интерес среди программирующей общественности, стали формироваться группы, готовящиеся к его реализации. В первые годы, правда собственно до реализации дело не доходило. Например, группа математиков из Академгородка всерьез занялась переводом сообщения об Алголе 68 на русский язык. Понятно, что русское описание языка в стране, где много миллионов людей говорят по-русски, вещь важная. Я за этой работой только наблюдал и, первое время, не принимал участия. Честно скажу, мне казалось, что они слишком много времени тратят на выбор терминов, даже на обсуждение того, каким шрифтом какие термины должны быть опубликованы, а типографские возможности того времени были совсем не такими богатыми, как сейчас. Всё это вызывало массу трудностей, но это было как-то не интересно для меня.
Из обсуждений того времени запомнился тот факт, что в русскоязычной литературе не было укоренившегося слова, обозначающего файл. Предлагались различные варианты переводы этого важного понятия: «тека» (от слова библиотека), «фонд» и так далее. Я помню, как шутил на эту тему Андрей Берс из Академогородка, что в русском языке есть только два слова, заканчивающихся на «-айл» - кайло и хайло, потом он всегда немножко молчал и с улыбкой добавлял: «ну, конечно, есть еще и Задыхайло». Задыхайло был очень известным советским программистом, не знаю, обижался ли он на эту шутку или нет, но я запомнил, что «-айл» это не очень русское окончание. Тем не менее, после долгих обсуждений был принят термин файл, которым мы пользуемся до сих пор. Кстати говоря, таких терминов в то время было принято довольно много, именно в связи с Алголом 68. Например, «сборка мусора». Первоначально казалось, что это совершенно не технический, не научный термин. Но, с другой стороны, это прямой перевод англоязычного термина garbage collection, довольно точно отражающего суть дела (в процессе динамического распределения памяти возникают участки памяти, на которые уже никто не ссылается, т.е. реальный мусор). Поэтому механизм, который уплотняет память, оставляет в памяти только те участки, на которые есть реальные ссылки это, действительно, сборка мусора. В основном перевод был работой Александра Федоровича Рара. Когда оригинальное сообщение об Алголе 68 было опубликовано (в 1969 г., так как официальное принятие осуществилось только в декабре 1968 г.), важно отметить, что уже в том же 1969 году в журнале «Кибернетика» вышел перевод сообщения об Алголе 68, т.е. все признавали, насколько важно иметь описание такого нового языка на русском языке.
Первые реализации Алгола 68 в СССР
В Ленинграде (Санкт-Петербург) Г.С. Цейтин собрал группу, состоящую из нескольких кандидатов наук и довольно большого количества студентов, которой предложил заниматься 3 реализацией Алгола 68. Дело было новое, опыта программирования трансляторов не было ни у кого из нас. Борис Константинович Мартыненко, который в то время был руководителем лаборатории системного программирования, провел 10 месяцев в Дании на стажировке у Наура и принял участие в реализации
транслятора с Алгола 60 GIER – одного из самых известных трансляторов на тот период. Насколько я знаю, он занимался лексическим анализатором (сканером, говоря в современных терминах). Конечно, он знал и общее устройство транслятора и даже читал курс в Университете на мат-мехе, который я на третьем курсе посещал. Итак, группа была сформирована, мы активно изучали язык. Язык был действительно довольно трудным для понимания, но мы были молодыми, мы были математиками и нам казалось, что это вполне естественно разбираться в сложных вещах. Разобрались, причем разобрались настолько, что находили ошибки в описании, писали авторам языка, получали ответы и продумывали реализацию.
Первые полтора-два года эта работа носила чисто исследовательский характер, даже без возможностей для выхода на практическую реализацию транслятора. Так совпало, что примерно в то же самое время в СССР были развернуты работы по созданию системы ЕС ЭВМ. Это была полная копия серии
IBM/360, руководство страны надеялось совершить такой «китайский скачок», разом догнав американцев по номенклатуре вычислительных машин и, особенно, по набору прикладных программ для них. Я не хочу сейчас вдаваться в обсуждение, хорошо это были или плохо. Лично я считаю, что это было ошибкой – у нас была довольно сильная школа советских создателей ЭВМ, были довольно интересные программы, в том числе и трансляторы с языков высокого уровня, например, для ЭВМ «Минск». Были, как минимум, три транслятора с Алгола 60, выполненные по руководством С.С.Лаврова в Подлипках (ТА-1М), А.П. Ершова в Академгородке (Альфа-транслятор) и М.Р. Шура-Буры в Москве (ТА-2).
Но решение было принято, машины серии ЕС начали проектировать, под это были отпущены определенные, довольно крупные финансовые ресурсы. В рамках процесса создания новых ЭВМ нам удалось получить финансирование для работ по отладочному транслятору с Алгола 68 для будущей ЕС ЭВМ (повторюсь, что ЕС ЭВМ в то время еще не было, она только проектировалась и разрабатывалась). Будучи студентом 5-го курса мат-меха я поехал в Москву для подписания договора с НИЦЭВТом. Так получилось, что старшие товарищи по разным причинам не смогли поехать, поэтому послали меня. Там я в первый раз встретился с А.П. Ершовым, который приехал ровно с той же целью – подписывать договор на создание транслятора с Алгола 68 для ЕС ЭВМ (проект Бета). На самом деле идея Ершова была существенно более глобальной – он хотел разработать семейство трансляторов с языков Алгол 68,
PL/I, Симула 67 для разных машин, то есть реализовать идею UnCoL. Кстати, я только недавно узнал, что первые публикации по UnCoL (Universal Common Language) появились в Communications of ACM еще в 1958 году – идея при создании трансляторов с m языков на n ЭВМ изменить число компиляторов с m*n на m+n (сначала программы со всех входных языков переводятся на некий универсальный промежуточный язык, а потом из него делаются генераторы в коды разных ЭВМ). Эта идея довольно старая, но, насколько я знаю, в полном виде она до сих пор не была осуществлена. (
А М. Шварцман? http://ershov.iis.nsk.su/archive/eaindex.asp?lang=1&gid=1464).
Ершов хотел заняться именно такой глобальной темой, и была достигнута договоренность между Ершовым и Цейтиным, что мы будем делать трансляторы со строго одинакового стандарта входного языка, но наш ленинградский транслятор будет играть роль отладочного, более-менее быстрого транслятора, а новосибирская система Бета будет глубоко оптимизирующим транслятором. Понятно, что наши коллеги из Академгородка хотели использовать опыт, который они накопили при проектировании и разработке транслятора Альфа с Алгола 60.
Итак, работа из чисто научно-исследовательской превратилась в хозяйственно-договорную со строгими этапами и сроками. Не всем участникам нашей группы это понравилось. Одно дело, когда ты спокойно работаешь, пишешь статьи, выступаешь на 4 конференциях и никто на тебя не давит, никто не напоминает, что завтра приедут заказчики и им надо предъявить такой-то отчет. Совсем другое дело – производственная работа. Однако, в те годы мы все это понимали не слишком сильно. Вольница была довольно большая, в Университете каждый занимался, чем хотел, и, кстати, научные результаты от этого не только не страдали, но, может быть, даже и выигрывали. Но даже само слово «плановость» было для нас чуждым в то время.
Критика языка
Прежде всего, отрицательные отзывы касаются сложности синтаксиса Алгола-68. В частности, Хоар отмечал, что, отойдя от простоты языка-прародителя, новый язык совершенно не облегчает разработку программ. Как говорил Хоар, «члены комитета использовали постоянные задержки в его работе, чтобы втиснуть в будущий язык всё более сложные конструкции, вместо того, чтобы попытаться упростить его».
Критики отмечали также, что язык провоцирует разработчика на свободное неструктурное программирование с активным использованием собственных абстрактных категорий и обозначений. От этого код программы становился неудобочитаемым, что затрудняет групповую разработку программ и их сопровождение. Кроме того, чрезмерное обилие возможностей языка делало затруднительным полноценную реализацию компилятора.
© А.Н.Терехов, СПбГУ
Для www.math.spbu.ru
В начало