В последнее время в России наблюдается всплеск интереса к истории отечественной информатики, кибернетики, вычислительной техники и АСУ — организуются конференции, публикуются статьи и книги с воспоминаниями очевидцев поистине знаменательной эпохи становления российской компьютерной индустрии в целом и школы программирования в частности. Различные аспекты развития информатики в России представлены в работах [1–3], и тем не менее для построения более полной картины следует, наверное, напомнить некоторые малоизвестные факты из истории отечественной информатики.

Основоположником информатики в СССР, в частности раздела автоматизации программирования, является Алексей Андреевич Ляпунов, первым предложивший рассматривать программу как последовательность чередующихся этапов, на которых выполняется некая обработка данных. Этап Ляпунов предложил назвать оператором, а схемой счета — совокупность операторов и логических условий. Схема и совокупность спецификаций каждого оператора — это программа [4]. Такой взгляд на программу в 50-х был революционным и сразу стал основой первых трансляторов (компиляторов) или программирующих программ, как их тогда называли.

Первым отечественным транслятором стала программирующая программа ПП-1, созданная молодыми специалистами С. С. Камыниным и Э. З. Любимским в 1954 году в Институте прикладной математики АН СССР (в то время — Отделении прикладной математики МИАН АН СССР), руководимом Мстиславом Всеволодовичем Келдышем. Сотрудники отдела программирования исследовали реализуемость операторных схем и определили основные типы операторов, соответствующие решаемым задачам: Ai — арифметические операторы, Pi — логические операторы, управляющие счетом, Fi — операторы переадресации, позволяющие переходить к следующему значению индекса.

 

ЭВМ «Стрела-1»
ЭВМ «Стрела-1»

 

ПП создавались для машины «Стрела-1» — ЭВМ была создана в СКБ-245 (с 1968 года — НИЦЭВТ), а первая машина в 1953 году была установлена в ИПМ. Поскольку  в ней не было индексных регистров, то для выборки элемента массива, соответствующего новому значению индекса, нужно было модифицировать команду, что должен был выполнять оператор F. Предусматривались логические операторы Pi, определяющие порядок вычислений, и Hi — нестандартные операторы, спецификациями для которых служил машинный код (прообраз современных макрокоманд) [5]. Схема счета задавалась примерно в таком виде: A1; A2; A3; P1; A4; … . Это было самое начало — то, что впоследстии стало очевидным и даже тривиальным, тогда считалось проблематичным.

Через год вышла вторая, рабочая версия ПП-2 [5] также для машины «Стрела-1». Ее разработчиками были С. С. Камынин, Э. З. Любимский, Э. С. Луховицкая и В. С. Штаркман. Входной язык ПП-2 включал упомянутые операторы, а также операторы восстановления Oi (обратные операторам переадресации), операторы засылки и некоторые другие.

Большое внимание было уделено оптимизации получаемых программ — например, при программировании арифметического оператора арифметический блок транслятора, найдя первое слева действие, которое можно выполнить, скажем a+b, писал соответствующую команду, помещающую результат в очередную так называемую рабочую ячейку. Затем транслятор заменял выражение a+b для всех вхождений в программируемом тексте на эту рабочую ячейку. Экономия рабочих ячеек в пределах одного оператора выполялась позднее специальным блоком «Экономия рабочих ячеек» транслятора, работающего после арифметического блока. При программировании логических выражений также выполнялась оптимизация. Все это приводило к тому, что полученная программа была практически столь же эффективной, что и написанная вручную; по нынешним временам это была весьма сложная и кропотливая работа. Для каждой программы нужно было вручную задать операторную схему (А1, А2, Р3, ...); для А — формулы и порядок, как их надо считать; для Р — логическую формулу вида Р = f (р1,р2,р3, ...), а для каждого р задать элементарные условия (а = в; с > 0) и номера операторов, к которым нужно перейти в случае выполнения или невыполнения условия Р. Для оператора F требовалось вручную в программе задать параметр, по которому должна быть осуществлена переадресация, указать номера операторов, в которых должны быть переадресованы величины, зависящие от данного параметра, а также номер ячейки, с которой начинается программа, допустимую длину программы и т. п. Мало того, для исключения ошибок все кодировалось в две руки.

ПП-2 использовалась в институте в течение нескольких лет. Недостатком ее был не очень удобный входной язык. После появления информации об Алголе (1958 год) язык ПП-2 был модернизирован и приближен к языку Алгол.

Работы над ПП оказали заметное влияние на деятельность других программистских коллективов — например, А. П. Ершовым, Л. Н. Королевым и В. М. Курочкиным в ИТМиВТ был реализован транслятор ПП БЭСМ. Толчком к этому проекту стал доклад Э. З. Любимского о ПП-1, сделанный на семинаре в МГУ осенью 1954 года [3]. Клоны ПП создавались для «Стрелы» в ВЦ АН СССР и еще в ряде организаций. Позднее для других ЭВМ в ИПМ были созданы интерпретирующая система ИС-2 (прообраз первых ОС), программа автоматического присвоения адресов (прообраз ассемблера) и др., но именно ПП-1 положила начало индустрии системного программного обеспечения.

 

М. Р. Шура-Бура, А. А. Ляпунов, С. С. Камынин

Э. З. Любимский, Э. С. Луховицкая, В. С. Штаркман

М. Р. Шура-Бура, А. А. Ляпунов, С. С. Камынин, Э. З. Любимский, Э. С. Луховицкая, В. С. Штаркман

 

 

