Продолжаем наш ретроспективный цикл о тех советских разработках, которые стали историей и за которые, как принято говорить — “не стыдно”. В предыдущих постах цикла мы уже затрагивали разработку языков программирования в СССР и в этом посте хотели остановиться на ней подробнее. Несмотря на достаточно скромные достижения в этой области, разработчики языков и трансляторов знали моменты триумфа, а фундаментальный вклад советских ученых в развитие программирования ощутим и сегодня. Под катом немного о языках и трансляторах, разработанных в Стране Советов в 50-е — 60-е годы, а также об их создателях.
50-е — на заре новой эпохи
Уже к 50-м, как мы писали в первом посте цикла, стало очевидно отставание СССР от США, как в создании вычислительной техники, так и в распространенности её применения. Это не могло устроить ни амбициозных советских ученых, ни беспокойных руководителей советского государства, одержимых идеей “догнать и перегнать”. Геополитическое противостояние сыграло на руку пионерам советского компьютеростроения и программирования. Именно тогда советская наука, а затем и весь мир начал узнавать фамилии Ляпунова, Глушкова, Лебедева, Ющенко, Камынина.
Алексей Ляпунов и “программирующая программа”
Известно, что, до появления привычных нам текстовых языков, программирование было крайне непростым процессом, для которого использовались только машинные коды. Ситуация изменилась коренным образом после осознания того, что программу следует понимать как последовательность этапов обработки данных, что открывало возможности для формализации кодирования в виде команд. Одним из первых, кто предложил подобное понимание, был Алексей Ляпунов. Его, наряду с Конрадом Цузе и Джоном Мокли причисляют к авторам операторного метода построения языка программирования и концепции языков высокого уровня.
Под руководством Ляпунова на механико-математическом факультете МГУ был создан один из первых трансляторов в мире, который в 50-х назвали “программирующая программа”, она же ПП-1. Успешные испытания ПП-1 датируют 1954-м годом. После чего другой пионер советской информатики А. Китов приглашает Ляпунова продолжить работы в свежесозданном Вычислительном центре № 1 Министерства обороны СССР (ВЦ № 1 МО СССР). Вероятнее всего, для предстоящих работ с ЭВМ “Стрела”, которая в 1956-м году будет установлена в центре.
Уже в 1955-м под руководством Ляпунова в СССР появляется ПП-2, следующая версия транслятора с загрузчиком, отладчиком и библиотекой стандартных процедур. Насколько мне известно, ПП-2 на момент появления был единственным транслятором в мире, обладающим такими возможностями.
Ющенко, Королюк и адресный язык программирования
Параллельно под руководством Лебедева, а затем Глушкова в АН УССР Екатериной Ющенко и Владимиром Королюком создаётся язык прогрраммирования высокого уровня — APL — адресный язык программирования (не следует путать с A Programming Language, разработанным в 1960-х годах Кеннетом Э. Айверсоном).
Первая версия языка появляется уже в 1955 году, основная часть работ завершается в 1958-м. Особенностью языка стало использование указателей, в основу которых легли математические принципы, описанные математиком Колмогоровым. PL/I (Programming Language One), Гарольда Лоусона, созданный для IBM, где будут повторно ”впервые” использованы указатели (опубликован в 1965-м, стандартизирован в 1976-м). Для адресного языка, который создавался, в первую очередь, для работы с ЭВМ “Киев”, также будут созданы трансляторы.
Трансляторы Ершова — первый труд по автоматизации программирования
В это же время для БЭСМ (Большой электронной счетной машины) создает свой транслятор ещё один легендарный основоположник советского программирования, ученик Ляпунова, Андрей Ершов.
Он независимо от коллег за рубежом применяет в ПП БЭСМ принцип «адресной кодировки» для объектов в трансляции. Принцип адресации значительно сокращает поиск данных. В 1957-м Ершов использует в качестве способа непрерывного поиска данных по ключу функцию расстановки. Исследует статистические свойства функции и применяет её для сокращения количества команд.
В 1958 году печатается труд Ершова «Программирующая программа для быстродействующей электронной счетной машины», ставший первой в мире публикацией по автоматизации программирования. Крайне редкий случай — книга издается и за железным занавесом. Советский тираж монографии в 4K копий раскупают за 4 недели.
60-е — неравная конкуренция и время Рефала
Активное развитие разработки собственных языков программирования в СССР внезапно почти завершается в 1960-х. Всё дело в том, что, несмотря на преимущественно закрытый характер работы советских программистов, они всё-таки обмениваются знаниями и опытом с зарубежными коллегами. Языки, трансляторы, методологии также не способны быть абсолютно закрыты комьюнити разработчиков. В результате активного обмена знаниями и опытом, в СССР начинают применять западные ЯП. И в первую очередь, Фортран.
Отчасти, переход на Fortran обусловлено повсеместным распространением перфокарт. Как известно, структура Fortran-программ была адаптирована для ввода данных с перфокарт, что достигалось некоторыми удобными для такого ввода данных свойствами. Например, расположение меток с 1-й по 5-ю колонку, с 7-й по 72-ю располагался сам текст программы или комментария. Кроме Fortran использовался Algol, а позже даже COBOL для применения в народном хозяйстве, торговле и статистике.
Турчин и Рефал
Но не все советские программисты бросили создание собственных, аутентичных языков программирования. Так в 1960-е, на фоне мейнстримного увлечения фортраном, выдающийся советский, а впоследствии американский физик и кибернетик Валентин Турчин, создает Рефал — «рекурсивных функций алгоритмический» — один из первых в мире функциональных языков программирования. Язык был ориентирован на проведение символьных вычислений, в частности, обработку строк, перевод на различные искусственные и естественные языки, применение для создания многослойных нейронных сетей и других систем искусственного интеллекта. Согласно Вики, “Соединяет в себе математическую простоту с практической направленностью на написание больших и сложных программ.”
Рефал стал одним из самых оригинальных и единственным из советских ЯП, получивших широкое распространение. Так “рефал-функция” представляла собой набор предложений, состоящих из образца и шаблона. На вход функции подается некое выражение, а вычисление представляет собой последовательное сопоставление выражения с образцами, взятым из первого, второго и последующих предложений. Когда сопоставление удаётся, основываясь на шаблоне из того же предложения, формируется результат функции, представляющий собой новое рефал-выражение. В классическом рефале, когда сопоставление не происходит, фиксируется ошибка, а программа аварийно закрывается. В современных версиях языка эту особенность удалось заменить на постоянное порождение неуспеха функции.
В случае с Рефалом, семантика языка, возможно впервые в мире, описывается в терминах виртуальной машины, которые Валентин Турчин называл «рефал-машина» или «рефал-автомат». Такая машина имеет некое поле фиксации, в которое может попадать произвольное рефал-выражение, не содержащее рефал-переменных.
Язык Турчина был прорывом, особенно для уже импортозависимого в отношении ЯП СССР. Но неудобного ученого это не спасло. Критическое отношение физика и сатирического писателя (соавтор и редактор бестселлеров “Физики шутят” и “Физики продолжают шутить”) к советской действительности, отраженное в его публичных высказываниях поставило крест на его работе в СССР. Турчин постепенно стал восприниматься советским государством, если не как открытый враг, то как неудобный диссидент. В связи с чем он был вынужден покинуть Советский Союз и продолжил развитие созданной им работы в США. После опалы и эмиграции Турчина в среде советских ученых был популярен анекдот:
“— Слышали, вышла новая книга Турчина?
— Какая?
— “Физик дошутился”
Так для СССР оборвалась история одного из самых перспективных ЯП того времени.
В качестве заключения
Эта первая часть материала, вторая будет написана немного позже. Если вам известны значимые факты о разработке советских ЯП в этот период, мы обязательно учтем эту информацию и добавим позже.