Истоки алгоритмического языка АЛГЭМ и его место в творчестве А.И. Китова

Истоки алгоритмического языка АЛГЭМ и его место в творчестве А.И. Китова

Язык автоматизации программирования экономических, математических, информационно-логических и управленческих (в широком смысле, то есть включая задачи управления технической системой в реальном времени) задач назван его автором Анатолием Ивановичем Китовым АЛГЭМом. В этой аббревиатуре он и вошел в свою гражданскую, не военную, жизнь для программирования задач на ЭВМ, обеспечивающих функционирование советской экономики и процессов управления разного уровня. В докладе рассматривается структура языка АЛГЭМ, исследуются его истоки и те аспекты программирования, которые явно не вытекают из официального названия этого алгоритмического языка программирования. Дело в том, что АЛГЭМ создан на основе синтеза отдельных частей четырех алгоритмических языков – АЛГОЛа, собственных элементов АЛГЭМа, языка спискового программирования ЛИСП, расширенного элементами ассоциативного программирования, и некоторых элементов языка Кобол, применявшегося в США для программирования задач экономики. А в практике его создателя А. И. Китова был наработан огромный материал по программированию задач для управляющих комплексов военного назначения, обеспечивающих функционирование системы ПВО страны. Этот материал, в частности, составил значительный объём его докторской диссертации.

***

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

Важной была целевая функция – создать языковой инструмент для программ, которые необходимы в кибернетике управления, и, самое трудоемкое – включая средства записи программ обработки больших (супер больших по тем временам) информационных массивов самой разнообразной структуры.

Материал, конкретизирующий эти требования к будущему творению, был взят А. И. Китовым из опыта создания больших комплексов управления реального времени для ПВО страны. Книга «Программирование информационно-логических задач» издана в 1967 году. А для этого проработка темы, которой посвящена монография, должна была начаться, как минимум, на 4-5 лет раньше. Следующая книга А. И. Китова называется «Программирование экономических и управленческих задач», и она издается в 1971 году. В эти же годы разрабатывается транслятор программ, записанных на языке АЛГЭМ в машинный код на ЭВМ серии Минск. Последняя книга ориентирована не только на задачи экономики, но и на задачи управления в автоматизированных системах. Слова «автоматизированные системы» означают, что в контур управления включен человек, что свойственно военным системам реального времени, в том числе и системам ПВО.

Обратимся к годам научного творчества А. И. Китова (начало 1960-х), которые связаны с НИИ-5 МО СССР (впоследствии МНИИПА Министерства радиопромышленности). В эти годы А. И. Китов руководил большим коллективом программистов, создававших большой программный комплекс для боевой ЭВМ реального времени.

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

Дефицит оперативной памяти ЭВМ существенно ограничивал возможности разработчиков боевых алгоритмов. Поэтому применялась плотная упаковка величин – констант, логических и числовых переменных в ячейки памяти ЭВМ. АЛГЭМ и имел развитые специальные средства для детальной работы с величинами, плотно упакованными в ячейках оперативной памяти вычислительной машины. Содержание докторской диссертации А. И. Китова «Применение ЭВМ для решения задач противовоздушной обороны» проясняет истоки происхождения языка АЛГЭМ.

В 1959 г. Китовым, во главе большой группы военных инженеров-электронщиков, аналитиков, программистов и других специалистов была разработана ЭВМ «М-100». А. И. Китов – Главный конструктор этой ЭВМ, которая была описана в одной из глав его докторской диссертации. В ее основе лежит изобретенный им метод четырехкратного совмещения операций с целью получения быстродействия, необходимого для работы системы реального времени – обработки информации, получаемой с радио-локационных станций для оперативного наведения ракет «Земля-воздух» в системе ПВО страны.

Проекты и научные публикации А.И. Китова по военной кибернетике были положены в основу создания языка автоматизации программирования АЛГЭМ. И первая глава его книги по АЛГЭМу «Программирование информационно-логических задач» посвящена кибернетике.

***

По замыслу его создателя АЛГЭМ – процедурно ориентированный язык программирования. Представляется естественным, что системной рамкой для него был выбран широко используемый в Европе и в нашей стране классический язык программирования АЛГОЛ-60. Новым здесь является его расширение в АЛГЭМе, ориентированное на запись программ обработки экономической информации и ассоциативное или списковое программирование. Структурно символическая запись программы остается ровно такой же, как в АЛГОЛе: описания, за которыми идут операторы и выражения в порядке исполнения их машиной. Свойством описания является их локализация в блоке – ровно как в АЛГОЛе. Новое – операторные скобки, обозначаемые русскими словами:

- начало
- конец

Новое также заключается в механизмах вложенности. Блоки и новые для языка составные операторы могут быть вложенными как в блоки, так и в составные операторы неограниченно. Но, как и в АЛГОЛе, обращения могут быть только в начале блока. Как и в АЛГОЛе, операторы АЛГЭМа программируются для исполнения в порядке записи, а в отношении меток действует правило АЛГОЛа – переходы совершаются только на метки внутри блоков.

