Национальный исследовательский ядерный университет «МИФИ»
Опубликован: 09.01.2004 | Доступ: свободный | Студентов: 3808 / 327 | Оценка: 4.02 / 3.77 | Длительность: 10:03:00
ISBN: 978-5-9556-0009-3
Лекция 12:

Категориальная абстрактная машина

< Лекция 11 || Лекция 12: 12 || Лекция 13 >

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

Отображение выражений категориальной комбинаторной логики в соответствующие " инструкции " категориальной абстрактной машины удобно представить в форме таблицы 11.1.

При этом каждая инструкция   категориальной абстрактной машины изменяет состояние КАМ, которое определяется значениями тройки { T, C, S }. Смысл состояний КАМ удобно представить в виде таблицы 11.2.

Таким образом, процесс работы КАМ сводится к смене состояний вида:

{T, C, S} -> {T’, C’, S’}.

Для завершения описания процедуры функционирования категориальной абстрактной машины осталось описать динамику   состояний КАМ.

Циклом работы КАМ назовем множество всевозможных изменений ( динамики ) ее состояний.

Цикл работы КАМ удобно представить в виде таблицы 11.3.

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

Таблица 11.1. Отображение выражений категориальной комбинаторной логики в "инструкции" категориальной абстрактной машины
№ п/п Терм ККЛ Инструкция КАМ Пояснени
1 Fst car Голова списка (взятие первого элемента упорядоченной пары)
2 Snd cdr Хвост списка (взятие второго элемента упорядоченной пары)
3 < push Значение терма помещается на вершину стека
4 ' swap Значения терма и вершины стека меняются местами
5 > cons Вершина стека помещается в голову терма; стек "проталкивается"
6 \varepsilon app Аппликация
7 \Lambda cur Каррирование
8 ' quote Цитирование
Таблица 11.2. Состояния КАМ
№ п/п Код элемента состояния КАМ Обозначение элемента состояния КАМ Пояснение
1 T Терм Среда вычислений (первоначально пуста)
2 C Код "Программа" на "языке" КАМ
3 S Стек Модель оперативной памяти компьютера
Таблица 11.3. Динамика состояний КАМ
Старое состояние КАМ Новое состояние КАМ
Терм Код Стек Терм Код Стек
t push.C S t С t.S
t swap.C s.S s C t.S
t cons.C s.S [s, t] C S
S (cur C).C1 S C:s C S
S (quote c).C S c C S
S C s S car.C [s, t]
[s,t] cdr.C S t C S
S C@C1 [s, t] S app.C1 [C:s, t]

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

Рассмотрим текст следующей программы на языке функционального программирования SML:

val curry = fn f => fn x => fn y => f(x,y);
fun sum ab = a+b;
(curry sum) 1 2;

Заметим, что данная программа на языке SML реализует функцию вычисления значения суммы целых чисел 1 и 2, представленную в каррированной форме.

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

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

В результате получим:

((\lambda x.x)1((\lambda x.x)2))+.

На втором этапе процедуры трансляции произведем преобразование полученного выражения ламбда-исчисления в код де Брейна.

В результате получим:

(\lambda .0 1((\lambda .0)2)+.

На третьем этапе процедуры трансляции произведем преобразование полученного кода де Брейна в терм категориальной комбинаторной логики.

В результате получим:

<\Lambda (<<Snd,'1>\varepsilon ,<\Lambda (Snd),'2 >\varepsilon >\varepsilon ),'+>\varepsilon .

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

В результате получим:

push cur (push push cdr swap quote 1 cons
app swap push cur (cdr) swap quote 2 cons
app cons app) swap quote + cons app.

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

Создав таблицу с графами, соответствующими терму, коду и стеку КАМ, производим вычисления согласно инструкциям КАМ, полученным в предыдущем пункте до окончательного результата.

Последний пункт преобразований предлагается произвести самостоятельно в качестве упражнения.

Подводя итоги рассмотрения формальной системы категориальной комбинаторной логики и ее применения для реализации категориальной абстрактной машины на состояниях, принадлежащих пространству д.з.к., можно сделать следующие выводы (в сопоставлении КАМ с виртуальной машиной технологической платформы Microsoft .NET).

Во-первых, как уже упоминалось ранее, схема трансляции в .NET явно содержит в своем составе абстрактную машину.

Во-вторых, абстрактная машина .NET транслирует исходный текст на языке программирования в высокоуровневый ассемблер (известный под названием Microsoft Intermediate Language, или MSIL), который во многом подобен коду   категориальной абстрактной машины.

В-третьих, виртуальная машина .NET способна осуществлять трансляцию из широкого спектра языков программирования, в том числе, в отличие от категориальной абстрактной машины, и для императивных языков (C++, C# и целого ряда других языков программирования).

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

Наконец, в-пятых, отметим, что виртуальная машина .NET лучше адаптирована для объектно-ориентированных языков программирования (в том числе для языка C#, который будет рассматриваться в ходе изложения курса).

Для более подробного самостоятельного ознакомления с тематикой лекции рекомендуется следующий список источников: [31, 32, 44, 62, 67, 76].

< Лекция 11 || Лекция 12: 12 || Лекция 13 >