Импортозамещение которое мы потеряли: советские ЯП и их создатели (часть 2)

в 20:39, , рубрики: Алмо, импортозамещение, ЛЯПАС, рапира, СССР, Эль-76, языки программирования, ЯП

В комментах к предыдущей части некоторые читатели предложили рассказать о ещё нескольких ЯП, которые сыграли значительную роль для развития программирования в СССР. Автор не смеет игнорировать просьбы трудящихся. В этой части цикла поговорим об АЛМО, Эль-76 и Рапира и ЛЯПАС.

Импортозамещение которое мы потеряли: советские ЯП и их создатели (часть 2) - 1

АЛМО— прообразы виртуальных машин

АЛМО — машинно-ориентированный язык, т.е. язык системного программирования, созданный в 1965-66 г.  Задумывался как язык-посредник при трансляции с других популярных в Союзе ЯП. Он стал удачной попыткой универсализации системного программирования для существовавших тогда компьютеров с различной архитектурой, использовался на М-20, БЭСМ-6, Минск 2, Урал 11, М-220, Весна, СПЭМ-80 и др. 

Подполковник Алексей  Маклаков,  разработчик транслятора АЛМО
Подполковник Алексей Маклаков, разработчик транслятора АЛМО

О разработчиках языка известно немного, вернее сказать ничего. Согласно воспоминаниям Владимира Орлова, для ЭВМ М-220 были Алексей Маклаков и Евгений Ермаков, служившие в ЦНИИ МО СССР, они же в соавторстве с В.В. Богдановым являются авторами пособия “Программирование на языке АЛМО”.Не исключаю, что они имели отношение и к созданию самого языка. Суть АЛМО была в том, чтобы иметь трансляторы для каждой совместимой аппаратной платформы — и работать через них с множеством ЯП. Это в полной мере удалось с Algol-60 и Fortran, которые имели трансляцию в АЛМО, сами трансляторы также были написаны на нём. В языке была реализована концептуальная ориентированность на машинные процессы и архитектуру, что выражалось в постфиксной записи выражений, использовании регистровых объектов, операциях с битами машинных “слов”.

Основой языка была абстрактная “машина Алмо” (в каком-то смысле её можно назвать прообразом сегодняшних виртуальных машин). По дефолту эта АЛМО-машина была наделена свойствами компьютеров того времени. Например, имела 4 уровня памяти, характерных для ЭВМ этого периода:

  • регистры-модификаторы (М-память);

  • рабочие регистры (R-память);

  • оперативная память (V-память);

  • внешняя память (EX-память).

Память состояла из сегментов (ячеек), называвшихся “слова”. Размер слов не был ограничен, но в языке предусматривались средства для определения конкретного количества бит в слове для каждого конкретного случая. Также существовал набор операций, соответствовавший системе команд компьютера. Таким образом подход в АЛМО для своего времени был достаточно передовым. Аналогичные принципы позже использовались в Р-код и М-код. Язык использовался достаточно ограничено, преимущественно в системах связанных с оборонкой. Владимир Орлов, в своих воспоминаниях на Хабре, о перспективах АЛМО вспоминает следующее:

К сожалению, у нас в стране развитие компьютерной индустрии пошло таким путем, что применение Универсальной системы программирования утратило актуальность. Но, тем не менее, создание машинно-ориентированного языка и действующей системы трансляторов на его основе, несомненно, являлось значительным научным достижением.

В 1980-х программирование на АЛМО практически перестало быть актуальным, т.к. возможности языка стали архаикой, а архитектура компьютеров значительно изменилась.

ЛЯПАС — логический синтез 1960-х

Аркадий Закревский, автор ЛЯПАС

Аркадий Закревский, автор ЛЯПАС

История языка ЛЯПАС тесно связана с биографией его создателя, советского и белорусского ученого Аркадия Закревского. Автор фундаментальных работ по программированию и методам синтеза релейных систем, Закревский, начал свои изыскания в конце 1950-х, а в 1960-м защитил кандидатскую на тему «Матричный метод синтеза релейных схем». Первый оппонент Закревского на защите д.т.н. А. Б. Сапожников, после зачитывания отзыва о работе предложил сразу присвоить ученому степень доктора наук, минуя степень кандидата. В те годы, средства программирования логического синтеза были слишком примитивны, в связи с этим подобные задачи, которые за редким исключением пытались решать на ассемблерах, представляли огромную сложность. Это привело Закревского к идее о том, что для таких задач целесообразно создать специальный язык. К 1962-му году ученый впервые продемонстрировал ЛЯПАС (Логический язык для представления алгоритмов синтеза). Считается, что ЛЯПАС — первый язык программирования логических задач, реализованный для компьютеров.

Пример кода,  ЛЯПАС
Пример кода, ЛЯПАС

 Научные изыскания и практика программирования на новом языке описываются Закревским в монографии «Алгоритмический язык ЛЯПАС и автоматизация синтеза дискретных автоматов» (1966 г.). В 1967 г. этот труд ложится в основу его докторской диссертации, которую он успешно защищает в Институте автоматики и телемеханики АН СССР (г. Москва).

