жизнь ученого в фотографиях, документах и воспоминаниях


Об ученом

Святослав Сергеевич Лавров в отечественном программировании

Римма Ивановна Подловченко

Научно-исследовательский вычислительный центр Московского государственного университета, Москва, Россия

Среди имен, принадлежащих первопроходцам отечественного программирования, почетное место принадлежит Святославу Сергеевичу Лаврову. Научная биография С.С. Лаврова поистине уникальна. Еще в сравнительно молодом возрасте он стал основоположником ракетно-космической баллистики в СССР и неоспоримым авторитетом в области динамики управляемого полета, в частности, автоматического управления им.

Появление и применение цифровой вычислительной техники привели к резкому повороту в деятельности С.С. Лаврова – в качестве основной ее сферы он выбрал программирование. Сам С.С. пишет об этом так*: "Год 1960 был ознаменован тремя событиями. В мире - было опубликовано "Сообщение об алгоритмическом языке Алгол-60", в стране - была выпущена первая заводская серия из четырех вычислительных машин М-20, одна из которых попала к нам в КБ**, во мне - созрело решение посвятить себя впредь уже не баллистике (появилось немало весьма опытных и самостоятельных моих учеников, на которых можно было положиться), а программированию".

Немаловажным является признание С.С. в том, что решение посвятить себя программированию подогревалось не только профессиональными интересами: "Это занятие затрагивало какие-то глубинные струны моей души, отвечало складу всей моей личности".

С годами С.С. Лавров стал одним из классиков программирования в СССР, со своим собственным поиском путей развития этой области знания. Доминантой в этом служила цель – обеспечить возможности массового применения программирования. Особый дар С.С. проявился в том, чтобы на разных стадиях развития программирования предвидеть задачи, от решения которых зависит достижение этой цели.

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

К этому времени уже имелись две группы программирования (одна в ВЦ СОАН под руководством А.П. Ершова, другая в ИПМ АН, возглавлявшаяся М.Р. Шура-Бурой и Э.З. Любимским), объявившие о своем намерении заняться подобной работой. Той и другой С.С. предложил услуги свои и образовавшейся у него группы программирования; но обе группы предложение отвергли.

Тогда С.С. решился на самостоятельную работу – составил проект собственного транслятора и подключил свой коллектив к реализации этого проекта. Сам С.С. в написании программ транслятора не участвовал, но постоянно следил за ходом дела и помогал в трудных случаях принимать необходимые решения. Непосредственное руководство программированием взял на себя В.А. Степанов.

Первая версия транслятора (за ним закрепилось название ТА-1) заработала весной 1962, раньше, чем трансляторы, создававшиеся другими группами в академических институтах. Замечательным является то, что из всех трансляторов с Алгола для вычислительных машин второго поколения в СССР именно ТА-1 оказался наиболее популярным. Данное  обстоятельство обеспечивалось тем, что в ТА-1 в качестве входного языка было выбрано Святославом Сергеевичем подходящее  подмножество языка Алгол-60; оно отличалось простотой и достаточностью для широкого круга пользователей ЭВМ. Это подмножество, дополненное аппаратом рекурсивных процедур и функций, оказалось и в русле последующих тенденций развития языков программирования.  Здесь отчетливо проявился провидческий дар С.С.

В своей автобиографии С.С. пишет: "В 1963 году состояние работ по автоматизации программирования (так тогда именовалась разработка трансляторов) обсуждалось на заседании Президиума Академии наук СССР. Докладчиками были М.Р. Шура-Бура и я. Результаты наших работ получили достаточно высокую оценку в выступлении президента Академии – М.В. Келдыша и в решении Президиума."

Триада имен – А.П. Ершов, С.С. Лавров и М.Р. Шура-Бура – впервые появилась в качестве титульных редакторов русского издания сообщения об Алголе-60 [2].

