Алгол 68 и его влияние на программирование в СССР и России (часть 1)

Алгол 68 и его влияние на программирование в СССР и России (часть 1)

История создания языка

В начале 60-х годов XX века сложилась следующая ситуация с языками программирования: в Америке - безраздельно царствовал Фортран, в Европе все большую популярность получал язык Алгол 60 [1], кстати, в его разработке принимали участие и американские учёные. Этот язык был довольно стройный, имел более- менее точное описание синтаксиса, в нём были некоторые новые интересные языковые черты (прежде всего, - рекурсия, чего не было в Фортране). В то же время язык обладал массой недостатков, как технических (например, использование целых числе в качестве меток) так и, собственно, языковых (например, никак не был стандартизован ввод/вывод, не была поддержана обработка литер и строк, а это уже в то время было довольно важной частью программирования, не было сложных структур данных). Поэтому авторы языка продолжили работу и в 1964 году выпустили Пересмотренное сообщение [2]. Чтобы организационно оформить эти работы, международная федерация IFIP (International Federation for Information Processing) в 1962 г. создала Рабочую группу Working Group 2.1 по алголоподобным языкам. После выпуска Пересмотренного сообщения об Алголе 60 эта группа приступила к разработке планов следующих языков программирования - наследников Алгола 60. Была выпущена так называемая Белая книга, которая содержала несколько очень интересных статей. Например, статья Ральфа Лондона, одного из создателей языка Alphard - в котором были некоторые предпосылки для доказательств корректности программ. В статье Барбары Дисков «Язык CLU» впервые были сформулировано понятие абстрактных типов данных. Была статья голландского ученого ван Вейнгаардена о двухуровневых грамматиках. Дело в том, что контекстно-свободные грамматики, которыми традиционно пользовались в то время, обычно в нормальной форме Бэкуса-Наура (Бэкус - разработчик Фортрана, а Наур - главный редактор сообщения об Алголе 60), были удобными и используются, кстати, до сих пор, но все-таки недостаточно сильными и выразительными, например, нельзя было описать контекст использования конструкции. Грамматики ван Вейнгаардена имеют двухуровневую структуру и по выразительной мощности эквивалентны машине Тьюринга, т.е. в принципе, с помощью такой грамматики можно описать любой алгоритм.

На основе Белой книги, а именно, на основе предложения ван Вейнгаардена, было предложено создавать новый язык, существенно более точный, с более формализованный описанием не только синтаксиса, но и семантики. В результате, после многолетних дискуссий Рабочей группы (РГ) 2.1, в работе которой приняли участие множество известных ученых из Америки и Европы, в декабре 1968 года ПЧР приняла сообщение о языке Алгол 68 [3]. Надо сказать, что этот язык в ту пору был очень тяжельгм и трудным в понимании, поэтому РГ 2.1 продолжила свою работу, расширила состав авторов языка, и к 1973 году было подготовлено Пересмотренное сообщение об Алголе 68 [4], в котором на основе всех базовых идей исходного языка и грамматик ван Вейнгаардена был определен существенно более приемлемый язык, более простой в реализации.

Начало работ по Алголу 68 в СССР

В СССР первую информацию о работах по Алголу 68 привез член РГ 2.1, будущий академик, а тогда еще член-корреспондент АН СССР - Андрей Петрович Ершов из Академгородка (Новосибирск). Через него эта информация распространилась по стране, в том числе её получил мой научный руководитель доктор физ-мат наук Григорий Самуилович Цейтин, который в то время руководил лабораторией математической лингвистики НИИММ ЛГУ. Он принял активное участие в обсуждение языка, писал весьма дельные замечания авторам и удостоился благодарности в предисловии к публикации по Алголу 68. Понятно, что язык с новыми выразительными возможностями, с новым способом описания синтаксиса и семантики вызвал большой интерес среди программирующей общественности, стали формироваться группы, готовящиеся к его реализации. В первые годы, правда собственно до реализации дело не доходило. Например, группа математиков из Академгородка всерьез занялась переводом сообщения об Алголе 68 на русский язык. Понятно, что русское описание языка в стране, где много миллионов людей говорят по-русски, вещь важная. Я за этой работой только наблюдал и, первое время, не принимал участия. Честно скажу, мне казалось, что они слишком много времени тратят на выбор терминов, даже на обсуждение того, каким шрифтом какие термины должны быть опубликованы, а типографские возможности того времени были совсем не такими богатыми, как сейчас. Всё это вызывало массу трудностей, но это было как-то не интересно для меня.

