Дом, который построил Джек
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).