Подтвердить что ты не робот

Почему макросы clojurescript не могут быть записаны в clojurescript?

Хотя функции clojure и clojurescript в основном одинаковы (кроме очевидных различий), макросы не являются. Когда мне нужен макрос в clojurescript, я должен записать его в clojure и потребовать его с помощью require-macros. Это техническое ограничение javascript или просто дизайнерское решение? Почему оба варианта не могут быть одинаковыми?

4b9b3361

Ответ 1

Из ClojureScript: Up and Running от Стюарта Сьерра и Лукера Вандер Харта, стр. 69:

Макросы применяются во время процесса компиляции. Они не существуют во время выполнения. Потому как     компилятор ClojureScript реализован в Clojure, макросы ClojureScript должны быть написаны     в Clojure, а не ClojureScript. К счастью, Clojure и ClojureScript почти идентичны     когда дело доходит до манипулирования структурами данных, поэтому переключение между двумя языками     не сложно.

Это означает, что макрокод выполняется в Clojure мире, а не в браузере, поэтому он должен быть написан простым Clojure.