Из обсуждений того времени запомнился тот факт, что в русскоязычной литературе не было укоренившегося слова, обозначающего файл. Предлагались различные варианты переводы этого важного понятия: «тека» (от слова библиотека), «фонд» и так далее. Я помню, как шутил на эту тему Андрей Берс из Академогородка, что в русском языке есть только два слова, заканчивающихся на «-айл» - кайло и хайло, потом он всегда немножко молчал и с улыбкой добавлял: «ну, конечно, есть еще и Задыхайло». Задыхайло был очень известным советским программистом, не знаю, обижался ли он на эту шутку или нет, но я запомнил, что «-айл» это не очень русское окончание. Тем не менее, после долгих обсуждений был принят термин файл, которым мы пользуемся до сих пор. Кстати говоря, таких терминов в то время было принято довольно много, именно в связи с Алголом 68. Например, «сборка мусора». Первоначально казалось, что это совершенно не технический, не научный термин. Но, с другой стороны, это прямой перевод англоязычного термина garbage collection, довольно точно отражающего суть дела (в процессе динамического распределения памяти возникают участки памяти, на которые уже никто не ссылается, т.е. реальный мусор). Поэтому механизм, который уплотняет память, оставляет в памяти только те участки, на которые есть реальные ссылки это, действительно, сборка мусора. В основном перевод был работой Александра Федоровича Papa. Когда оригинальное сообщение об Алголе 68 было опубликовано (в 1969 г., так как официальное принятие осуществилось только в декабре 1968 г.), важно отметить, что уже в том же 1969 году в журнале «Кибернетика» вышел перевод сообщения об Алголе 68 [5], т е. все признавали, насколько важно иметь описание такого нового языка на русском языке.

Первые реализации Алгола 68 в СССР

У нас в Ленинграде Г.С. Цейтин собрал группу, состоящую из нескольких кандидатов наук и довольно большого количества студентов, которой предложил заниматься реализацией Алгола 68. Дело было новое, опыта программирования трансляторов не было ни у кого из нас. Борис Константинович Мартыненко, который в то время был руководителем лаборатории системного программирования, провел 10 месяцев в Дании на стажировке у Наура и принял участие в реализации транслятора с Алгола 60 GIER - одного из самых известных трансляторов на тот период. Насколько я знаю, он занимался лексическим анализатором (сканером, говоря в современных терминах). Конечно, он знал и общее устройство транслятора и даже читал курс в Университете на мат-мехе, который я на третьем курсе посещал. Итак, группа была сформирована, мы активно изучали язык. Язык был действительно довольно трудным для понимания, но мы были молодыми, мы были математиками и нам казалось, что это вполне естественно разбираться в сложных вещах. Разобрались, причем разобрались настолько, что находили ошибки в описании, писали авторам языка, получали ответы и продумывали реализацию.

Первые полтора-два года эта работа носила чисто исследовательский характер, даже без возможностей для выхода на практическую реализацию транслятора. Так совпало, что примерно в то же самое время в СССР были развернуты работы по созданию системы ЕС ЭВМ. Это была полная копия серии ШМ/360, руководство страны надеялось совершить такой «китайский скачок», разом догнав американцев по номенклатуре вычислительных машин и, особенно, по набору прикладных программ для них. Я не хочу сейчас вдаваться в обсуждение. хорошо это были или плохо. Лично я считаю, что это было ошибкой - у нас была довольно сильная школа советских создателей ЭВМ, были довольно интересные программы, в том числе и трансляторы с языков высокого уровня, например, для ЭВМ «Минск». Были, как минимум, три транслятора с Алгола 60, выполненные по руководством С.С. Лаврова в Подлипках (ТА-1М), А.П. Ершова в Академгородке (Альфа-транслятор) и М.Р. Шура-Буры в Москве (ТА-2).

