Советская школа: адресный язык программирования

Адресный язык программирования считается одним из первых языков программирования высокого уровня. Он был создан советским разработчиком Екатериной Логвиновной Ющенко совместно с математиком Владимиром Семеновичем Королюком в 1955 г. Конструкции этого алгоритмического языка вошли в основу современных языков программирования.

Своеобразной базой для адресного языка стали разработки члена корреспондента АН СССР Алексея Андреевича Ляпунова. Этим выдающимся математиком был создан операторный метод программирования, получивший широкое распространение на практике и оказавший сильное влияние на все последующее развитие теоретического программирования.

12573848bc154750b6788b505ecc00b5.jpg
Екатерина Логвиновна Ющенко и Владимир Семенович Королюк

Е.Л. Ющенко и В.С. Королюк воплотили в адресном языке два общих принципа работа — адресность и программное управление. Авторы ввели в свою разработку средства манипулирования адресами второго ранга, а также создали удобную систему понятий, чтобы описывать архитектуру компьютера и систему команд. Иными словами — в основе адресного языка был заложен принцип отношение адреса и содержимого, позволяющего в простой форме описывать операции на ЦВМ.

В адресном языке в качестве объектов некой системы кодов S, имеющих между собой определенные соотношения, рассматриваются элементы исходной информации, результаты решений задач и конструктивные объекты для построения программ. С помощью соотношений можно строить выражения по обычным правилам. Значениями данных выражений также будут коды, полученные после выполнения указанных в них операций. Но вместе с тем множество элементов исходной информации (коды подмножества) могут задаваться в явном виде через элементы множества адресов SI (AI ⊂ S).

Операции адресного языка


Адресное отображение — это операция выделения содержимого адреса (штрих-операция), которая задает отображение множества А во множество содержимых этих адресов В (B ⊂ S). Штрих-операция однозначна — каждому адресу может соответствовать лишь одно содержимое, операция обозначается символом (штрихом). Например а = b, где a ∈ А, и b ∈ В. Адресный язык не ограничивает выбор множества А, оно может определяться конструктивным образом при каждой конкретной реализации. Если рассматривать самый простой случай, когда адресный язык ориентирован на определенную машину, то в качестве А можно взять множество байтов или же адресов оперативной памяти и программных регистров. В другой ситуации при ориентации на класс машины в качестве А принимается объединение некоторого подмножества полей памяти. В подобных случаях пересечение А и В обычно не пустое. Это позволяет многократно применять штрих-операции и поднимать тем самым ранг адреса. Пускай b будет содержимым адреса а, ', а = b, a c -содержимое адреса b, ' b = с;, а будет являться адресом адреса кода с, где а — адрес второго ранга кода с (косвенный адрес) 2a = ' (' a) = ' b = c. Также определяется и адрес высших рангов k a = ' (k — 1 a). Адрес а называется адресом нулевого ранга кода а, относительно своего содержимого.

Минус-штрих-операция — обратная штрих-операции »-1» в (-1b = a). Данная операция не однозначна и одному содержимому b может соответствовать множество адресов Ab, что для каждого a ∈ Ab будет ' a = b.

Чтобы определить и изменить адресное отображение, надо ввести алгоритм, операцию засылки по адресу, обозначаемую символом . И тогда запись операции b ⇒ a будет означать следующее:
1) элемент а включается во множество A;
2) элемент b включается во множество B;
3) устанавливается соответствие ' a = b;
4) остаются неизменными все ранее установленные соответствия вида ' x = y, где x не равен a.

