Дом, который построил Джек

index.htm - English text 

JackHouse.zip - архивированная директория, в которой содержатся четыре поддиректории со все необходимым для четырех примеров. 

 

Здесь речь пойдет сразу о двух суперкомпиляторах, о суперкомпиляторе для Рефала и о суперкомпиляторе для Явы.

Давным-давно мною была написага программа на Рефале, которая печатает текст всем известной сказки про Репку skazka.txt. Аргументами этой программы являлся список действующих лиц : дедка, бабка и так далее.

В прошлом году я попробовал суперкомпилировать эту программу skazka.ref. Эксперимент закончился благополучно , в результате получилась  тривиальная программа r_skazka.ref , которая состоит из печати строчек сказки. В остаточной программе  r_skazka.ref русские буквы закодированы, поэтому она плохо обозрима.

Андрей Немытых повторил эксперимент для стихотворения "Дом, который построил Джек" на английском языке. Программа  JackHouse.ref суперкомпилируется в остаточную программу r_JackHouse.ref. Оригинал стихотворения JackHouse.txt можно посмотреть по адресу http://www.crossmyt.com/hc/linghebr/daedljak.html.

Я повторил эту программу для суперкомпилятора Явы. Повторил в том смысле, что  просто "списал" программу на Рефале, включая имена функций и переменных. Программа на рефале закомментирована в конце программы JackHouse.java.

В программе имеется рекурсия, которая благополучно развернулась. Куплеты порождаются в обратном порядке, как на Рефале. Так же как на рефале, в остаточной программе JackHouse.js ничего не осталось от исходной программы, кроме печати.

Любо-дорого смотреть на эту Ява-программу - Рефал, да и только

После этого я получил от Аркадия Климова письмо, в котором они писал.

Может она и похожа на исходную рефаловскую, но я довольно долго врубался, чтобы понять, что же там накручено. И потому решился написать свой вариант swift2.java, который мне попонятнее. Результат тот же и суперкомпилируется так же swift2.js. Кроме того, я добавил несколько определений (внизу), чтобы подготовить класс к динамической специализации (по параметру numberOfCouplets). Их использования пока закомментированы. Но пробовал: через них тоже нормально суперкомпилируется (при конкретном n).