art23.htm

Суперкомпиляция двойной интерпретации

(как один час машинного времени можно превратить в одну секунду)

2. Язык преобразования документов XSLT: эксперименты с суперкомпилятором Scp4.

2.3. Интерпретатор XSLT на Рефале и суперкомпиляция его.

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

      На языке программирования Рефал-5 [3] написан интерпретатор VT.ref некоторого подмножества языка XSLT.

      На примере подмножества XSLT и его интерпретатора продемонстрирована возможность (через суперкомпиляцию интерпретатора) компиляции в эффективную программму (на Рефале) с очень приличным ускорением по сравнению с интерпретацией. Целью нашей работы является демонстрация способностей суперкомпилятора SCP4. [1].

      Интерпретатор VT.ref принимает программы из фрагмента языка XSLT, замкнутого относительно синтаксических конструкций

<xsl:apply-templates>    <xsl:call-template>
<xsl:with-param>         <xsl:choose>
<xsl:copy-of>            <xsl:element>
<xsl:attribute>          <xsl:for-each>
<xsl:if>                 <xsl:param>
<xsl:text>               <xsl:value-of>

      Реализована интерпретация встроенной функции xt:node-set - без нее невозможно организовать рекурсию, которая необходима при интерпретации машины Тьюринга.

      Невозможность описать в языке XSLT повторный проход по данным делает его великолепным практическим объектом суперкомпиляции. Именно в этом и есть гланая причина, почему всё так легко получается при специализации интерпретатора по конкретным программам, если эти программы не используют функцию xt:node-set.

      Заметим, что это свойство хорошо и для специализаторов.