Сборник статей Закревского и Гаврилова о языке ЛЯПАС, изданный ACM Monograph Series

Сборник статей Закревского и Гаврилова о языке ЛЯПАС, изданный ACM Monograph Series

ЛЯПАС один из немногих советских языков того периода, вызвавших живой интерес за рубежом. Появляется английский перевод сборника статей Закревского и Гаврилова с описанием языка ЛЯПАС и алгоритмов синтеза дискретных автоматов: «LYaPAS, A Programming Language for Logic and Coding Algorithms» (Ed. by M. Gavrilov and A. Zakrevskij), ACM Monograph Series, New York, London, 1969. На момент создания, 1964 год, ЛЯПАС превосходил Algol и Fortran в возможностях описания и решения логических задач, т.к. последние, в тот период, были ориентированы на вычисления. Первоначально транслятор языка разрабатывался для двух советских ЭВМ: «Урал-1» и М-20. Особенно успешным получился вариант для М-20, который занимал в памяти 1600 слов и был способен синтезировать 250 машинных команд в секунду, что вдвое превосходило возможности актуального в то время транслятора Algol. 

ЭВМ "Урал-1", один из первых серийных компьютеров в СССР

ЭВМ "Урал-1", один из первых серийных компьютеров в СССР

Несколько позже Закревским и командой было выпущено обновление транслятора ЛЯПАС-70 для компьютеров БЭСМ-3М, БЭСМ-4, СМ-4, Минск-2 и Минск-22. Следующая версия ЛЯПАС-7, которая создавалась уже в Минске, а не в Томске, работала на М-220 и БЭСМ-6.

БЭСМ-6 (признаётся одной из лучших ЭВМ второго поколения в мире)

БЭСМ-6 (признаётся одной из лучших ЭВМ второго поколения в мире)

К 1974 г. в качестве развития языка, появилась его усовершенствованная версия — ЛЯПАС-М, которая поддерживалась машинами серии ЕС ЭВМ, использовала числа с подвижной запятой, символы кодировки ГОСТ 10859 и взаимодействовала со средой разработки ЛЕС. Эту версию успели портировать для ПК, однако более совершенные C++ или Prolog лишили шансы ЛЯПАС на развитие.

Русский эль для “Эльбрусов”

Эль-76 интересен тем, что это кириллический ЯП высокого уровня с русской лексикой. С начала 70-х в СССР была запущена программа создания, мощных, по тем временам, многопроцессорных суперкомпьютеров «Эльбрус». Название которых унаследовали современные процессоры МЦСТ, тайваньского происхождения. 

Пульт суперкомпьютера "Эльбрус"

Пульт суперкомпьютера "Эльбрус"

Проект реализовывался в Институте точной механики и вычислительной техники АН СССР имени С. А. Лебедева в 1972-73 годах. Там же советский (позже американский и российский) ученый, доктор технических наук и будущий лауреат Государственной премии СССР, Владимир Пентковский разработал для “Эльбрусов” кириллический язык программирования. Сперва его назвали “Автокод Эльбрус”, позже он получил название “Эль -76”. Лексическим предшественником “Эль-76” в “семействе” кириллических ЯП считается АЛМИР-65, разработанный академиком Глушковым для “МИР” (Машина Инженерных Расчетов) в 1965 году.

Язык был похож на хорошо знакомый советским программистам Алгол-68, при этом семантика отражала архитектурные особенности “Эльбрусов”.  Ассемблера у языка не было, поэтому программы на прочих языках транслировались в “Эль-76”. На “Эльбрусах“ использовались и другие универсальные ЯП того времени, такие как Fortran, COBOL, Pl/1, Algol, при этом использование русской лексики и кириллицы обеспечили локальную популярность “Эль-76” среди специалистов, работавших с флагманами советского компьютеростроения. 

 программа
   процедура передатьпривет = проц(ф32 числоприветов)
   начало
     если числоприветов = 0 то
       печатьмс(стр8 "МИР не получил ни одного привета!")
     инес числоприветов = 1 то
       печатьмс(стр8 "В МИР был отправлен всего один привет!")
     иначе
       печатьмс(стр8 "МИРУ передали несколько приветов. А если точно, то их было");
       печать(числоприветов)
     все
   конец;
   
   печатьмс(стр8 "Привет просто так!"); % такой привет мартышка точно не потеряет
   печатькс();                          % разрыв строки
   передатьпривет(100)                  % привет из процедуры
 конец

Вероятно, одной из причин привязанности некоторых советских программистов к “Эль-76” стала возможность хранения типа объявляемой переменной вместе с её значениями и изменениями при выполнении программы. Под типом подразумевалось то, что хранится в памяти, а под представлением — что под этим понимается.

Не уникальной, но полезной особенностью языка стала поддержка парадигмы структурного программирования. Программы можно было структурировать в виде циклов, последовательностей и ветвлений. При этом программы можно было использовать как подпрограммы более крупных программ. “Эль-76” был процедурным языком, но при этом был способен обрабатывать исключения, которые в терминах  Пентковского назывались “ситуациями”.

Владимир Пентковский

