История развития программного обеспечения

Из истории развития языков Алгол-60 и ЛИСП

"Концептуальное знание редко воплощается в форме, доступной для обработки на ЭВМ. А если воплощается, то чаще всего неполно и односторонне. Носителем концептуального знания в большинстве случаев остается человек. Это тормозит автоматизацию многих процессов. Создание и широкое использование баз знаний во всех областях применения вычислительной техники - одна из актуальных задач ближайших десятилетий". Эта цитата взята не из современной статьи, посвященной проблемам BI и Data mining, а написана членом-корреспондентом РАН Святославом Сергеевичем Лавровым почти 20 лет назад, в 1984 г. Его жизненный путь тесно переплелся с историей становления и развития программирования в Советском Союзе. М-20, БЭСМ-6, Алгол 60, ЛИСП - были привычными инструментами в работе, а Сергей Павлович Королев, Андрей Петрович Ершов, Гурий Иванович Марчук - коллегами и современниками.

Как все начиналось? Слово - Святославу Сергеевичу Лаврову.

Студенческие годы - из автобиографии

К 1941 г. успел закончить в Ленинградском университете два курса матмеха, получил базовое математической образование, которое позже очень помогло в жизни. Примечательно, что во время учебы в ЛГУ интересовался теорией вычислений, хотя в ту пору в университете ее более основательно преподавали не матмеховцам, а астрономам. Они часто работали на арифмометрах, выдававшихся в читальном зале.

Когда началась война, как и все студенты-мужчины, пошел в ленинградское народное ополчение. Артиллерийский полк, куда мы все попали, задержался с формированием, и в это время к нам приехали вербовщики из созданной за несколько месяцев до этого Ленинградской военной воздушной академии (ныне Военный университет им. А.Ф.Можайского). Почти все мы согласились пойти туда учиться и были приняты. Трижды продлевался срок нашего обучения - от трех месяцев до шести, затем до года, а в результате мы были выпущены в 1944 г. с дипломом военных инженеров-механиков с сумбурным, но достаточно полным инженерным образованием, в звании старших техников-лейтенантов. Я попал по распределению техником звена в истребительный авиационный полк. В начале 1947 г. был демобилизован из армии и принят на работу на должность начальника группы баллистики в подмосковное ОКБ в отдел Главного конструктора Сергея Павловича Королева. Однако продолжал осваивать математику (в основном мне не хватало знаний по теоретической механике) и даже поступил заочно на мехмат МГУ.

Понадобилось много считать - засели за ЭВМ

Баллистика - это тот узел, куда стягиваются практически все характеристики изделия (так в советское время маскировали слова "ракета" и "космический аппарат") - весовые, энергетические, многочисленные параметры системы управления - и где должны были быть надежно определены его тактико-технические данные: дальность полета (параметры орбиты), "полезный" груз, рассеивание у цели. Простое перечисление характеристик, которые надо учесть, показывает, что баллистические расчеты очень трудоемкие. Поэтому с решением баллистических задач, задач управления динамикой полетов в Советском Союзе связано начало применения вычислительной техники и развитие нового научного направления - программирования, а также разработка средств описания способов решения задачи - различных алгоритмических языков. Ранее вычислительная техника нашла применение для выполнения расчетов ядерщиков.

Юношеское увлечение стало специальностью на всю жизнь

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

Алгол 60

Язык Алгол 60 мне сразу очень понравился, и я написал о нем книгу. Существовавшие уже языки Фортран, Кобол страдали большими недостатками. По сравнению с ними главным достоинством языков Алгол 60 и позже Паскаля было то, что они вобрали в себя все самое лучшее и необходимое, в отличие, скажем, от языка PL1, в котором авторы постарались воплотить чуть ли не все возможности, известные на тот момент в мире.

До появления Алгола, да и длительное время после мы программировали в кодах. С этим связана полуанекдотическая ситуация, существовавшая в Советском Союзе. Продолжительное время вычислительные машины выпускались практически без периферийных устройств. Для ввода применялись двухдорожечные перфоленты, емкостью примерно 1000 слов, а для вывода - примитивные устройства, позволяющие печатать на ленте шириной 5 см только числа и не позволяющие выводить буквенные символы. Позже для ввода/вывода стали приспосабливать стандартные телеграфные телетайпы и с их помощью, например, вводить тексты программ для дальнейшей компиляции.

