LINUX.ORG.RU

История изменений

Исправление staseg, (текущая версия) :

На счет коудволкеров, как-то смотрел код cl-cont. Там просто (ха-ха, просто!?) обрабатываются специальные формы и функции, а все остальное раскрывается до них. Специальных форм совсем немного. Так что, задача написания коудволкера кажется посильной, хотя, конечно, смотря какой коудволкер.

Задача посильная, но решать ее в контексте написания компилятора некоторого языка в некоторый другой язык - глупость. Фактически должна быть решена задача преобразования исходного языка в абстрактный AST, а его - в выходной язык, в действительности скорее всего сначала исходный язык транслируется в AST, свойственный этому языку, проводятся оптимизации свойственные только этому языку, этот AST постепенно превращается в AST, свойственный выходному языку, в процессе могут выполняться общие оптимизации, в конце концов выполняется оптимизация AST, свойственного выходному языку, и конечный AST преобразовывается в выходной язык. Это естественный процесс трасляции с одного языка в другой. И теперь вопрос, зачем и где в этой цепочке мне прыгать по лисповым спецформам?

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

Ну конечно, в рассматриваемой задаче достаточно обработать входной язык и скомпилировать его прямо в лисп. Это можно сделать с помощью макросов или просто так. Но в рассматриваемой же задаче так же легко просто сгенерировать исходник с классами и методами.

Исходная версия staseg, :

На счет коудволкеров, как-то смотрел код cl-cont. Там просто (ха-ха, просто!?) обрабатываются специальные формы и функции, а все остальное раскрывается до них. Специальных форм совсем немного. Так что, задача написания коудволкера кажется посильной, хотя, конечно, смотря какой коудволкер.

Зада посильная, но решать ее в контексте написания компилятора некоторого языка в некоторый другой язык - глупость. Фактически должна быть решена задача преобразования исходного языка в абстрактный AST, а его - в выходной язык, в действительности скорее всего сначала исходный язык транслируется в AST, свойственный этому языку, проводятся оптимизации свойственные только этому языку, этот AST постепенно превращается в AST, свойственный выходному языку, в процессе могут выполняться общие оптимизации, в конце концов выполняется оптимизация AST, свойственного выходному языку, и конечный AST преобразовывается в выходной язык. Это естественный процесс трасляции с одного языка в другой. И теперь вопрос, зачем и где в этой цепочке мне прыгать по лисповым спецформам?

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

Ну конечно, в рассматриваемой задаче достаточно обработать входной язык и скомпилировать его прямо в лисп. Это можно сделать с помощью макросов или просто так. Но в рассматриваемой же задаче так же легко просто сгенерировать исходник с классами и методами.