Index of /authors/korlukov/article

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

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

В статье идет речь о преобразованиях программ с целью получения более эффективных программ. В качестве преобразователя используется суперкомпилятор SCP4 [1]. Суперкомпиляции происходит достаточно успешно при обработке интерпретирующих алгоритмов.

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

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

(1). Машина Тьюринга TM получает в качестве аргумента ленту Tape, запишем это так

           <TM  e.tape> 

(2). Интерпретатор машины Тьюринга, написанный на XSLT [2] , он получает в качестве аргументов XML и DTD , запишем это так

   <IntTM (e.DTD) (e.XML)>   
                              
или, подробнее,

   <IntTM (e.DTD)       e.tape    >   
                   <TM   !      >     

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

(3). Интерпретатор языка XSLT, написанный на рефале [3], который получает произвольные XSLT, XML, DTD, запишем это так

   <IntXSLT  (e.XSLT) (e.DTD) (e.XML)


или подробнее

<IntXSLT          e.DTD        e.tape      >     
          <IntTM ( !   )        !       >        
                          <TM   !     >           

(4). Ко всему этому применяется суперкомпилятор SCP4, запишем это так

 <SCP4                                                >  
        <IntXSLT                       e.tape       >     
                  <IntTM <DTD           !       > >        
                                  <TM   !     >           

Описание документа DTD у нас используется в качестве фильтра (рекурсивная динамическая типизация средствами языка рефал) входных XML-документов.

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

                                                 ( 1 )
                                                  
   <IntXSLT                 e.TM  e.tape         >
             <IntTM <DTD     !     !        > >   
                           < !     !      >       

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

Если же использовать конструкцию

                                                ( 2 )
                                                   
   <IntXSLT                       e.tape          >
              <IntTM <DTD           !        > >   
                             <TM    !      >          

то получится конкретная программа на рефале, например, программа удвоения количества единиц mul2 или программа F12 замен 1 на 2.

План работы.

1. Машина Тьюринга.

2. Регулярные выражения и конечные автоматы, их интерпретация и суперкомпиляция.

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

4. Интерпретатор машины Тьюринга на языке XSLT.

5. Эксперименты по суперкомпиляции двойной интерпретации.

6. Вперед, к рефалу-5 !

Литература