Мы решили принять участие в создании транслятора с Алгола 60. На тот момент две группы уже приступили к разработке своих трансляторов: Михаил Романович Шура-Бура и Эдуард Зиновьевич Любимский в Институте прикладной математики АН СССР и А. П. Ершов - в отделе ВЦ Сибирского отделения АН (ВЦ возглавлял тогда Г. И. Марчук). Обе группы вежливо отказались от предложения о сотрудничестве с отделом программирования ОКБ, поэтому мы начали действовать самостоятельно. Я продумал план действий и в течение примерно пяти семинаров изложил его своим сотрудникам, а также распределил обязанности между участниками группы разработки из 5-10 человек. Встречаясь, мы обсуждали, что уже сделано, регулировали вопросы стыковки отдельных кусков транслятора, согласовывали версии, которые в то время назывались "проходами" (всего было свыше десятка проходов) и обсуждали задачи на будущее. Наша группа закончила разработку транслятора в октябре 1962 года раньше, чем другие две группы. На заседании Президиума АН, которое проводил Мстислав Всеволодович Келдыш, были зачитаны доклады от каждой из групп, и наши общие результаты получили весьма высокую оценку.

ЛИСП

В 1966 году после смерти Сергея Павловича я перешел из ОКБ в систему Академии наук и приступил к заведованию лабораторией программирования в Вычислительном центре, который возглавлял Анатолий Алексеевич Дородницын. Он считал, что мне следовало заняться координацией разработки программного обеспечения для главной вычислительной машины страны того времени - БЭСМ-6. Сначала диспетчер - зародыш операционной системы, потом и другие программы для БЭСМ-6 создавали разные организации: "родитель" - Институт точной механики и вычислительной техники, МГУ, наш ВЦ, группа в Свердловске и др. Честно говоря, скоординировать действия этих разработчиков не удалось, так как каждый считался только со своими взглядами, и в этом смысле я не оправдал надежд Дородницына. Одной из самых удачных своих работ в ВЦ считаю реализацию языка ЛИСП для БЭСМ-6. До этого существовали реализации ЛИСПа, но более скромные и менее распространившиеся, чем моя. Мы работали вдвоем: я и мой аспирант Гиви Сергеевич Силагадзе, с которым в 1978 году была написана книга "Автоматическая обработка данных. Язык Лисп и его реализация". Я обрадовался, когда на одной из международных конференций участник из Югославии показал мне эту книгу и сказал, что она является базовой по ЛИСПу в его стране. Хотя, конечно, все трансляторы, разработанные в Советском Союзе, могли использоваться только в странах Варшавского договора, куда Советский Союз поставлял свою вычислительную технику. Сегодня существует много новых реализаций ЛИСПа. Так я работаю на CLISP (Common LISP). В языке ЛИСП учтен опыт построения языков программирования для компьютеров, накопленный за 20 лет после появления машины Тьюринга - одной из первых абстрактных моделей, ставшей наиболее популярной в теории вычислимости. Обработка формул, автоматическое доказательство теорем, математические выкладки - сфера применения ЛИСПа в отличие от вычислительных задач, которые лучше решать с применением таких языков, как Паскаль, Алгол и др.

Какие бывают языки программирования

Наиболее распространенные и известные языки программирования: Фортран, Алгол, Кобол, ПЛ-1, Алгол-68, Паскаль, ныне забытая Ада, которую сменили языки семейства C, Java и др, - принадлежат фактически к одному семейству, которое проделало заметную эволюцию, но в основе осталось классом языков операторного, процедурного типа. Это - типичные языки для описания и представления алгоритмического знания. Было два главных события, каждое из которых ознаменовало для меня начало нового этапа в развитии алгоритмических языков: появление Алгола 60 (авторы - интернациональная группа специалистов) и разработка Никлаусом Виртом языка Паскаль.

Более разнообразны языки, ориентированные на описание и использование фактуального знания. Они лет на 10 моложе и ближе по своей природе к языкам спецификаций, описывают, с одной стороны, структуру баз данных (БД), с другой - предоставляют средства для формулировки запросов к БД.

"Надо ориентироваться на постепенный плановый переход от алгоритмических языков к языкам спецификаций в качестве основы использования средств вычислительной техники" - это Святослав Сергеевич сказал в 1984 г.

Существует еще одно семейство языков, ведущих в основном свое начало от языка ЛИСП (1960 г.) и характеризующихся по-разному: языки для обработки символьной информации, языки обработки списков (LISP - List Processing), языки искусственного интеллекта, языки управления роботами, языки логического программирования или же функциональные непроцедурные языки. Некоторые их черты, такие, как списки свойств и ассоциативные списки, прямо ориентированы на представление знаний, другие (использование списочных структур, рекурсивность, механизм возвратов) - на решение логических задач типа автоматического доказательства теорем. Семейство очень важно для создания и использования баз знаний. В него входят различные версии ЛИСПа (автор языка - Джон Маккарти), а также языки Плэнер, Коннайвер и др. Примыкает к ним язык Пролог, интерес к которому возрос после того, как японцы в своем проекте "ЭВМ пятого поколения" отвели Прологу одно из центральных мест.

Статья опубликована 09.02.2002 г.