Но решение было принято, машины серии ЕС начали проектировать, под это были отпущены определенные, довольно крупные финансовые ресурсы. В рамках процесса создания новых ЭВМ нам удалось получить финансирование для работ по отладочному транслятору с Алгола 68 для будущей ЕС ЭВМ (повторюсь, что ЕС ЭВМ в то время еще не было, она только проектировалась и разрабатывалась). Будучи студентом 5-го курса мат-меха я поехал в Москву для подписания договора с НИЦЭВТом. Так получилось, что старшие товарищи по разным причинам не смогли поехать, поэтому послали меня. Там я в первый раз встретился с А.П. Ершовым, который приехал ровно с той же целью - подписывать договор на создание транслятора с Алгола 68 для ЕС ЭВМ (проект Бета). На самом деле идея Ершова была существенно более глобальной - он хотел разработать семейство трансляторов с языков Алгол 68, PL/I, Симула 67 для разных машин, то есть реализовать идею UnCoL. Кстати, я только недавно узнал, что первые публикации по UnCoL (Universal Common Language) появились в Communications of ACM еще в 1958 году - идея при создании трансляторов с m языков на п ЭВМ изменить число компиляторов с m*n на m+n (сначала программы со всех входных языков переводятся на некий универсальный промежуточный язык, а потом из него делаются генераторы в коды разных ЭВМ). Эта идея довольно старая, но, насколько я знаю, в полном виде она до сих пор не была осуществлена. Ершов хотел заняться именно такой глобальной темой, и была достигнута договоренность между Ершовым и Цейтиным, что мы будем делать трансляторы со строго одинакового стандарта входного языка, но наш ленинградский транслятор будет играть роль отладочного, более-менее быстрого транслятора, а новосибирская система Бета будет глубоко оптимизирующим транслятором. Понятно, что наши коллеги из Академгородка хотели использовать опыт, который они накопили при проектировании и разработке транслятора Альфа с Алгола 60.

Итак, работа из чисто научно-исследовательской превратилась в хозяйственно-договорную со строгими этапами и сроками. Не всем участникам нашей группы это понравилось. Одно дело, когда ты спокойно работаешь, пишешь статьи, выступаешь на конференциях, и никто на тебя не давит, никто не напоминает, что завтра приедут заказчики и им надо предъявить такой-то отчет. Совсем другое дело - производственная работа. Однако, в те годы мы все это понимали не слишком сильно. Вольница была довольно большая, в Университете каждый занимался, чем хотел, и, кстати, научные результаты от этого не только не страдали, но, может быть, даже и выигрывали. Но даже само слово «плановость» было для нас чуждым в то время.

Так началась наша работа в тесном контакте с новосибирской группой. Эта работа приобрела и организационные формы.

Рабочая группа по Алголу 68

В рамках ГКНТ - Государственного комитета по науке и технике - была создана Рабочая группа, которую возглавил А.П. Ершов. Первое время его заместителем был Г.С. Цейтин. Примерно к 1975 году Цейтин во многом потерял интерес к этой сугубо практической работе, увлекся языками искусственного интеллекта, семантическими сетями и другими интересными вещами (например, языками проектирования поведения роботов) и постепенно стал отходить от работ по Алголу 68. Тогда Ершов назначил меня заместителем председателя Рабочей группы. Не скрою, это было очень лестно для меня, но это была не синекура - приходилось довольно много работать, и Ершов следил за тем, чтобы мы занимались существенно более широким кругом вопросов. Алгол 68 был в некоторой степени только поводом для встреч специалистов из разных городов, которые проходили 5-6 раз в год (чаще в Ленинграде и Академгородке, но и в других городах тоже, в Москве, Ростове, иногда в курортных местах, чтобы участникам был и дополнительный интерес отвлечься от основной работы и посетить заседание Рабочей группы).