Отмечая роль российских разработчиков в созданиии системного ПО, на сайте IEEE, в частности, отмечено, что в 1955 году коллективом сотрудников АН СССР (М. Р. Шура-Бура, С. С. Камынин, Г. Кустова, Э. С. Луховицкая, Э. З. Любимский, В. С. Штаркман) была создана производственная программирующая программа ПП-2 — первый в мире компилятор, производящий оптимизацию кода программы при трансляции арифметических и логических выражений. Проблема оптимизации кода программы (результата работы транслятора) очень интересовала зарубежных специалистов — отечественные работы по трансляторам проводились параллельно с работами по трансляции в США, а сопоставимый по уровню входного языка транслятор с языка Фортран появился там в 1957 году. Вместе с тем, к сожалению, основное внимание западные исследователи информатики уделяют истории создания оборудования ЭВМ в СССР, а про отечественную школу программирования, за редким исключением (IEEE Annals of the History of Computing, July-Sep, 1999), за рубежом известно мало.

Разработка компилятора не была самоцелью для группы научных сотрудников — при создании ИПМ в 1953 году перед коллективом института стояли две проблемы, от решения которых зависела национальная безопасность: работы, связанные с атомной энергией, и задачи баллистики для полетов спутников, космических аппаратов к Луне, к Венере и др.

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

Работа велась в тесном контакте с физиками Я. Б. Зельдовичем, А. Д. Сахаровым, И. Е.Таммом, и в ноябре 1955 года было проведено первое испытание изделия (РДС-37, термоядерный заряд). Результаты расчетов отличались от результатов эксперимента всего на 10%. К слову сказать, расчеты американцев расходились с данными экспериментов вдвое. Без тесного взаимодействия физиков, математиков, программистов и надежной работы «Стрелы», собранной из весьма ненадежных компонентов, такие показатели были бы невозможны.

Баллистико-навигационным обеспечением космических аппаратов занималась группа под руководством Д. Е. Охоцимского. В докладе на заседании Президиума академии наук СССР М. В. Келдыш говорил: «Организация наблюдений — один из самых сложных моментов исследовательской работы со спутником. Необходимо производить вычисление поправок траектории спутника на основе наблюдений, чтобы правильно засечь его на следующем витке. И здесь будут использоваться быстродействующие электронные машины… Мы попробуем застраховать себя — пустим сразу несколько электронных машин. Но необходимо, чтобы они действовали все сразу» [6]. Именно так и была организована работа. Обработка наблюдений, расчет траекторий орбит и целый ряд других задач, необходимых для обеспечения полетов, велись в нескольких организациях: в ИПМ на машине «Стрела»; в ВЦ ЦНИИ 27 МО — также на машине «Стрела»; в НИИ-4 МО, в котором до 1959 года своей машины не было — и специалисты из Болшево приезжали в Москву в ЦНИИ 27 для работы на их «Стреле» по своим методикам. Результаты, полученные в этих организациях, сверялись и в случае совпадения с допустимой точностью передавались главному центру. Машинный зал «Стрелы» был снабжен громкой связью со всеми ВЦ и наблюдательно-измерительными пунктами (НИП). Каждый сотрудник, участвовавший в оперативных работах, имел свои позывные, а в конце оперативной работы к коллективу обращался руководитель Межведомственной главной баллистической группы генерал Геннадий Павлович Мельников.

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

Успехи СССР в освоении космоса с помощью искусственных спутников дали возможность решить задачу достижения Луны и исследования окололунного пространства. Теоретические разработки по этой теме велись еще до появления в ИПМ «Стрелы», и когда потребовалось произвести расчет облета аппарата вокруг Луны, работа была выполнена в кратчайшие сроки. Космический аппарат «Луна-3», запущенный 4 октября 1959 года по траектории, рассчитанной в ИПМ на «Стреле» и М-20, облетел Луну и сделал первые снимки ее обратной стороны.

***

Много лет прошло с момента создания первых трансляторов и проведения первых расчетов на машине «Стрела», однако новому поколению программистов и разработчиков полезно знать то, что было сделано предшественниками, хотя бы для осознания того факта, что появившиеся в СССР научные школы как в области разработки вычислительной техники, так и в области программирования занимали передовые на тот момент рубежи.

Литература

  1. История информатики в России: ученые и их школы / Сост.: В. Н. Захаров, Р. И. Подловченко, Я. И. Фет. М.: Наука, 2003.
  2. Поспелов Д. А., Фет Я. И. Очерки истории информатики России // Новосибирск: ОИГМ РАН. 1989.
  3. Ершов А. П., Шура-Бура М. Р. Становление программирования в СССР // Кибернетика. Киев. 1976. № 6. С. 141–160.
  4. Ляпунов А. А. О логических схемах программ // Сб. «Проблемы кибернетики». Вып. 1. М.: Физматгиз, 1958. С. 46–74.
  5. Камынин С. С., Любимский Э. З., Шура-Бура М. Р. Об автоматизации программирования при помощи программирующей программы. // Сб. «Проблемы кибернетики». Вып. 1. М.: Физматгиз, 1958. С. 135–171.
  6. Келдыш М. В. Об искусственных спутниках Земли // Келдыш М. В.. Избранные труды. Ракетная техника и космонавтика. М.: Наука, 1988. С. 236.

Галина Езерова (keldysh111@gmail.com), Энгелина Луховицкая (luhov@list.ru) — сотрудники ИПМ им. М. В. Келдыша РАН (Москва).