Для записи экономических и управленческих программ в АЛГЭМ добавлены:

- строчные переменные;
- указатели вида переменных и их размещения в разрядах машинного слова;
- составные переменные;
- составные массивы данных.

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

В АЛГОЛе нет средств реализации процедур-кодов, а строки служат лишь для записи имен (объектов, персон и т.п.). В АЛГЭМе значениями строчных переменных могут быть опять же строки; в числовых переменных – числа как в АЛГОЛе, в логических переменных – логические значения. Таким образом, к двум типам переменных

- целый
- вещественный

в АЛГЭМе добавлены еще два типа:

- логический
- строчный

И, наконец, с добавлением строчных выражений АЛГЭМ обретает четыре типа выражений:

- арифметические
- логические
- именующие
- строчные

Последний тип выражения должен содержать описание вида и указание размещения содержимого в разрядах машинного слова, что опять-таки идет от программирования задач ПВО с его особенностью – требованием плотной упаковки величин в ячейках машинной памяти. Числовые и вещественные величины (переменные) могут быть расписаны по разрядам машинного слова вплоть до указания знака (+ или -) числа. При этом составные переменные указателя вид не имеют.

В АЛГЭМе предусмотрена возможность использования составных переменных и массивов составных переменных. «Составность» это включенность в массив данных других переменных и массивов. Очевидный всем пример: день, месяц, год, объединённые в составную переменную дата.

Составные переменные описываются в том блоке программы, в котором они применяются.

К алгольным символам в АЛГЭМе добавлены описатели

- оставной
- уровень
- строчный
- вид

Указанные отличия языков определяются предназначением практически ориентированного языка АЛГЭМ от академичного АЛГОЛа. Наличие в языке АЛГЭМ средств ассоциативного программирования составляет следующий по важности блок отличий его от языка АЛГОЛ. Операторы ассоциативного программирования обеспечивают возможность динамического распределения памяти при программировании информационно-логических задач, использующих категоризацию объектов, описываемых совокупностями однородных или разнородных признаков, по значениям которых осуществляется поиск и обработка информации об объектах.

Круг таких задач широк – планирование, учет, кадры, все виды диагностики и т.п. При этом категориальные данные должны быть снабжены адресами связи в разнообразных списковых структурах, что и делается в процессе трансляции программ в машинные коды. Эти связи могут быть реализованы аппаратно, и тогда поиск называют схемно-ассоциативным. При обеспечении связей программными способами возникает так называемое ассоциативное программирование. Смысл его в том, что память распределяется автоматически при обработке информационных массивов.

В АЛГЭМ вошли все лучшие средства языка спискового программирования ЛИСП и сделаны его существенные расширения добавлением новых списковых структур и операторов их обработки. Операторы ЛИСПа обеспечивали обработку двух соседних членов линейных и цепных списков. А. И. Китов ввел обобщенные списковые структуры – узловые и гнездовые списки, члены которых могли обрабатываться операторами АЛГОЛа и КОБОЛа.

Для построения списков был использован широкий спектр способов адресации:

- прямая
- относительная плавающая
- относительная индексная
- непрямая

Их смысл следует из их названий.

В списковых структурах первоначально были использованы два типа построения списковых структур:

- объектные – однородные объекты группируются относительно опорного объекта,
- признаковые, для которых распределение объектов ведется по принадлежности к категориям.

Организация поиска в списковых структурах основывается на поисковых деревьях – это структурный поиск. Применение различных способов вычисления адресов размещения объектов образует так называемый вычислительный поиск.

В АЛГЭМе имеются средства организации многосписковых ассоциативных структур.

***

Такое многоаспектное творческое произведение, как язык автоматизации программирования АЛГЭМ, затруднительно охватить докладом, ограниченным временными рамками. Следует обратить внимание не только на высшее качество языка, но и на форму его представления. Все вышедшие в нашей стране издания его описания выдержаны в стиле хорошего русского языка и в содержательном изложении, дополняемом синтаксическими формулами. Это говорит о большом внимании автора к своим пользователям. Такое внимание всегда отличало А. И. Китова и его знаменитые в стране и в мире книги первопроходца в кибернетике, технике ЭВМ, программировании и языках автоматического программирования, включая методы трансляции. Как Человек чрезвычайно организованный и широко мыслящий, он обладал глубоким эстетическим чувством. Об эстетике программирования говорили многие выдающиеся ученые – Джон Карр, Дональд Кнут, Эдсгер Дейкстра, Никлаус Вирт и другие. Но Анатолий Иванович Китов один из немногих, кто создал действительно прекрасные произведения во всех основных сферах информатики – в сфере ЭВМ, в программировании, в языках программирования и в практике создания трансляторов с языков программирования. Мы жили рядом с великим человеком нашего времени, не сознавая этого. 

Об авторе: Всесоюзный научно-исследовательский институт системных исследований АН СССР
pasibir@yandex.ru
Материалы международной конференции SORUCOM 2011 (12–16 сентября 2011 года)
Помещена в музей с разрешения автора 18 октября 2013