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

Диалоговая система структурированного программирования

Диалоговая система структурированного (точнее - структурирующего) программирования (ДССП) разработана и реализована в 1980-1982 гг. на микрокомпьютерах семейства НЦ, в 1982-1983 гг. - на воспроизводящих архитектуру PDP-11 микрокомпьютерах ДВК, а в дальнейшем и на других популярных моделях, в частности 16- и 32-разрядных IBM PC. Система создана в проблемной лаборатории ЭВМ на факультете ВМиК МГУ в основном силами студентов и аспирантов, из которых наибольший вклад внесли Г. В. Златкус, В. Б. Захаров, И. А. Руднев, С. А. Сидоров [1, 2].

Целью ДССП было [3, с.74, 142] упрощение, снижение трудоемкости и обеспечение надежности системного программирования микрокомпьютеров, выполнявшегося обычно на языке ассемблера. Основная идея заключалась в эмулировании на микрокомпьютере диалогового процессора с архитектурой, ориентированной на поддержку предложенного Э. Дейкстрой структурированного программирования, причем в наиболее эффективной - процедурной реализации, в частности, создающей условия, в которых неструктурированно программировать практически невозможно (отсюда и уточнение - "структурирующее программирование").

Прототипом ДССП-процессора послужила ранее созданная в лаборатории цифровая машина с послоговым представлением программы в постфиксной (польской инверсной - ПОЛИЗ [4]) записи - "Сетунь-70" [5, 6].

"Сетунь-70" создана на основе опыта применения "Сетуни" с намерением адаптировать архитектуру компьютера к запросам его программного оснащения. Интерпретируемый на "Сетуни" ПОЛИЗ стал теперь непосредственно машинным языком в условиях двухстековой архитектуры с послоговым кодированием программ. По аналогии с применяемым ныне байт-кодом, это можно назвать трайт-кодом, поскольку слогом в языке "Сетуни-70" был троичный аналог байта - 6-тритный трайт. Команд в традиционном формате код операции - операнды в новой машине не стало. Программа представляла собой последовательность операционных и адресных трайтов, управляющую функционированием стекового ПОЛИЗ-процессора.

Особенность трайт-кода "Сетуни-70" в том, что он представляет собой алгоритмически полный язык процедурного структурированного программирования, причем в той его разновидности, которая на практике оправдала надежды Э. Дейкстры сделать программирование упорядоченным и менее трудоемким, а программы надежными, легко обслуживаемыми и модифицируемыми [7].

Принципиально важной оказалась развиваемость процедурного процессора путем пополнения и специализации набора определяемых пользователем операций-процедур. В ДССП эта возможность приобрела заимствованное из системы Forth адекватное оформление в виде словаря процедур, впрочем, по-иному организованного, с тем чтобы обеспечить нисходящее построение (декомпозицию) программ [8].

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

Такова технология, или дисциплина, структурирования в ДССП. Казалось бы, ее можно не соблюдать, и программа получится неструктурированной. Однако это возможно лишь на линейных участках, не содержащих ни ветвлений, ни циклов, поскольку и ветвления, и циклы в ДССП осуществляются в форме выполняемых по условию процедур. Например:

  • ветвление по знаку содержащегося в вершине стека числа t программируется в виде: IFS P1 P2 P3 - если t<0, выполнить процедуру P1, если t=0, то P2, если t>0, то P3;
  • цикл RP P - выполнять процедуру P снова и снова, пока не сработает имеющаяся в ее теле процедура выхода EX [3, с. 83].

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

Все это в совокупности позволяет квалифицировать ДССП как несложное в освоении, высокотехнологичное и надежное средство программирования микрокомпьютерных систем, в частности систем управления в режиме реального времени (микроконтроллеров различного назначения, диспетчеров, кросс-систем и т. п.), что убедительно подтверждено успешным опытом ее применений на протяжении 20 лет [9, 10, 11, 12].