После выхода в 1973 году Пересмотренного сообщения об Алголе-68 в Рабочей группе началась интенсивная работа по подготовке его официального перевода на русский язык. В этом работе принимали участие практически все члены Рабочей группы, но основную роль играл Андрей Александрович Берс. Эта титаническая работа завершилась публикацией в 1979 году толстой книги - билистинга [6]. Слева был оригинальный текст, а справа - перевод. Еще раз повторю, что многие русские термины вводились практически впервые, поэтому было решено оставить английский текст для справок.

Довольно часто Ершов давал членам Рабочей группы различные статьи на реферирование. Дело в том, что Ершов был одним из немногих советских специалистов, который реально мог выезжать за границу, посещать капиталистические страны - в те годы это было довольно трудно. Я помню, каким событием было, когда Цейтина отпустили на конференцию то ли в Румынию, то ли в Венгрию - даже такие поездки были в то время редкостью. А Ершов ездил, причем довольно свободно, у него были широкие связи в среде научной общественности, многие присылали ему свои статьи как уважаемому человеку. Ершов стремился, чтобы эти статьи не просто лежали на полке, раздавал их членам рабочей группы, мы их читали, а потом делали доклады на заседаниях рабочей группы и, главное, обсуждали эти статьи. Например, мне как-то раз Ершов поручил прочитать (и выступить с докладом по прочитанному материалу) статью С. Джонсона «Yet another compiler compiler» [7]. Сейчас все знают, что такое Yacc, то есть компилятор компиляторов - компилятор, который на входе получает грамматику языка, а на выходе - компилятор (на самом деле, только анализатор) с этого языка. Но в те годы это все было в новинку, и мне было очень интересно это прочитать. Или, например, статья Вулфа про оптимизации [8]. Он сделал оптимизирующий транслятор: вначале был придуман некий универсальный промежуточный язык (ПЯ), и любая оптимизация не меняла структуры текста на ПЯ, только добавлялись параметры в узлы графов, представляющих операторы программы. Была выполнена серия забавных экспериментов: было задано несколько оптимизаций, которые выполнялись в разной последовательности. Оказалось, что некоторые оптимизации надо выполнять несколько раз, так как применение одной оптимизации дает материал для других. Последовательность оптимизаций также влияет на качество кода - это была интересная статья, я ее изучил и потом рассказал о ней на заседании Рабочей группы.

Также на заседаниях обсуждались различные учебные материалы по Алголу 68, сравнивались различные реализации. В СССР появилось довольно много групп, реализующих Алгол 68. Попробую перечислить эти группы (работа шла в 70-е годы XX века). Очень интересная группа работала в Киеве (научный руководитель - Екатерина Логвиновна Ющенко, среди авторов были Штетельмен, Штейнбук, Макогон). Эта группа реализовывала не столько транслятор, сколько некоторую базу данных, их интересовали Persistent Data (сохраняемые данные). Если пользователь заканчивал работу, он мог нажать специальную кнопку, и все данные, созданные в процессе сеанса, запоминались в некоторой базе данных, а в следующий раз можно было начать с прерванного места. Тогда это была довольно большая новинка и интересная работа, но для нас, для Рабочей группы по Алголу 68 это было отчасти посторонней работой. Например, группа в Киеве даже не перешла на Пересмотренное сообщение об Алголе 68, а продолжала работать в соответствии с первым Сообщением, которым позже уже никто не пользовался. Тем не менее, эта работа была интересна.

Мне всегда очень нравилась работа московского ЦЭМИ (Центральный экономико-математический институт) под руководством Михаила Рувимовича Левинсона. Они разрабатывали транслятор с Алгола 68 для DEC-вской архитектуры PDP11 - тогда были советские копии СМ3, СМ4, СМ1420, и для этих машин москвичи сделали транслятор. Они предложили интересную идею отказаться от ограничений на область действия объектов, все данные размещать в куче, это давало возможность перейти к функциональным языкам (частичная параметризация, функции, выдаваемые в качестве результата вызовов других функций, и так далее). Тогда на первый план выходит, конечно, сборка мусора, и она занимает довольно большой процент времени счета, но, тем не менее, Левинсону и его коллегам удалось преодолеть эти трудности, и транслятор заработал. Очень интересная пионерская работа!

