ПРОЛ-2

ПРОЛ-2: небольшое исследование

Думаю, ожидаемо, что меня заинтересовал язык «ПРОЛ-2», придуманный и использовавшийся для написания программ для «Бурана». Меня вообще интересуют такие почти забытые артефакты, и я очень радуюсь, когда удаётся спасти от забвения любые знания.

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

Одна из них — Татьяна Алексеевна Полилова, ведущий научный сотрудник Института прикладной математики им. М. В. Келдыша РАН, — даже прислала мне две брошюры по системе САПО ПРОЛОГ (это другой ПРОЛОГ, не имеющий отношения к логическому языку программирования).

Я ещё не успел детально изучить эти материалы, но, кажется, они косвенно подтверждают мою версию о назначении конструкции 1T. Не могу сказать, что теперь уверен в этом на 100%, но, похоже, она действительно выделяет некие такты, отведённые для работы процессов.

Ниже я привожу цитаты из брошюры «Средства отладки в инструментальной системе САПО-ПРОЛОГ».

Каждый квант времени диспетчер обслуживает активные исполнители разных процессов.
Фрагмент текста из брошюры «Средства отладки в инструментальной системе САПО-ПРОЛОГ» о протоколировании работы комплекса программ.
Фрагмент документа «Средства отладки в инструментальной системе САПО-ПРОЛОГ» 1988 года, страницы 7–8, описывающий пакетный вариант отладки программы.
Система отладки обрабатывает задание, формирует таблицы контролируемых точек, условий и действий, инициируя работу комплекса Пролог-программ.

2 комментария

99 бутылок: ПРОЛ-2

Иван Черняков, которого я консультировал в процессе создания фильма о программируемом калькуляторе «Электроника МК-61», выпустил новую увлекательную документалку — про «Буран» и его программное и аппаратное обеспечение.

«Буран» решал задачу многоразового возвращаемого орбитального корабля: вывести аппарат на орбиту, доставить людей или груз, выполнить работу в космосе и вернуть корабль на Землю для потенциального повторного использования.

В фильме упомянуты несколько предметно-ориентированных языков программирования, созданных в СССР специально для написания программ, некогда управлявших полётом «Бурана». Один из них — «ПРОЛ-2», программы на котором Ивану найти не удалось, поэтому он попробовал его реконструировать при помощи нейросети.

Разумеется мне немедленно захотелось найти хоть какие-то подробности про этот язык, чтобы написать на нём свою традиционную «песню про пиво». Вчера облазил весь интернет и на одном из форумов мне повезло найти одну из тестовых программ, написанных на языке «ПРОЛ-2». Она и несколько упоминаний языка в других источниках помогли мне побольше узнать о том, что представлял собой язык, на котором писались программы для «Бурана».

Итак, судя по сохранившемуся тексту, «ПРОЛ‑2» — императивный язык управления для системы реального времени. Современному программисту его запись напомнит Паскаль: присваивание :=, блоки НАЧАЛО и КОНЕЦ, явно объявляемые типы, условия и циклы, но с русскими ключевыми словами.

Помимо обычных вычислений язык поддерживал процессы и исполнителей, выдачу команд оборудованию, ожидание событий, паузы и обработку прерываний. Характерная особенность — в объявлениях нелокальных переменных отдельно перечислялись процедуры, которым разрешалось их читать и изменять: ограничения доступа входили непосредственно в описание данных.

Вот какая «песня» у меня получилась:

% ПЕСНЯ О ПИВЕ. НАПИСАНА СТЕПАНИЩЕВЫМ Е. В. HTTPS://BOLKNOTE.RU
МОДУЛЬ ПИВО ТЕСТ;
ПРОЦЕСС ПИВО;
ПЕСНЯ:1T;
КОНЕЦ
ИСПОЛНИТЕЛЬ ПЕСНЯ;
N:ЦЕЛ(0..99);
НАЧАЛО
    N:=99;
    <<КУПЛЕТ>>
    ПЕЧАТЬ(/,N,' БУТЫЛОК ПИВА НА СТЕНЕ',/);
    ПЕЧАТЬ(N,' БУТЫЛОК ПИВА!',/);
    ПЕЧАТЬ('ВОЗЬМИ ОДНУ, ПУСТИ ПО КРУГУ',/);
    N:=N-1;
    ПЕЧАТЬ(N,' БУТЫЛОК ПИВА НА СТЕНЕ!',/);
    ЕСЛИ N>0 ТО НА КУПЛЕТ;
    ПЕЧАТЬ(/,'НЕТ БУТЫЛОК ПИВА НА СТЕНЕ!',/);
    ПЕЧАТЬ('НЕТ БУТЫЛОК ПИВА!',/);
    ПЕЧАТЬ('ПОЙДИ В МАГАЗИН И КУПИ ЕЩЁ,',/);
    ПЕЧАТЬ('99 БУТЫЛОК ПИВА НА СТЕНЕ!',/);
    ВЫЙТИ ПЕСНЯ;
КОНЕЦ

Почти все строки, думаю, понятны, я бы только одну строку прокомментировал — ПЕСНЯ:1T. Эту конструкцию я перенёс из найденного листинга, но что она точно значит, я сказать не могу. Похоже на выделение тактов для выполнения параллельных подпрограмм. Но так ли это, пока неизвестно.

2 комментария