Обращаясь к теме о том, как устанавливалась связь с А.П. Ершовым, С.С. пишет: "Если быть точным, то желание написать транслятор с языка высокого уровня появилось у меня еще до 1960 года под влиянием публикации в 1958 году "Сообщения об алгоритмическом языке Алгол". Язык этот  (его еще называли Алгол-58) был прямым предшественником Алгола-60 и уже содержал важнейшие из его конструкций, но не был столь хорошо продуман концептуально. В отечественной литературе наиболее полной работой по технике трансляции была книга А.П. Ершова "Программирующая программа для быстродействующей электронной вычислительной машины", которую я внимательно изучил и нашел в ней много интересного и полезного, особенно по технике реализации, но и кое-что малоприемлемое – прежде всего входной язык и способ его описания, основанный на схемах А.А. Ляпунова.

Я решил поближе познакомиться с А.П. Ершовым, благо он работал еще в Москве, в том же здании Института точной механики и вычислительной техники, куда я и мои коллеги регулярно ездили работать на БЭСМ. Андрей Петрович встретил меня очень доброжелательно и обстоятельно рассказал о своих взглядах на программирование вообще и на трансляцию в частности. Среди основных проблем трансляции он назвал задачу экономии памяти. Естественно, любой из программистов, работавших тогда на машинах с оперативной памятью в несколько килобайт, решал для себя эту задачу. Несколько переоценив свой опыт, я заявил, что, кажется, знаю общий метод ее решения. "Напишите", - заинтересованно сказал Ершов. И я за несколько недель написал статью [3], убедившись попутно, что решение, которым я располагаю, - далеко не общее."

Тем не менее, это был существенный вклад в только что зарождающуюся теорию программирования (см. [4]).

Однако переборный характер задачи распределения памяти отвратил С.С. от использования в ТА-1 полученного в [3] алгоритма. При этом С.С. признает, что нельзя заранее ставить крест на непрактических в данный момент теориях: "Фантастически быстрое развитие возможностей вычислительной техники иногда делает приемлемым теоретическое решение, до какого-то времени бывшее непригодным для практического применения".

Уже в начале 60-х годов многим и С.С. в их числе стало ясно, что Алгол вполне приемлем для программирования вычислительных задач, но исчерпывающим все нужды программирования считаться не может. Для различных предметных областей требуется разработка обогащенных языков.

Будучи вовлечен в решение задач, возникающих в рамках проблемы автоматизации конструкторских работ, С.С. в итоговой статье [5] (1963 г.) выделяет напрашивающиеся в языки программирования новые понятия и конструкции. Они-то и определили тенденции дальнейшего их развития.

Обратимся к тому, что С.С. пишет в [1]. "На примере одной предметной области – описания формы геометрических тел – далекой от общей задачи проектирования, но с оглядкой на нее, мы показали необходимость специфических для этой области типов данных и описали такие типы и соответствующий им набор операций. Однако следующий шаг – включение определений любых новых типов данных в универсальные языки программирования нами не был сделан, и позже это сделали другие. Делался вывод, что для реализации операции над данными новых типов следует использовать языки обработки символьной информации (ЯОСИ). Это – прообраз тезиса о том, что автоматический синтез программ по спецификациям должен быть основан на конструктивном доказательстве теоремы существования решения задачи (именно для проведения этого доказательства и нужны ЯОСИ). Этот тезис был впоследствии использован многими авторами, в том числе и в инициированных мной работах по синтезу программ и системе СПОРА".

Под влиянием новых идей создавалась расширенная версия транслятора ТА-1. Это осуществлялось В.А. Степановым – активным строителем первой версии ТА-1. В расширенной автобиографии С.С. дает оценку этих работ и отмечает свой вклад в них. "В.А. Степанов взял на себя абсолютно необходимую вещь - сопровождение (тогда этот термин еще не родился), включая дальнейшее развитее, транслятора с Алгола. Он со своей группой многое сумел сделать, но главное, пожалуй,  обеспечил возможность отладки транслированных программ на уровне входного языка. Сравнительно легко указать место обнаружения ошибки в программе, пока еще идет трансляция. Но я им посоветовал привязывать к Алгол-программе и те ошибки, которые обнаруживаются во время исполнения, производя для этого более или менее аккуратную обратную трансляцию. Они сумели это сделать, что позволило новому транслятору завоевать большую популярность как средство отладки Алгол-программ".