Одной из наиболее удачных реализаций являлась работа другой московской группы под руководством Александра Николаевича Маслова, куда входили Валерий Броль, Владимир Гущин и Владимир Яковлев. Эти молодые люди реализовали транслятор с Алгола 68 для новой советской машины Эльбрус. Эльбрус мы все очень любили, поскольку это была одна из немногих в то время оригинальных советских машин. Злые языки, конечно, говорили, что Эльбрус чем-то похож на Burroughs, но, поскольку я хорошо знаю архитектуру этих двух машин, то считаю, что это именно злые языки - так как многие идеи Эльбруса были абсолютно оригинальными. Для этой хорошей машины был сделан транслятор с более-менее полного языка Алгол 68, и я даже участвовал в некой комиссии по приемке этого транслятора на Эльбрусе.

Надо сказать, что этой группе было легче работать, так как Эльбрус - это high-level language (HLL)-computer, то есть компьютер, ориентированный на языки высокого уровня, и поэтому многие вещи, которые, например, нам на ЕС ЭВМ приходилось реализовывать многими командами (вырезки, циклы, вызовы процедур), в Эльбрусе реализовывались существенно проще - для всех этих конструкций были специальные машинные команды.

Еще пару слов про Академгородок и группу Ершова. Первоначально входными языками в проекте Бета были Алгол 68, Симула 67 и PL/1, а целевыми машинами были ЕС ЭВМ и БЭСМ 6. Эта группа вела огромное количество исследований, были очень интересные публикации, интересные результаты, но до практического воплощения дошли только трансляторы для БЭСМ-6 с Симульг 67 и Паскаля (Георгий Степанов и Сергей Покровский) и транслятор с Модулы 2, который выполнил Леонид Захаров. Называлось еще подмножество языка Ада, который реализовал Сергей Тен, но у меня об этом трансляторе мало информации.

Транслятор А68 ЛГУ

Итак, мы реализовали транслятор с Алгола 68 на ЕС ЭВМ. Поскольку ЕС ЭВМ появилась только в 1974, а реально работающей машиной стала в 1975, то нам пришлось некоторое время работать на других машинах. Начали мы с польской ЭВМ Одра 1204, там был довольно хороший транслятор с Алгола 60, поэтому анализирующую часть транслятора с Алгола 68 мы написали на Алголе 60 и отлаживали на Одре 1204. Попутно пришлось решать довольно много новых задач в технике трансляции, например, даже структура компилятора оказалась нестандартной, нетрадиционной. В Алголе 68 можно описывать новые типы и операции над ними. Так вот, если написано m а;, то это может быть описанием переменой а, если m - тип, а может быть унарной операцией, если m - операция. Мы этого не поймем, пока не идентифицируем m. Но, чтобы идентифицировать m, нам надо составить таблицу всех описаний с учетом блочной структуры, а это невозможно сделать без синтаксического анализа. Получается некий замкнутый круг.

У нас сразу было принято разделение труда - все конструкции были поделены между участниками группы (например, Цейтин взял себе вызов процедур и работал с параллельными предложениями. Это, действительно, самые трудные куски Алгола 68). Структурой компилятора в целом никто не занимался. Этим стал заниматься я и придумал некую схему из шести просмотров, которые чередуются (прямой, обратный) и в каждой прямой фазе собирается некоторая информация к концу конструкции, а на обратном просмотре эта информация передается к началу конструкции. Я предложил выполнить сначала некий первичный, более-менее примитивный синтаксический анализ только с целью проидентифицировать индикаторы видов и операций. Потом выполняется полный видовой анализ и генерация кода. В те годы даже опубликовать эти работы было практически негде - не было журналов по программированию. В 1975 году был образован академический журнал «Программирование», который издается до сих пор. Эго один из немногих отечественных журналов по нашей специальности, который индексируется в Web of Science и Scopus. Буквально во втором номере этого журнала опубликована моя статья «Процессы идентификации и структура компилятора с языка Алгол 68» [9].

