«Альфа-рождение»
или как создавалась система автоматического программирования
Рукописный текст с пометкой «Статья в газету «За науку в Сибири» об α-трансляторе. Написана 17.12.1964 между Загорском и Буем. Кончена 31.12.1964». Архив, пап-ка 90, листы 184—203. Опубликована 18.01.1965 г.
А. П. Ершов
В отчете о научной деятельности Вычислительного центра Сибирского отделения за 1964 г. есть небольшой абзац:
«Наиболее существенным результатом по системе АЛЬФА является обеспечение производственной эксплуатации системы в Вычислительном центре СО АН СССР. В течение 1964 года составлено с помощью АЛЬФА-транслятора свыше 300 различных программ для 25 институтов СО АН СССР и других организаций… Проведенные исследования показали высокое качество автоматического программирования, приближающееся к качеству ручного программирования. Такие показатели для систем автоматического программирования с языков типа АЛГОЛ получены в практике программирования впервые. Применение системы АЛЬФА по сравнению с другими системами автоматизации программирования по крайней мере вдвое сберегает машинное время на решение того же количества задач».
В этом лаконичном тексте заключен итог более чем пятилетней упорной работы большой группы сотрудников Вычислительного центра по созданию такой системы автоматического программирования, которая могла бы состязаться в искусстве составления программ с математиками-программистами, составляющими сейчас наиболее многочисленную категорию людей, связанных с вычислительными машинами.
Начало работы над системой относится к концу 1959 г., когда автор этой статьи выступил на Всесоюзной конференции по вычислительной математике с докладом на тему «Какой должна быть следующая программирующая программа?». В этом докладе излагались некоторые основные идеи о построении программирующей программы с высоким качеством работы, базирующейся на богатом входном языке, не зависящем от особенностей конкретных машин, удобном для формулирования задач вычислительной математики. Этот доклад вызвал оживленную дискуссию, но в целом реакция слушателей была благожелательной, и она воодушевила нашу группу, тогда еще весьма многочисленную, на дальнейшую работу.
Первым этапом была разработка входного языка системы. Она состояла в тщательном анализе, отборе и формализации изобразительных средств языка вычислительной математики. К началу 1960 г. язык был вчерне разработан. Хотя мы в то время еще все работали в Москве, но чувствовали себя сибиряками, и поэтому новый язык получил название «Сибирского».
Тем временем в печати появилось описание нового универсального языка программирования АЛГОЛ 60. Этот язык был разработан группой ученых из нескольких стран и предлагался в качестве международного стандарта. Сравнение его с Сибирским языком обнаружило поразительное совпадение главных идей, положенных в основу языков, хотя имелись существенные различия в стилистике. После детального изучения АЛГОЛа было решено поддержать международное начинание. Летом 1960 г. Ю. М. Волошин[1] и Г. И. Кожухин[2] проделали кропотливую работу по приспособлению стилистики Сибирского языка к АЛГОЛу 60. В результате Сибирский язык утратил свой «национальный» колорит, превратившись просто в некоторое расширение АЛГОЛа под скромным названием «Входной язык».
Завершение работы над Входным языком позволило перейти к построению самой программирующей программы. В декабре 1960 г. Г. И. Кожухин выступил на рабочей конференции по АЛГОЛу с предварительным сообщением о проекте программирующей программы. Это сообщение демонстрировало не только наличие серьезных идей в отношении построения системы, но также и нашу неопытность и неоправданный оптимизм: в докладе утверждалось, что вся система будет насчитывать не более 15 000 команд и будет закончена к концу 1962 г.
К началу 1961 г. отдел программирования полностью перебрался в Новосибирск. Перед началом массовой работы был составлен подробный проблемный план, который позволил распределить задания между разработчиками без боязни, что что-нибудь существенное будет упущено. В течение 1961 г. были получены основные научные результаты: И. В. Поттосин разработал алгоритмы качественного программирования циклов и нашел оригинальный метод усовершенствованной экономии команд; Р. Д. Мишкович[3] и Л. К. Трохан[4] разработали алгоритмы глобальной экономии памяти; Б. А. Загацкий[5] создал методику эффективного программирования процедур на основе их предварительного анализа; Г. И. Кожухиным был найден изящный способ динамического распределения памяти; Ю. М. Волошин ввел во Входной язык комплексные числа и разработал методику операций над многомерными величинами.
Для того чтобы сколотить результаты разрозненных научных исследований в единую систему, в конце 1961 года был предпринят «мозговой штурм». Он состоял в серии почти непрерывных заседаний, длившихся два месяца, во время которых в жарких спорах, сменах энтузиазма и разочарований создавалась и крепла равнодействующая разработанных алгоритмов программирования. Каждое решение записывалось в свято сберегавшуюся амбарную книгу, получившую название «Талмуд».
Наконец, удалось определить общую структуру системы, расчленить ее на блоки и выработать единообразный способ описания работы блоков. Мы занимались не только серьезными вещами и не пожалели времени на поиски более подходящего имени для нашего детища, сменив громыхающее название «программирующая программа Института математики СО АН СССР» на звучное и несколько таинственное «АЛЬФА-транслятор».
С переходом в начале 1962 г. к составлению схем блоков и программирования АЛЬФА-транслятора объем работы резко возрос. К группе присоединился ряд новых сотрудников. М. М. Бежанова[6] разработала блоки чистки циклов и обработки индексов. Л. Л. Змиевская[7] построила алгоритмы экономии констант и заключительной компоновки окончательной продукции транслятора — рабочей программы. Каждая четвертая команда АЛЬФА-транслятора была написана С. К. Кожухиной[8], Г. И. Бабецкий[9] разработал методику построения транслятором машинных команд и взял на себя программирование блока первичной обработки описаний.
По мере программирования АЛЬФА-транслятора наш оптимизм менялся обратно пропорционально объему проделанной работы. Длина транслятора перевалила за 30 тысяч команд, а конца еще не было видно. Мы намеревались ознаменовать открытие Академгородка в ноябре 1962 г. запуском АЛЬФА-транслятора, но к декабрю мы еще даже не приступали к комплексной отладке. Себя мы утешали только тем, что открытие Академгородка также не состоялось.
Новый 1963 год ознаменовался кризисом, который грозил свести на нет всю нашу работу: самый главный блок транслятора — программирование выражений, — разрабатываемый Г. И. Кожухиным, не влез в память машины. Короткий период шока сменился взлетом творческой активности, и ценою четырехмесячной задержки удалось разбить этот блок на два, работающих друг за другом. Этот важный успех позволил в мае 1963 г. приступить к комплексной отладке. «Талмуд» сменился вахтенным журналом с названием «АЛЬФА-рождение».
Комплексная отладка программы, состоящей из 40 000 команд и записанной на кое-как работающей магнитной ленте, имеет свою специфику. Машина, снабженная такой программой, ведет себя как кибернетическое устройство, несомненно одушевленное и к тому же обладающее злонамеренным характером, направленным против программиста. Научная работа выродилась в ожесточенное сражение с машиной, умело перепутывающей свои собственные неисправности с ошибками в трансляторе. За два месяца, исправив около сотни ошибок в трансляторе, просидев несколько десятков часов у машины и изведя километры магнитной ленты, мы так и не запрограммировали ни одной задачи. Рабочие записи в «АЛЬФА-рождении» сменялись крепкими выражениями по адресу машины и инженеров, унылыми стихами и детективными рассказами, сочиняемыми за долгое время ожидания окончания ремонта машины. Наши силы иссякли, и, забросив транслятор, все ушли в двухмесячный отпуск.
В сентябре 1963 г. свежие силы в сочетании с упорной работой инженеров сделали свое дело: была запрограммирована первая задача, состоявшая в вычислении дважды два. Это был решающий успех. «АЛЬФА-рождение» было сменено на «АЛЬФА-детство». В декабре были прочитаны первые публичные лекции об АЛЬФА-трансляторе и его входном языке, с 10 января 1964 г. началась опытная эксплуатация системы и прием задач на программирование от посторонних организаций.
Опытная эксплуатация обрушила на нас новые трудности. Первые запуски больших задач на трансляторе показали, что блоки глобальной экономии памяти могут стать непреодолимым препятствием на пути задачи из-за слишком большого времени работы блока и слишком малого количества доступной памяти машины. Автору этих блоков, Р. Д. Мишкович, и всем помогавшим ей пришлось проявить большую изобретательность, чтобы, внеся необходимые усовершенствования, добиться возможности программировать большие задачи. Сейчас транслятор уже строит программы объемом до 2000 команд, затрачивая на это не более 15 минут работы машины.
При внесении исправлений в транслятор мы столкнулись со своеобразным принципом «кибернетической неопределенности», состоящим в том, что существует такой критический предел сложности некоторой системы, за которым любая попытка исправить некоторую ошибку вносит в систему новые ошибки из-за невозможности точно учесть все последствия какого бы то ни было изменения в системе. Пока что нам удавалось не переступать этот предел, однако не раз случалось, что исправление пустяковой ошибки надолго выводило из строя АЛЬФА-транслятор.
Однако, несмотря на все трудности, транслятор «мужал» и неуклонно увеличивал выпуск своей продукции. Хотя некоторые задачи месяцами лежали без движения в архивах эксплуатационной «АЛЬФА-группы», возглавляемой Володей Минаевым[10], все больше и больше становилось задач, отдаваемых заказчику с просчитанными результатами на следующий день после поступления задачи в Вычислительный центр. Сотрудник Вычислительного центра В. Л. Катков[11] с помощью транслятора решил в течение 1964 г. около 30 задач — трехгодовую норму при ручном программировании. Недавно было устроено соревнование между АЛЬФА-транслятором и одним программистом, который написал условие задачи на АЛГОЛе и отдал его АЛЬФА-транслятору, а сам стал программировать вручную. Ручная программа составлялась и отлаживалась три недели и работала 7 с половиной минут. Транслированная программа была получена через два дня и работала 5 минут 40 секунд. Тщательное сравнение качества ручного и автоматического программирования, проведенное для 20 разнообразных задач, показало, что эти результаты не являются случайными. Совсем недавно подготовлен к опытной эксплуатации «АЛЬФА-отладчик», разработанный М. М. Бежановой и Ю. И. Михалевичем[12], который создаст ряд дополнительных удобств по отладке транслированных программ.
В конце января 1965 г. в Вычислительном центре состоится Всесоюзный семинар, на котором будут обсуждены основные научные итоги разработки АЛЬФА-транслятора. Вскоре после семинара система АЛЬФА начнет свою самостоятельную жизнь в вычислительных центрах страны. С нами же останутся приобретенный опыт, глубокое удовлетворение сделанной работой и бесценное чувство товарищества, родившееся и окрепшее за годы работы над системой АЛЬФА.
Примечания
[1] Юлий Михайлович Волошин (1935—1991) — м. н. с. отдела программирования ИМ СО АН СССР. (Здесь и далее, кроме специально оговоренных случаев, — примечания составителей. Сведения о персоналиях, как правило, приводятся на момент написания документа или на время описываемых событий.)
[2] Геннадий Исакович Кожухин (1932—1972) — м. н. с. отдела программирования ИМ СО АН СССР, ВЦ СО АН СССР, с 1970 г. заведующий отделом КБСП Минрадиопрома СССР (Новосибирск).
[3] Раиса Давидовна Мишкович (р. 1935) — м. н. с. отдела программирования ИМ СО АН СССР.
[4] Людмила Кузьминична Трохан (1935—1993) — м. н. с. отдела программирования ИМ СО АН СССР
[5] Бернард Анатольевич Загацкий (р. 1937) — м. н. с. отдела программирования ИМ СО АН СССР.
[6] Майя Михайловна Бежанова (1936—2001) — инженер отдела программирования ИМ СО АН СССР.
[7] Людмила Леонидовна Змиевская (р. 1936) — м. н. с. отдела программирования ИМ СО АН СССР.
[8] Светлана Константиновна Кожухина (р. 1935) — м. н. с. ИМ СО АН СССР, ВЦ СО АН СССР, старший инженер КБСП Минрадиопрома СССР.
[9] Геннадий Иванович Бабецкий (р. 1941) — лаборант отдела программирования ИМ СО АН СССР.
[10] Владимир Павлович Минаев (р. 1938) — м. н. с. отдела программирования ВЦ СО АН СССР.
[11] Владислав Леонидович Катков (р. 1936) — к. ф.-м. н., заведующий лабораторией ВЦ СО АН СССР, впоследствии директор НФ ИТМиВТ
[12] Юрий Игнатьевич Михалевич (р. 1943) — старший лаборант отдела программирования ИМ СО АН СССР.
Глава «Четверть века в борьбе за информатику»
Из сборника «Андрей Петрович Ершов — ученый и человек». Новосибирск, 2006 г.
Перепечатываются с разрешения редакции.