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.
Заметим, что это свойство хорошо и для специализаторов.