Еще раз повторю, что на Одре работал только анализатор, генератор кода мы стали писать на языке макрогенератора ассемблера будущей ЕС ЭВМ, поскольку мы получили доступ к ее прообразу - к оригинальной американской машине IBM/360 - уж не знаю, какими путями удалось купить эти две машины (тогда были жесткие ограничения на поставку в СССР высокотехнологичной продукции), я даже помню их названия - Озон и Лотос. Они были установлены в НИЦЭВТЕ, головной организации, занимающейся разработкой ЕС ЭВМ, в Москве на Варшавском шоссе. Мы ездили туда еженедельно на 2-3 ночи. Конечно, днем на машинах работали москвичи, а ночное время давали нам, приезжим. Вначале это были чисто американские машины, затем рядом с каждым устройством стали ставить его аналог (рядом с оригинальным дисководом - немецкий, рядом с оригинальным устройством печати - болгарский аналог, что-то было из Чехословакии). В первое время эти аналоги работали довольно плохо, а так как мы работали ночами, за нами особенно не присматривали, мы научились быстро передергивать кабельные разъемы и работали только на оригинальных американских устройствах, чтобы особо не страдать. Конечно, это не приветствовалось, зато мы быстрее работали. То же можно сказать и про операционную систему. Пока коллеги из НИЦЭВТа прочитают версию программы операционной системы, пока разберутся, пока найдутся какие-то описания, уже выходила другая версия. В конце концов, в одном из американских университетов была разработана вообще другая операционная система VM (Virtual Machine). IBM купила эту систему у университета, доработала, сделала ее существенно более широкой по функциональности, но во много раз хуже по эффективности. Поэтому все передавали друг другу магнитную ленту с оригинальной операционной системой от университета, а не официальную IBM-овскую версию, которая была рекомендована компанией и НИЦЭВТом.

Это было тяжелое время, на протяжении многих и многих недель надо было каждую неделю ночами работать на компьютере, это было очень непросто, и все мои старшие товарищи отошли от этой работы: еженедельные поездки в Москву с тяжелейшими чемоданами, набитыми колодами перфокарт (магнитные ленты появились и стали реально использоваться намного позже), проживание в гостинице, ночная работа отнимали много сил. Работать на новой технике, когда и спросить было не у кого при возникновении проблем, было и трудно, и интересно.

В результате такой тяжелой работы мы сделали генерирующую часть из промежуточного языка в коды ЕС ЭВМ, всё как-то заработало. К этому времени у нас на мат-мехе уже появилась ЕС ЭВМ, причем это была первая машина такого класса (ЕС1030), поставленная в открытой, а не в военной организации - об этом даже писали ленинградские газеты.

Наконец, мы решили перенести весь транслятор на ЕС ЭВМ, применив метод раскрутки - переписали генеририрующую часть на Алголе 68 и транслировали каждую из нескольких сот процедур сначала на Одре 1204, получали текст на ПЯ в виде перфоленты, которую потом несли на ЕС ЭВМ, вводили (это был текст на макроязыке) и транслировали с макроассемблера в коды ЭВМ. Эта работа заняла около года, в это время было найдено много ошибок в трансляторе - ведь это же шикарный, огромный тест на Алголе 68. Попутно выяснилось, что многие конструкции мы реализовали не слишком удачно.

Например, мне запомнилась борьба за эффективность вызова. Первая реализация требовала 6 команд в порождении кода и 23 команды в подпрограмме. Работало это довольно медленно, мы предприняли большое количество усилий, чтобы ускорить процесс. Главный прорыв произошел тогда, когда мы, зная уже устройство UNIX, пустили динамическое распределение памяти справа налево, так что базовый регистр стал указывать и на вершину стека, и на статику текущей процедуры. В этих условиях нам удалось сделать так, чтобы на вызов приходилось полторы команды - одна четырехбайтовая и одна двухбайтовая команда и всего 11 команд в подпрограмме. В те годы, когда аналогичный транслятор с PL/I F занимал порядка 150 команд на каждый вызов, наш результат я оцениваю довольно высоко.