Построенный транслятор получил имя ТА-1М и стал безусловно первым в СССР, и возможно в мировой практике, транслятором, который позволял проводить отладку транслированных программ на уровне входного языка. 

Далее. В сферу создания ЯОСИ С.С. погрузился, демобилизовавшись в 1966 году из ОКБ скончавшегося в начале года С.П. Королева.

Первым шагом была работа над языком Снобол-А (препринт ВЦ АН, 1968 г.) и его реализация на БЭСМ-6. По признанию  самого С.С., работа не имела успеха в основном из-за непопулярности и слабости языка Снобол.

Существенно более успешной была реализация языка Лисп на БЭСМ-6 (совместно с Г.С. Силогадзе); были построены интерпретатор и компилятор Лиспа. Позже (см. [6]) описана более совершенная реализация Лиспа.

Важным этапом в деятельности С.С. явилось его участие в Рабочей группе WG2.1 IFIP (Международной Федерации по Обработке Информации) по Алголу, к чему привлек его А.П. Ершов. Излагая свое понимание путей развития универсального алгоритмического языка, в рабочих материалах группы С.С. зафиксировал тезис о необходимости включения в языки программирования средств взаимодействия с операционной средой. Сейчас этот тезис общепринят, особенно в системах программирования для персональных компьютеров, но в Рабочей группе WG2.1 он успеха не имел.  

Как альтернатива Алголу-68 и как шаг в основном русле раздумий С.С. родился алгоритмический язык АБВ (см. [7-8]).

В [1] C.C. пишет: "Появление все новых языков, ориентированных на конкретное применение, рассматривалось как неизбежность, подтверждаемая всей программисткой практикой тех лет. А всякая установившаяся практика нуждается в инструментальной поддержке. В этом качестве и был предложен язык АБВ. Был описан механизм последовательного расширения базового языка (то есть самого АБВ) до языка, в котором заинтересован пользователь. Это – прототип технологий программирования, ставших весьма популярными в последние 10-15 лет".

В расширенной автобиографии С.С. добавляет: "В языке АБВ, среди прочего, тип данных определялся как  (ссылка на) действие, порождающее новые объекты этого типа. Именно в этот момент закладываются все возможности дальнейшего развития этого объекта, его использования и взаимодействия с другими объектами. Считаю и сейчас, что это действие – единственная операция, которую следует связывать с типом данных. Нецелесообразно привязывать иные операции, использующие или вырабатывающие значения нескольких типов, лишь к одному из них. Тем более, что в математике уже укоренилось понятие сигнатуры – полной совокупности типов и операций. Ради проверки основных идей была построена компактная и эффективная модель реализации части Б (базы) языка АБВ на Лиспе".

Последний этап научной деятельности С.С. почти полностью связан с работой над системой СПОРА. Он начался в 1977. В [1] С.С. пишет: "Система СПОРА была задумана как средство построения формальных моделей прикладных (предметных) областей и автоматизации создания программ решения задач в этих областях на основе их спецификаций в модели".

У С.С. были расхождения с планами его сотрудников, работавших над системой СПОРА, но их проект языка системы "Декарт" он поддержал и пополнил новыми конструкциями, формальным описанием его семантики средствами исчисления предикатов первого порядка (без равенства и без функциональных букв), приёмами автоматического решения задач, сформулированных на этом языке. Выполнен анализ ряда примеров, позволивших выявить основные трудности, возникающие при решении задач, и наметить некоторые пути их преодоления. Сделанное пополнение языка "Декарт" излагается в [9] и является принципиальным продвижением в области автоматического синтеза программ.

