Трансляторы с Алгола-60

Трансляторы с Алгола-60

Наталия Дубова

В 1962 году в СССР разработан первый транслятор для языка высокого уровня

Только в конце 50-х у пользователей советских ЭВМ появилась возможность вводить в свои машины символьную информацию. На начальных этапах все программирование было численным, поскольку устройства ввода могли работать только с числовыми данными. Видимо, поэтому системное программирование для первых отечественных машин развивалось в направлении создания трансляторов, а не автокодов и стандартных подпрограмм. В середине 50-х появились так называемые программирующие программы для БЭСМ и «Стрелы» — первый опыт автоматизации программирования в Советском Союзе. Первые школы программирования СССР складывались там, где шла наиболее интенсивная эксплуатация этих «рабочих лошадок» раннего периода отечественной техники, — в ИТМиВТ и в Институте прикладной математики под руководством академика Келдыша (здесь, кстати, в 1954 году была создана система расчета термоядерного взрыва). Благодаря накопленному опыту этим коллективам удалось к 1962 году добиться новых успехов — именно здесь разрабатываются отечественные трансляторы с только что появившегося языка высокого уровня Алгол. 

Первая версия Алгола была выпущена в 1958-м. Однако признание и известность получил усовершенствованный вариант языка, Алгол-60, названный так потому, что работа международного коллектива разработчиков над его спецификацией завершилась в 1960 году. Никлаус Вирт назвал Алгол-60 «первым языком, который был ясно определен: его синтаксис задан с помощью строгого формализма». В этом же году стартовали проекты реализации трансляторов для Алгола-60 в СССР: в ИТМиВТ и в ИПМ. 

К этому времени основная вычислительная нагрузка в этих организациях с БЭСМ и «Стрелы» перешла на последнюю ламповую машину Лебедева, М–20. Машина выпускалась серийно и завоевала популярность у программистов не столько даже из-за своего быстродействия, сколько благодаря изяществу и удобству. Идейным соавтором Лебедева при разработке М-20 был математик и программист Михаил Романович Шура-Бура, создавший для этой ЭВМ так называемую интерпретирующую систему ИС-2, которая автоматизировала обращение к библиотечным подпрограммам и использовалась всеми появившимися в дальнейшем трансляторами с Алгола для этой машины. Под руководством Шура-Буры коллектив программистов ИПМ начал разработку своего транслятора. 

Но первый транслятор с языка Алгол для М-20 был завершен в тех же стенах, где была разработана сама машина, в ИТМиВТ, хотя по времени этот проект был запущен несколько позже проекта ИПМ. Его автор, Святослав Сергеевич Лавров, стремился сделать систему трансляции как можно быстрее и по возможности эффективнее. Поэтому транслятор по версии ИТМиВТ под названием ТА-1 был фактически транслятором с подмножества языка, без рекурсии процедур и с рядом других ограничений. 

В ИПМ в начале 60-х работал блестящий коллектив программистов — почти весь первый выпуск специальности «Программирование» кафедры вычислительной математики мехмата МГУ, ученики Алексея Андреевича Ляпунова. Эдуард Зиновьевич Любимский, который вместе с Шура-Бурой руководил разработкой транслятора с Алгола, вспоминает, что, познакомившись с языком, специалисты института поначалу замахнулись на систему автоматизации программирования более высокого уровня, чем Алгол-60. Алгол по удаленности от машинного уровня был аналогичен операторной схеме программы Ляпунова. Однако Шура-Бура настоял на том, чтобы решать более «приземленную» и насущную задачу. 

В ИПМ тоже был свой ТА1 — первая, не вполне удачная версия транслятора. Окончательный вариант, ТА2, был завершен несколько позже разработки ИТМиВТ, весной 1963 года, и уже в мае демонстрировался на международной конференции по программированию в Киеве. Это была практически полная реализация языка, и во время показов в Киеве на М-20 транслятор справился с придуманной одним из участников тяжелейшей рекурсией. Любимский рассказал также, что вскоре после завершения разработки авторам ТА2 попал в руки западногерманский журнал с тестовой программой для трансляторов с Алгола-60. Журнал предлагал проверить зрелость транслятора, на какую категорию он потянет: man or boy. В ИПМ прогнали программу и удостоверились в высоком уровне своей разработки.

Первая версия языка, Алгол-58, очень заинтересовала Андрея Петровича Ершова. После окончания мехмата (тот же выпуск Ляпунова) он работал в ИТМиВТ и был автором программирующей программы для БЭСМ. Однако в начале 60-х Ершов — уже в Новосибирске, где формировался новый научный центр, Сибирское отделение АН СССР. Ершова пригласил сюда академик Соболев, о роли которого в развитии вычислительной математики и становлении советского программирования мы уже не раз упоминали. Теперь Соболев возглавил Институт математики СО; организацией отдела программирования в институте занялся Ершов. 

Постепенно в Сибири сложилась новая мощная программистская школа. Одним из первых ее ярких результатов стала разработка языка Альфа, явившегося итогом работы Ершова и его коллег над Алголом-58. Ершов развил возможности этого языка, в частности добавил матричные операции, и полученный в конечном итоге язык оказался во многом схож с Алголом-60. Фактически, завершенный в 1961 году язык Альфа — это «расширенное подмножество» Алгола-60, без рекурсий, но с определением многомерных значений и операциями над ними, возможностью инициирования переменных и некоторыми другими нововведениями.