Языки программирования. Практический сравнительный анализ



Языки программирования. Практический сравнительный анализ - стр. 124


Нетрудно теперь догадаться, что при фиксированном i специализатор s представляет собой компилятор с языка L на язык M. Ведь, как мы видели, в этом случае он по заданной p получает ее перевод p'. Действительно, посмотрим, что такое s(s,i)? Вновь применяя (**), получим

      s(s,i)(p) = s(i,p).

Но ведь s(i,p) это p', перевод программы p на язык M! Так что s(s,i) - (написанный на M) это компилятор KLM с языка L на язык M.

Кратко выразим это так: специализация специализатора по интерпретатору дает компилятор. Или еще короче: автоспециализация по интерпретатору дает компилятор.

[Снова есть повод подумать о возможном качестве компилятора и затратах на его получение в общем случае].

4.4.3.3. Двойная автоспециализация

Теперь нетрудно догадаться, что специализатор может выступать и в роли суперкомпилятора. Ведь по заданному интерпретатору i (который можно считать описанием языка L), специализатор выдает компилятор с языка L язык M. Действительно, посмотрим, что такое s(s,s)? Опять применяя (**), получим

 s(s,s)(i) = s(s,i).

Но ведь s(s,i) = KLM! Так что s(s,s) - это действительно суперкомпилятор над языком M (в свою очередь написанный на M).

Кратко выразим это так: двойная автоспециализация дает суперкомпилятор.

[Нельзя ли получить что-либо интересное тройной автоспециализацией?

Подсказка. А что если подставлять различные воплощения специализатора s?]

Три последовательных применения специализатора удобно наглядно выразить следующей серией соотношений

s(s,s)(i)(p)(d) = s(s,i)(p)(d) = s(i,p)(d) = i(p,d) = r.

Другими словами, s(s,s) воспринимает описание языка L (т.е. i) и выдает компилятор s(s,i), который в свою очередь воспринимает исходную программу p на языке L и выдает ее перевод s(i,p), который уже воспринимает исходные данные d и выдает результат r.

Таким образом, мы убедились, что абстракция связывания (точнее, частичное связывание) позволяет с единых позиций рассмотреть важнейшие понятия теории трансляции и вывести полезные закономерности. Именно, связав i с p, получили перевод; связав s с i, получили компилятор; связав s с s - суперкомпилятор.




Содержание  Назад  Вперед