Промежуточное представление для Lisp/Clojure DSL

Я разрабатываю DSL в Clojure, который используется для управления генератором кода (, в данном случае для процедурного синтеза изображений -. клиск)и у меня возникли проблемы с разработкой наилучшего представления для промежуточных значений.

Первоначально DSL состоял из функций, которые возвращали одну или несколько форм, например. (иллюстративный)

(v+ 1.0 [1.0 'y])
=> ['(+ 1.0 1.0) '(+ 1.0 y)]

Затем эти функции можно было бы скомпоновать для создания более крупных блоков кода.

Это было просто, и полученные формы можно было напрямую вводить в генератор кода. Однако теперь я определил некоторые недостатки этого подхода,например, если есть необходимость передать некоторые вспомогательные данные (, например. объекты, которые не могут быть закодированы в таких формах, как BufferedImages, метаданные, полезные для оптимизации и т. д. ).

Я уверен, что в мире Лиспа эта проблема решена. -Какое промежуточное представление обычно является лучшим для такого типа DSL?

6
задан mikera 26 May 2012 в 02:46
поделиться