Если, по мысли Федора Достоевского, вся русская литература вышла из гоголевской «Шинели», то все теоретическое и практическое программирование в СССР вышло из проектов по его автоматизации. Благодаря тому, что советские программисты подключились к разработке универсального средства программирования для научных задач — языка высокого уровня Алгол, они влились в международное сообщество программистов. В конце 1950-х годов в СССР разрабатывались три проекта реализации языка для ЭВМ М-20: трансляторы ТА-1 (руководитель проекта Святослав Сергеевич Лавров, ОКБ-1 Министерства общего машиностроения), ТА-2 (руководитель Михаил Романович Шура-Бура, Институт прикладной математики АН СССР) и α-транслятор (впоследствии Альфа-транслятор), создаваемый под руководством Андрея Петровича Ершова (Институт математики с Вычислительным центром СО АН СССР). Начавшись как три независимые и подчас конкурирующие разработки, они в процессе развития приобрели взаимодополняющие свойства, решив проблему снабжения ЭВМ М-20 трансляторами с Алгола 60 [1].
Ведущие разработчики системы Альфа. Cлева направо: И. В. Поттосин, А. П. Ершов, Г. И. Кожухин. Вторая всесоюзная конференция по программированию (ВКП-2). Новосибирск, февраль 1970 г. |
Проект создания Альфа-транслятора, зародившись в московском ВЦ АН СССР, «перебрался» вместе с его исполнителями в новосибирский Академгородок. В этом проекте сформировался и окреп отдел программирования Института математики с Вычислительным центром СО АН, возглавляемый Ершовым. Начало работы над будущим Альфа-транслятором относится к концу 1959 года, когда Ершов выступил на Всесоюзной конференции по вычислительной математике с докладом на тему «Какой должна быть следующая программирующая программа?» [2]. Этот доклад был положен в основу концепции построения транслятора — программирующей программы (ПП) «с высоким качеством работы, базирующейся на богатом входном языке, не зависящем от особенностей конкретных машин, удобном для формулирования задач вычислительной математики».
В дневнике Ершова от 7 сентября 1958 года есть запись, помеченная как «начало α-транслятора» [3]: «В результате встреч с американцами, короткого разговора с Колей Нагорным, согласия Соболева и собственных размышлений родилась грандиозная идея. Чем больше я о ней думаю, тем больше она меня увлекает. Это сделать Stretch в задачах численного анализа». Уже тогда Ершов видел основные контуры входного языка и предполагал, что «было бы очень здорово разработать этот язык совершенно независимым от конкретных машин, давая привязку к той или иной машине в виде некоторых коротких общих указаний, касающихся представления чисел в машине и характера выполнения операций». Свой замысел Ершов назвал «сверх-ПП».
Работа двигалась в двух направлениях: поиск входного языка системы и изучение мирового опыта автоматизации программирования. В 1958 году международная группа исследователей опубликовала начальную версию языка программирования, основной целью которого было дать как можно более естественную форму для выражения алгоритмов вычислительной математики. Отталкиваясь от этих идей, Ершов вместе с коллегами решили разработать свой язык, внеся в него необходимые при решении вычислительных задач возможности оперирования с векторами, матрицами и многомерными объектами. Андрей Петрович и его команда работали в Москве, но чувствовали себя сибиряками, поэтому новый язык получил название «Сибирский».
В 1960 году в «Сообщении об алгоритмическом языке Алгол 60» под редакцией Петера Наура появилась окончательная версия международного языка Алгол 60. При его сравнительном анализе с Сибирским языком обнаружилось совпадение многих решений, причем ряд существенных конструкций Сибирского языка отсутствовал в Алголе 60. Было решено удалить все несущественные различия из Сибирского языка и приспособить его стилистику к Алголу 60. В результате Сибирский язык, как сегодня говорят, стал расширением Алгола под названием «Входной язык», а затем получил имя — язык Альфа.
Основные ограничения этого подмножества были связаны с решением задачи получения высокоэффективного кода, поэтому в Альфа-языке удалялось все, что мешало эффективной генерации кода или требовало сложного анализа при проведении оптимизаций. Вместе с тем, наряду с ограничениями Альфа-язык содержал ряд принципиальных новшеств, большинство которых увеличивало выразительную силу языка для вычислительных задач. Впервые арифметические типы были дополнены типом «комплексный» с введением всей комплексной арифметики. Также впервые было введено понятие многомерного значения (массива) и многомерной переменной, обладающей этим значением целиком. В языке появились средства создания многомерных объектов — значений и переменных.
Для естественного выражения итерации и рекуррентности в Альфа-язык было введено понятие объектов с верхним (временным) индексом, для которых операции по заведению последовательности и ее сдвигу реализовывались по умолчанию. Впервые в Альфа-языке были введены циклы без параметра и описания начальных значений, что сейчас присутствует во многих языках.
Альфа-6
В 1970—75 годах мне посчастливилось быть в команде разработчиков транслятора Альфа-6, которую в большинстве составляли старшекурсники мехмата НГУ. Транслятор был разбит на блоки. Каждый блок — самостоятельная задача. Над каждым блоком должны были работать по два человека. Делили нас на пары по тайному рейтингу. Каждый записывал на бумаге, с кем бы он хотел работать в паре, упоминая далее всех в порядке предпочтения. Результаты были известны только руководителям проекта. Разделение по парам оказалось очень удачным — работали с огоньком, подстегивая и помогая друг другу. Много лет спустя идея парного программирования была декларирована в экстремальной технологии разработки программ.
В 1970 году не было оболочки транслятора — нам пришлось, кроме собственно транслятора, сделать еще элементы его оболочки: текстовый редактор, отладчик и пр. К нашей гордости, транслятор пригодился для расчета реакторов в ВЦ Института им. И. В. Курчатова, откуда и поступил заказ на разработку оболочки. Чтобы справиться в короткие сроки, Андрей Петрович Ершов предложил испробовать идею Харлана Миллза, известную как «Метод хирургической бригады» с ролевым разделением работ. Мы с энтузиазмом стали делить роли — «главный программист», «редактор», «тестировщик», «архивариус». Однако ролей оказалось больше, чем исполнителей в проекте, и пришлось совмещать функции. Заодно освоили и ротацию, заменяя и дублируя друг друга при необходимости. Результаты превзошли все ожидания — производительность труда разработчиков возросла более чем в два раза.
В проекте Альфа-6 хорошо сработала идея коллективной ответственности — если в проекте каждый делает только свою подзадачу, выполняя роли проектировщика, кодировщика, тестировщика и пр., то в случае неудачи он «завалит» только свой фронт работ. Но если исполнитель выполняет определенную роль для всех подзадач, то в случае неудачи он поставит под угрозу весь проект. Не хочется подводить товарищей и проект в целом. Поэтому стараешься работать лучше. Вот так молодая команда стала одной из первых в мире, использовавшей ставший сегодня классическим метод Миллза, известный как «Команда главного программиста» или «Метод главного программиста».
— Татьяна Васючкова, доцент НГУ
Конкретный входной язык системы Альфа содержал еще ряд дополнений, учитывавших в том числе архитектуру объектной машины. Одним из важных дополнений было введение библиотеки процедур. Так как оперативная память ЭВМ М-20 была весьма скромной — 4К 45-разрядных слов, то нужны были механизмы поддержки работы программ с большими требованиями к памяти. Разработчики «заставили» пользователя укладываться в оперативную память путем фрагментации программы и данных с выделением внешних массивов и блоков.
После завершения работы над входным языком началась разработка Альфа-транслятора, которая предусматривала следующие этапы: создание проектного задания; разработка алгоритмов трансляции и оптимизации — в результате была выработана последовательность действий (блоков транслятора) и сформировалось представление о структурах данных, которые связывали блоки. Работа над блоками включала: описание их алгоритмов на специальном неформальном точном языке; прокрутку блоков — разработчик и кто-либо прикрепленный «исполняли» спецификацию на некотором примере, а результат исполнения применялся при прокрутке следующего блока; программирование блока по разработанной спецификации; автономную отладку блоков; комплексную отладку.
Команда Альфа-6. Новосибирск, 1972 г. |
К концу 1961 года были получены отдельные результаты, продуманы алгоритмы, которые предстояло объединить в систему. Первый день октября 1961 года отмечен в дневнике Ершова знаковой записью: «Начали по ПП так называемый мозговой штурм. Решили собираться каждый день, пока не выясним все вопросы. Определяем общую структуру ПП, разбиение на блоки, выяснение технических трудностей. Начали с перевода на внутренний язык». Серия таких почти непрерывных заседаний длилась до конца года.
Весь следующий год продолжалось программирование отдельных блоков, а к комплексной отладке Альфа-транслятора приступили только в начале 1963 года. Весь процесс создания Альфа-транслятора отражали толстые канцелярские книги — «вахтенные журналы»: «Рождение α-транслятора», «Детство α-транслятора», «Отрочество α-транслятора». Записи в книгах велись ежедневно и сначала отражали ход работы над проектом, результаты обсуждений и формулировки проблем, а когда началась отладка, записи в журнале стали играть еще более важную роль. Разработчики кратко суммировали результаты прогона программ, сообщали об ошибках, передавали информацию коллегам, сменявшим их в машинном зале. Нынешнему поколению программистов незнакомы проблемы, волновавшие их коллег в начале 1960-х годов (например, нестабильно работающее оборудование или нехватка машинного времени), а тогда на их решение тратилась львиная доля ресурсов.
Рабочие записи в «α-журналах» сменялись крепкими выражениями по адресу машины и инженеров, унылыми стихами и детективными рассказами, сочиняемыми за долгое время ожидания окончания ремонта машины. Когда машина стояла, а домой уйти было нельзя (вдруг начнет работать!), программисты коротали время, придумывая новые слова на известную мелодию или сочиняя басню:
Все те же Лебедь, Рак и Щука
Транслятор делать собрались.
Создали целую науку,
Писать программы принялись.
Трудились, рвением горя.
А зря!
Решающего успеха команда Ершова добилась осенью 1963 года, когда была запрограммирована первая задача «дважды два». В декабре 1963 года в Академгородке были прочитаны первые публичные лекции об Альфа-трансляторе и его входном языке. С 10 января следующего года начались опытная эксплуатация системы и прием задач на программирование от сторонних организаций, в основном институтов СО АН. Транслятор мог строить программы объемом до 2 тыс. команд, затрачивая на это не более 15 минут. Все больше становилось задач, отдаваемых заказчику с просчитанными результатами уже на следующий день после поступления в ВЦ, так с помощью транслятора удалось решить за 1964 год 30 задач — трехгодовую норму при ручном программировании.
В конце января 1965 года в ВЦ СО АН состоялся всесоюзный семинар по автоматизации программирования, организованный Комиссией по эксплуатации вычислительных машин М-20. Разработка отдела программирования вызвала интерес за рубежом — Ершова пригласили выступить с докладом об Альфа-трансляторе на симпозиуме «Построение процессоров для языков программирования» в рамках конгресса IFIP-65 в Нью-Йорке.
Конечно, с точки зрения современных требований к программному продукту Альфа-транслятор был труден и нуждался в сопровождении, поэтому в конце 1963 года была создана Альфа-группа, сотрудники которой консультировали пользователей. Вспоминает входившая в группу Лилия Корнева: «Из-за низкой пропускной способности машин и постоянных сбоев всегда была масса недовольных программистов... Кроме того, все программисты без исключения были уверены в том, что у них-то в задаче ошибок нет, а если задача выдана с ошибкой, то это ошибка не его. Особенно это было характерно для тех случаев, когда задача хотя бы один раз выдавала правильный результат, однако часто ошибки возникали при модификации задачи, но программист утверждал, что у него все правильно, а он якобы ничего не менял. Тогда приходилось спрашивать, а зачем же он еще раз пропускал задачу?»
В 1967 году в ВЦ СО АН СССР появилась самая мощная отечественная ЭВМ для научных расчетов — БЭСМ-6 (заводской № 003), и потребовалось модифицировать Альфа-систему для трансляции программ, записанных на Альфа-языке, в код для
БЭСМ-6. Так появился транслятор Алгибр (или Альгибр) — Альфа-гибридный, который был включен в состав первой очереди математического обеспечения БЭСМ-6 и стал одним из первых отечественных кросс-трансляторов. Алгибр работал на М-20 и либо выдавал на перфокарты программу в коде команд БЭСМ-6, либо записывал ее на магнитную ленту для передачи на БЭСМ-6 по специальному каналу. Такое решение не могло удовлетворять серийного пользователя, поэтому возникла потребность в новом программном продукте, им стала система Альфа-6.
Алгамс
Опыт создания Альфа-транслятора стал основой для разработки оптимизирующего транслятора Алгамс для машин серии «Урал» разной производительности, ориентированных на разных потребителей. Первой машиной этого ряда был «Урал14Д».
Команду разработчиков возглавлял Геннадий Исаакович Кожухин, а проект начался во второй половине 1967 года и должен был завершиться в течение двух лет. Я был еще студентом, и в мою задачу входил анализ программы с целью сбора детальной информации о вызовах процедур и списках их параметров. С учетом того, что язык был рекурсивным, а также имелась возможность подстановки имени процедуры в качестве параметра, это была довольно непростая задача. В дальнейшем предполагалось использовать эту информацию для оптимизации вызовов процедур. Кожухин строго вел разработку — мы регулярно собирались и обсуждали планы работ и полученные результаты. Работа эта велась в течение года, но завершена не была — машины «Урал» не показали высокой производительности и надежности и не выдержали конкуренции с БЭСМ-6.
— Иван Голосов, Новосибирский центр информационных технологий UniPro
Система Альфа-6 для БЭСМ-6 создавалась в ВЦ СО АН в 1970–1974 годах коллективом, костяк которого составили студенты-старшекурсники и выпускники мехмата Новосибирского университета под руководством Андрея Петровича Ершова, Геннадия Исааковича Кожухина и Игоря Васильевича Поттосина. Это был оптимизирующий многопроходной транслятор, действовавший на БЭСМ-6 в режиме пакетной обработки в рамках операционной системы ДИСПАК. При создании системы использовался опыт разработки и эксплуатации систем программирования Альфа и Альгибр. БЭСМ-6 была оригинальной машиной, не имеющей аналогов на Западе, поэтому напрямую системой Альфа на Западе пользоваться не могли, тем не менее эта система была там широко известна, по-видимому, в основном за счет выступлений и публикаций Ершова, которого сегодня можно было бы назвать евангелистом по продвижению программных продуктов. Работа в проекте способствовала профессиональному и научному становлению многих молодых сотрудников. Система Альфа-6 эксплуатировалась вплоть до демонтажа БЭСМ-6 в большинстве вычислительных центров страны в 1990-е годы.
Литература
- Ершов А. П. Становление программирования в СССР: переход ко второму поколению языков и машин. — Новосибирск, 1976. — С. 11. (Совместно с М. Р. Шура-Бура).
- Ершов А. П. Какой должна быть следующая программирующая программа? — М., 1959. — 37 с.
- Архив академика А. П. Ершова. URL: http://ershov.iis.nsk.su/archive (дата обращения 18.08.2014).
Ирина Крайнева (cora@iis.nsk.su) — сотрудник, Институт систем информатики им. А. П. Ершова СО РАН (Новосибирск), Наталья Черемных (chergeneral@gmail.com) — сотрудник, Виртуальный компьютерный музей (Москва).