Как только закончилась первая раскрутка, мы тут же приступили ко второй раскрутке, продолжая улучшать качество кода, уменьшая время трансляции и так далее. В результате, после трех раскруток, получился довольно приемлемый транслятор, которым начали пользоваться программисты, в первую очередь, из военных организаций, потому что именно там требовалась особо высокая надежность.

Влияние Алгола 68 на другие языки

Как известно, Алгол 68 мирового признания не получил. В академических кругах им пользовались, было реализовано несколько трансляторов в разных странах. Возможно, это связано с тем, что Алгол 68 действительно был тяжеловат для широкой публики, он был рафинированным языком для Академии (так на Западе называют сотрудников университетов и исследовательских центров). Возможно, тому есть и другие причины. Появился Паскаль, который занял нишу простых языков. Никлаус Вирт на симпозиуме, посвященном его собственному восьмидесятилетию, который я недавно посетил (кстати, сам Никлаус жив-здоров и до сих пор активно работает, его и сейчас весьма интересно слушать, его идеи до сих пор продуктивны), рассказал историю языков, как он её видит. Он был членом Рабочей группы 2.1 и только позже он вышел из нее вместе с Хоаром и Дейкстрой, подписав так называемый Minority Report (Мнение меньшинства). Позже он создал язык Паскаль как ответ на вызов Алгола 68 - как сделать выразительный, но простой язык.

Как обычно, эта простота не далась даром. В нашей ленинградской группе, как только Паскаль появился, мы параллельно с нашими работами по Алголу 68 приступили к работам по созданию и транслятора с Паскаля (руководил этими работами Аркадий Попов). Мы сразу же наткнулись на кучу несоответствий. В стремлении упростить язык Вирт не обратил внимания на очень многие вещи. Например, Паскаль - язык с более-менее строгой типизацией. Целой переменной присвоить вещественное значение нельзя. Но, если процедура передается параметром другой процедуре, то корректность ее параметров уже никак не проверяется. Эго такая дырка в описании.

Еще один пример - было опубликовано описание Паскаля на русском языке под редакцией известного программиста Д.Б. Подшивалова из Москвы. На слова: «Паскаль существенно превосходит по мощности Алгол 60» была сноска редактора: «С этим утверждением трудно согласиться, например, на Паскале трудно написать универсальную программу умножения матриц», так как в Паскале границы массива входят в его тип, так что, формально говоря, нужна своя процедура умножения матриц для массивов разных размеров [10].

Тем не менее, влияние Алгола 68, конечно же, очевидно, если смотреть на набор конструкций Паскаля.

На мой взгляд, еще более ярким примером преемственности к Алголу 68 является язык С, опубликованный в 1972 году. В С, как и в Алголе 68, возможна выдача значения условным выражением, присваиванием, последовательностью операторов, а операция с накоплением а+=Ь - это же явно из Алгола 68 взято. Последовательные предложения, когда (а=ор1, Ь=ор2, выражение)+1 - это же чистая калька последовательного предложения из Алгола 68, только вместо «;» ставится «,». Эта конструкция очень удобна и используется, скажем, для передачи параметров когда в сложном выражении нужно попутно запомнить какие-то промежуточные результаты.

Не могу закончить эту часть доклада, не вспомнив, что мне было довольно трудно внедрять Алгол 68 в СССР. Времена были такие, что, если не было какого-то западного аналога, то никто и говорить не хотел. Когда в США появился язык Ада, быстро ставший стандартом Министерства Обороны США, этот язык был очень далек от Фортрана и PL/I, но очень похож на Алгол 68 по мощи, по выразительной силе, по полной типизации и так далее. Появление языка Ада в Америке помогло мне с внедрением Алгола 68 в СССР. Я стал говорить: «Смотрите, а Америке появился язык с полной типизацией, вопросы надежности ПО выходят на первый план», и этот аргумент мне очень помогал при внедрении Алгола 68, особенно, в военных организациях СССР.

Об авторе: Санкт-Петербургский государственный университет
Санкт-Петербург, Россия
а.terekhov@spbu.ru
Материалы международной конференции Sorucom 2014 (13-17 октября 2014)
Помещена в музей с разрешения авторов 13 ноября 2015