Галерея славы

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

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

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

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

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

Описывая далее деятельность С.С. в программировании, разобьем ее на этапы, руководствуясь очередностью выявляемых им задач и кратко освещая их решение. Обосновывая выбор первой задачи, подлежащей решению, С.С. пишет: «Мне было ясно, что массовое программирование не может вестись только силами программистов-профессионалов, а ими пока с неизбежностью становились все, кому требовалось использовать ЭВМ. Эти люди были вынуждены осваивать машинный язык, приемы программирования и работы на ЭВМ. ...Алгол-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. **Здесь и далее приводятся цитаты из научной автобиографии С.С. Лаврова, краткий вариант которой опубликован в [1], а расширенный находится в архиве автора этой статьи.

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

Литература

  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.

Об авторе: Научно-исследовательский вычислительный центр Московского государственного университета
Статья опубликована в материалах семинара «История информатики в Сибири», прошедшего в рамках VII международной конференции памяти академика А.П.Ершова «Перспективы систем информатики», Новосибирск, 15-19 июня 2009 г.
Статья помещена в музей 16.11.2009 года.