Операция b ⇒ а предполагает, что а и b — некоторые функции. В таком случае значение функции b становится содержимым адреса, являющегося результатом вычисления значения a (' a = b). Помимо штрих-операций при конструировании функций используются также арифметические (+, -, х, :), логические (∧, ∨ и т.п.), функциональные (sin, √ т.п.), отношения (=, <, > и т.п.) и другие. Все эти функции называются адресными. Адресная формула преобразования (или формула засылки) выражается b ⇒ a, где a и b — адресные функции.

В адресном языке процесс преобразования информации представляется в виде адресной программы. Она задается исходным распределением адресов в S и последовательностью адресных формул, указывая порядок их применения. Последняя формула задается через операторы цикла, обращения к программам, условного, безусловного и вычисляемого переходов и т.д.

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

В Адресном языке запись программы включает две части: исходное адресное отображение и динамическую часть. Как правило, исходное адресное отображение задается соотношениями ' a = c. В подобных соотношениях могут быть такие, где с не будет являться элементом исходной информации, потому их можно записывать в виде простых формулы засылки с ⇒ a. Совокупность подобных равенств будет статической частью адресной программы. Динамическая часть программы — список адресных строк. В адресном языке допускается свободное изменение объемов и перемещение информации статической и динамической частей (из динамической в статическую и наоборот). Когда производится решение определенной задачи, информация, относящаяся к ней вполне обозрима. Программа обозревает код, если его адрес некоторого ранга находится в адресной программе. Чтобы расширить возможности обозревания кодов программы, применяются адреса высших рангов. Таким образом при программировании происходит построение схем обозревания информации. Схема обозревания последовательности кода х 1, х2 — это цикличная адресная программа, на i-м из циклов которой обозревается i-м элемент последовательности. Для упорядочения элементов во множества также нужны схемы, при построении которых вводят операции следования. А именно упорядочиваются элементы исходной информации используя адреса, в которых они содержатся по некоторому рангу. Для задания отношения следования на множестве адресов прибегают к арифметическим операциям для машинных адресов.

330d95738cc84607bdea2e7f3aec106c.jpg
Учебник Ющенко Е.Л. Адресное программирование

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

Степень упорядоченности адресов и алгоритмизации введенных в них операций следования определяет уровень адресного языка. Уровни бывают: общеалгоритмический, уровень условных адресов и уровень конкретных адресов

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

Уровень условных адресов. В данном случае происходит упорядочивание адресов только исходя из требований задачи. Происходит упорядочение отдельных массивов адресов, которые обрабатываются алгоритмом. Все остальные вопросы, связанные с фактическим распределением памяти — не решаются. Как правило массивы представлены арифметическими последовательностями адресов. Определяемые разными начальными адресами последовательности не пересекающиеся. Соответственно и операции следования описываются алгоритмически. Операция следования по индексам для элементов матрицы, расположенных по строкам, начиная с адреса а0 + 1, имеет вид а0 + (i — 1) n + j, где n — порядок матрицы.

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

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

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

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

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

Адресное программирование очень помогло в разработке структуры и системы команд таких советских ЭВМ, как: «Днепр», «Киев», М20, «Урал», «Минск». Что касается аппаратной реализации механизма косвенной адресации в «Киеве», то это один из первых примеров влияния теоретического программирования на проектирование архитектуры и элементной базы компьютеров. Кроме того, как уже было сказано, средства адресного языка вошли в состав последующих языков программирования, ориентированных на описание алгоритмов трансляции.

2e5b90f5bb0747e8acddd48177e85d5b.jpg
ЭВМ Киев (1958 г.)

Можно сказать с уверенностью, что создание адресного языка стало одним из первых значимых достижений научной школы теоретического программирования. Причем, не только в СССР. Адресный язык опередил появление ассемблеров и языков программирования с аппаратом косвенной адресацией. По этому языку изданы учебники в разных странах (Германии, Франции, Венгрии, Австрии, Словакии).


По традиции, немного рекламы в подвале, где она никому не помешает. Наша компания запустила новогоднюю распродажу серверов и VPS, в рамках которой можно получить от 1 до 3 месяцев аренды бесплатно. С подробностями акции вы можете ознакомиться тут.

© Habrahabr.ru