Владимир Пентковский

Несмотря на то, что язык приобрёл локальную популярность в Союзе и получил ограниченное развитие, широкого распространения за его пределами он, по понятным причинам, не получил. В СССР его также постепенно вытеснил Pascal, а на персональных компьютерах преимущественно применялся BASIC. Также широко использовались Алгол-68 и Фортран, на которые выпустили ГОСТы.  Автор и руководитель разработки языка Эль-76, Владимир Пентковский, после прекращения работ над серией “Эльбрус” в 1990-х улетел в США, где трудоустроился в компанию Intel и участвовал в создании архитектуры векторного (SIMD) расширения команд SSE, впервые использованном в процессорах Pentium III.
С 2010 года до своей смерти в 2012 году, работал в МФТИ руководителем Лаборатории суперкомпьютерных технологий для биомедицины, фармакологии и малоразмерных структур (iSCALARE).

Рапиры и шпаги для школьников

 Язык РАПИРА (расширенный адаптированный поплан-интерпретатор, редактор, архив) является одним из наиболее известных ЯП позднего СССР. Он ненадолго стал одним из основных языков в советской школе, где с 1985 года «Основы информатики и вычислительной техники» вошли в обязательную школьную программу. РАПИРА создавалась как универсальное средство для школьников и студентов первых курсов для написания простых прикладных программ: калькуляторов, игр, примитивных редакторов, вычислителей и прочих “Hello world”.

Геннадий Звенигородский и советские школьницы

Геннадий Звенигородский и советские школьницы

С 1981 года созданием языка занимались выпускники Новосибирского государственного университета под руководством легенды советского программирования Геннадия Звенигородского, ученика не менее легендарного Андрея Ершова. Он фокусировался на создании учебных языков и популяризации программирования как профессии. Звенигородский с 1977 года жил в Новосибирске и работал в Вычислительном центре Сибирского отделения АН СССР. Он создал комплекс программных средств для обучения программированию, в который, помимо “Рапиры”, входил ещё один учебный язык “Робик”, система программирования для этих языков «Школьница», графическая система «ШПАГА» (Школьный ПАкет Графических процедур, Адаптированный). Создатель “Рапиры” также известен как организатор летних школ юных программистов в новосибирском Академгородке, которые начали проводить с 1976 года и продолжают проводиться до настоящего момента. Кроме того, именно им была организована Всесоюзная заочная школа программирования, созданная на базе журнала для школьников «Квант». Именно там тестировалась РАПИРА, “Школьница”, ШПАГА и другие обучающие продукты. В работе Звенигородского со школьниками и студентами активное участие принимал его учитель академик Андрей Ершов.

Андрей Ершов и советские школьники

Андрей Ершов и советские школьники

Подобно Эль-76 и АЛМИР-65, РАПИРА имела основную кириллическую лексику. Кроме того, существовали локализации для нескольких языков союзных республик и не только, достоверно известно об эстонской и грузинской, а также об английской версиях.

Фрагмент кода на "Рапира" из статьи Skillbox.ru

Фрагмент кода на "Рапира" из статьи Skillbox.ru

Интересной особенностью “Рапиры” стала трассировка вызова процедур, это было особенно удобно в учебном процессе, так как программист или преподаватель могли увидеть состояние переменных на каждом шаге.

Одними из первых компьютеров на которых начали использовать РАПИРу стали советские ПК из серии "Агат", по мере распространения ПК в советских школах, продукты серии "Школьница" были использованы на ПК "Корвет ПК8010/ПК8020", "Немига", "Электроника МС 0511" и др. учебных машинах того времени.

Иллюстрация Роберта Тинни к статье Лео Д. Борса «„Агат“. Советский Apple II» в журнале Byte за ноябрь 1984 года

Иллюстрация Роберта Тинни к статье Лео Д. Борса «„Агат“. Советский Apple II» в журнале Byte за ноябрь 1984 года

Как широко используемый инструмент обучения, РАПИРА использовалась не долго. Популярность языка сошла на нет по целому ряду причин. В Москве, на которую многие ориентировались, давно и успешно использовали Algol, к середине 80-х начали постепенно внедрять BASIC и Pascal. Популяризация этих языков была настолько стремительной, что РАПИРА просто не успела отвоевать свой сегмент. Настаивать на сохранении языка в школах и продвигать его “сверху”, как это было иногда принято делать, никто не стал. СССР, к этому моменту, прекратил своё существование, как и лоббирование “суверенных” ИТ-продуктов . 

Продолжение следует

Советские ЯП и их разработчики оставили значительный след в мировой компьютерной науке, сделали вклад в то будущее, в котором мы живём сегодня. Их исследования позволили неповоротливой и экстенсивной плановой экономике СССР добиваться относительных успехов, упрощали производство промышленных продуктов, позволяли создавать наукоемкие проекты, обеспечивали полеты в космос. Одна из целей этого цикла описать и оценить вклад советских ученых в исторической ретроспективе. Полагаю, что это не последний пост цикла, к теме советских ЯП мы также ещё вернёмся. 

Автор:
smirnov_dm

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js