Замечательно, что, несмотря на постоянное развитие возможностей ДССП, ее базисные принципы и механизмы сохраняются неизменными, и программы прошлых лет, как правило, нормально работают на всех последующих версиях системы. Показательным примером может служить микрокомпьютерная система обучения "Наставник", функционирующая с середины 70-х годов сначала на "Сетуни-70", а затем в ДССП на двоичных компьютерах [13].

В последние годы ведущим направлением развития ДССП стало так называемое конструктное программирование. Конструкты - это высокоуровневые типы данных, конструируемые пользователями системы процедурного программирования. Они представляют собой процедуры, обладающие собственной надлежащим образом отформатированной памятью и набором базисных процедур интерпретации принимаемых этой памятью значений [10].

Например, конструкт типа "выражение булевой алгебры" в его простейшей разновидности, допускающей выражения только в совершенной нормальной форме, обладает памятью 2n битов, где n - число входящих в выражение различных терминов (булевых переменных). Его интерпретирующие процедуры реализуют операции отрицания - дополнения, инверсии, конъюнкции, дизъюнкции, пересечения и объединения представляемых конструктами выражений.

Конструкт того же типа с памятью 3n битов позволяет представлять булевы выражения в произвольной нормальной форме и осуществлять их эквивалентные преобразования, в частности минимизацию. Использование же троичных форматов памяти открывает возможность создавать конструкты для программируемого манипулирования выражениями трехзначной алгебры и алгебры совокупностей 2-й ступени.

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

Литература

  1. Брусенцов Н. П., Златкус Г. В., Руднев И. А. ДССП - диалоговая система структурированного программирования // Программное оснащение микрокомпьютеров. М., Изд-во МГУ им М. В. Ломоносова, 1982, с. 11-40.
  2. Брусенцов Н. П., Захаров В. Б., Руднев И. А., Сидоров С. А. Диалоговая система структурированного программирования ДССП-80 // Диалоговые микрокомпьютерные системы. М., Изд-во МГУ им М. В. Ломоносова, 1986, с. 3-21.
  3. Брусенцов Н. П. Микрокомпьютеры. М., Наука, 1985. 206 с.
  4. Жоголев Е. А. Интерпретатор ПОЛИЗ-63. Журн. вычисл. матем. и матем. физики, 1965, с. 509-535.
  5. Брусенцов Н. П., Жоголев Е. А. Структура и алгоритм функционирования малой вычислительной машины // Вычисл. техн. и вопр. кибернетики. Вып. 8. Л., Изд-во ЛГУ, 1971, с. 34-51.
  6. Брусенцов Н. П., Жоголев Е. А., Маслов С. П. Общая характеристика малой цифровой машины "Сетунь-70" // Вычисл. техн. и вопр. кибернетики. Вып. 10. Л.: Изд-во ЛГУ, 1974, с. 3-21.
  7. Брусенцов Н. П., Рамиль Альварес Х. Структурированное программирование на малой цифровой машине // Вычисл. техн. и вопр. кибернетики. Вып. 15. М., Изд-во МГУ им М. В . Ломоносова, 1978, с. 3-8.
  8. Сидоров С. А. Программирование сверху вниз и организация словаря ДССП // Вопросы кибернетики. М., НИИСИ, 1999, с. 32-44.
  9. Грачев А. Ю. Продукционная система в ДССП-80 // Программное оснащение персональных компьютеров. М., Изд-во МГУ им М. В. Ломоносова, 1990, с. 51-63.
  10. Интегрированная система обучения, конструирования программ и разработки дидактических материалов. Под ред. Н. П.Брусенцова. М., изд. ф-та ВМиК МГУ, 1996. 80 с.
  11. Сидоров С. А., Шумаков М. Н. ДССП как открытая система // Вопросы кибернетики. М., НИИСИ, 1999, с. 3-31.
  12. Бурцев А. А., Шумаков М. Н. Сопрограммный механизм в ДССП как основа для построения мониторов параллельных процессов // Вопросы кибернетики. М., НИИСИ, 1999, с. 45-63.
  13. Брусенцов Н. П., Маслов С. П., Рамиль Альварес Х. Микрокомпьютерная система обучения "Наставник". М., Наука, 1990. 223 с.