Институт

Поттосин И.В. Эпсилон-история

Эпсилон-язык

Итак, середина шестидесятых. Вовсю идет "алголизация" программирования, которая дает в руки простому вычислителю удобный инструмент самому, а не через специального, умудренного знаниями специалиста-программиста, возможность создать программу и общаться с компьютером без посредников. Мы, разработчики системы АЛЬФА, активные участники этого процесса как его созидатели. Однако сама система АЛЬФА писалась непосредственно в машинном языке, и мы уже полностью хлебнули проблем, которые возникают, когда большая программная система (а система АЛЬФА была одной из наиболее крупных программных систем, которые были написаны к этому времени) создается на машинном языке. В наши планы входило создание других процессоров, связанных с обработкой символов: систем компьютерной алгебры, систем автоматического построения алгоритмов (иначе говоря, систем синтеза программ) и других подобных систем, связанных с обработкой текстов, формул или программ. На машинном языке их писать не хотелось, а использовать, как друзья-вычислители, Алгол мы, будучи реалистами, не собирались. Конечно, алгоритм для подобных невычислительных задач на Алголе можно было написать, но для кодировки текстов и экономного их размещения в машинных словах Алгол был не приспособлен, его изобразительные средства ориентировались на вычислительные задачи. Мы с завистью смотрели на вычислителей, которых мы же снабдили таким удобным инструментом, как система АЛЬФА, позволяющей им общаться с компьютером на "естественном" языке, и чувствовали, что "сапожник ходит без сапог".

Именно это побудило нас, разработчиков системы АЛЬФА Майю Бежанову, Бена Загацкого и меня, взяться за создание языка для собственных нужд. Можно было, конечно, придумать какое-либо расширение Алгола (или Альфа-языка), которое включило бы удобные для нас средства, но мы сразу решили пойти другим путем. Мы хотели мыслить в терминах не Алгол-машины, а в терминах машинного языка (программирования на машинном языке мы хлебнули с лихвой и чувствовали его довольно хорошо): в терминах двоичных кодировок, упаковки информации в машинные слова и пр., но только облекая все в более удобные, отдалившиеся от синтаксиса машинного языка одежды. Иначе говоря, мы от "нашего" языка хотели близкой к машинному языку семантики и удобного синтаксиса. Заметим, что подобная же, по-видимому, идея была и у Никлауса Вирта, когда он создавал ориентированный на архитектуру ИБМ-360 язык ПЛ-360, ставший прототипом большого числа так называемых машинно-ориентированных языков или "языков повыше уровнем" (higher level languages). Разница между нами была в том, что Вирт ориентировался на конкретную архитектуру, а мы — на конкретный класс задач.

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

Формирование языка происходило в жарких спорах. Надо было найти компромисс — пройти между Сциллой недостаточно хорошей выразительности и Харибдой неэффективной реализуемости. Решения принимались, потом отвергались, потом — с изменениями и модификациями — к ним возвращались снова. На наши решения влиял и тот неформальный язык спецификации программ, который мы когда-то с Геной Кожухиным предложили для АЛЬФА-системы. К первоначальному коллективу присоединился Саша Рар с его хорошим чувством языков. Довольно часто мы прибегали к советам Гены Кожухина.

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

Система Эпсилон-М

Так получилось, что Майя Бежанова и Бен Загацкий занялись другими проблемами, и окончательную версию языка (май 1967 г.) разрабатывали мы втроем: Владик Катков, Саша Рар и я. Сразу же приступили к созданию транслятора для М-220. Поскольку реализация языка уже просматривалась при его разработке, на написание транслятора ушло меньше месяца. Я писал основную часть, Саша Рар — реализацию описаний структурных данных и операций над ними, Владик Катков — ввод и вывод. С осени 1967 г. началась опытная эксплуатация системы, в которой активно участвовали Тома Панкевич и Галя Плотникова.

К 1968 году система "вышла на простор". Она использовалась и в ВЦ СО АН СССР, и в других организациях. С ее помощью были написаны многие системы: и языковые процессоры, и системы компьютерной алгебры, и другие подобные системы. Особую роль она играла как основной инструмент написания программного обеспечения системы коллективного пользования АИСТ-0: все это программное обеспечение размером в несколько сотен тысяч команд — и операционные системы, и трансляторы, и информационные системы, и системы компьютерной алгебры, и игровые программы (кроме ядра ОС, который работал на Минске-22 и был написан в мнемонике Минска) — было написано на Эпсилон.

Сам транслятор был написан тоже на Эпсилон, была осуществлена раскрутка (bootstrapping), благодаря чему все дальнейшее развитие системы осуществлялось с помощью ее самой.

Итак, система использовалась, доводилась, развивалась. Основную работу по доводке системы, ее сопровождению и распространению выполнял Саша Рар. Он же вместе с Владиком Катковым написал учебник по программированию на языке Эпсилон.

В 1967 году система включала только транслятор. Надо было строить систему — действительно систему — программирования, и в 1968 году за это взялись Галя Плотникова и Тома Панкевич. К концу 1969 года была разработана система ЭПСИЛОН-М, она уже включала, помимо немного модернизированного транслятора (был реализован во всей полноте механизм открытых процедур), отладчик (более точно, отладочный редактор, который вставлял в исходный текст операторы, реализующие заданные операции отладки), контроль исходного текста, вставку библиотечных процедур. Все эти работы, как уже говорилось, использовали язык Эпсилон как инструмент.

Другие ЭПСИЛОН-системы

В 1968 году в отдел пришел Толя Хоперсков. Он был сотрудником Института гидродинамики и последнее время занимался вычислительной механикой, программировал ряд задач и увлекся программированием как профессией. Со свойственной ему иронией он это отмечал так: "Программист, как минер, ошибается один раз в жизни — когда он выбирает специальность". В результате такой ошибки он попросился к нам в отдел, в нашу лабораторию, и я предложил ему написать вариант транслятора для БЭСМ-6. Хотя общие алгоритмы трансляции уже были опробованы в системе для М-220, но надо было их трансформировать для БЭСМ-6, а кроме того, доопределить семантику языка применительно к БЭСМ-6. Дело в том, что машинно-независимая семантика Эпсилон только частично покрывала семантику языка (так называемый эталонный уровень семантики), а полная семантика языка описывалась образами: каждой конструкции языка сопоставлялся ее образ в машинном языке. Вот создание таких образов для БЭСМ-6 и было одной из задач Толи. Начав работу в 1969 году, в начале 1970 года он уже завершил разработку и отладку системы ЭПСИЛОН-6.

В те же годы сотрудники Московского экономико-статистического института В. Морозов и Л. Семенова создали Эпсилон-систему для Минск-22 (система ЭПСИЛОН-Минск), доопределив аналогичным образом семантику Эпсилон для архитектуры Минск-22. Таким образом, язык Эпсилон в 1970 г. был реализован для всех основных отечественных компьютеров.

Системы ЭПСИЛОН успешно эксплуатировались на этих компьютерах, пока они (кроме БЭСМ-6) не были вытеснены "отечественными" ЕС ЭВМ. Где-то году в 1974-м была предпринята попытка разработать систему ЭПСИЛОН для ЕС ЭВМ, но неудачный выбор разработчиков не дал осуществиться этому проекту. Язык Эпсилон ушел в прошлое вместе со старыми компьютерами, но сыграл большую и очень полезную роль в создании различных программных систем для этих компьютеров.