Работа над системой СПОРА не была завершена, и С.С., анализируя причины этого, пишет в расширенной автобиографии следующее: "В качестве элемента системы СПОРА предполагалось использовать программу автоматического доказательства или опровержения теорем в исчислении предикатов. Над этой программой я работал сам. Но, увлекшись универсальной программой доказательства теорем, я вовремя не переключился на выделение из исчисления предикатов такого фрагмента, который охватывал бы только нужды эффективного доказательства теорем существования для синтеза программ. Возможно, что такой фрагмент найти и не удалось бы, но попытаться следовало. Исходным материалом для предъявления требований к такому фрагменту должны были послужить модели двух предметных областей: элементарной геометрии (задачи на построение) и элементарного программирования (типичные задачи на программирование, предлагаемые первокурсникам). Эти модели были построены…, могут быть еще усовершенствованы, но их опыт еще требует глубокого осмысления".

В обзоре [10] С.С. сформулировал предпосылки появления баз знаний в качестве основы нового поколения систем программирования (совместной работы человека с ЭВМ). База знаний определяется им как совокупное представление понятийного, фактуального (предметного) и процедурного знания и системы их взаимодействия. Высказанные в [10] положения существенно дополнены в [11], где подчеркнута роль метазнания (воплощение опыта работы с моделью предметной области) как основы развития базы знаний. Данными положениями предвосхищается развитие науки программирования.

На этом мы завершим краткий обзор работ С.С. в программировании, отметив, когда проявлялся его провидческий дар в каком направлении должно развиваться программирование. С.С. руководствовался в своих работах предвидением этих направлений и внес огромный вклад в то, что программирование действительно стало доступным для массового его применения.


Литература

  1. С.С. Лавров, Научная автобиография // В сб. История информатики в России. Ученые и их школы, Москва, Наука, 2003, с. 264-273.
  2. Алгоритмический язык Алгол-60. Пересмотренное сообщение. Пер. с англ. М.: Мир, 1965 г.
  3. С.С. Лавров, Об экономии памяти в замкнутых операторных схемах // Журнал вычислительной математики и математической физики, М., изд. физ-мат лит, 1961.
  4. А.П. Ершов, Современное состояние теоретического программирования // Проблемы кибернетики, вып. 20, 1968.
  5. С.С. Лавров и др., Аппарат геометрических описаний для автоматизации конструкторских работ // 1963.
  6. С.С. Лавров и Г.С. Силагадзе, Язык Лисп и его реализация, М., Наука, 1978.
  7. С.С. Лавров и др., Расширенный алгоритмический язык АБВ // в кн. Обработка символьной информации, вып. 3, М., Вычислительный центр АН СССР, 1976.
  8. Е.Н. Капустина и др., Схема расширений и основные принципы реализации аппарата процедур языка "Паскаль" в языке АБВ //  Обработка символьной информации, вып. 4, М., Вычислительный центр АН СССР, 1978.
  9. С.С. Лавров и др., D-аксиоматизация языка "Декарт" // сб. Прикладная информатика, М., изд. Финансы и статистика, 1987.
  10. С.С. Лавров, Использование вычислительной техники, программирование и искусственный интеллект (перспективы развития) // Микропроцессорные средства и системы, № 3, 1984.
  11.  С.С. Лавров, Представление и использование знаний в автоматизированных системах // Микропроцессорные средства и системы, № 3, 1986.

* Здесь и далее приводятся цитаты из научной автобиографии С.С. Лаврова, краткий вариант которой опубликован в [1], а расширенный находится в архиве автора этой статьи.

** Речь идет о конструкторском бюро, руководимом С.П. Королевым; С.С. работал там с 1947 до 1966 г., покинув КБ после кончины С.П. Королева.