为什么clojurescript宏不能用clojurescript写?

isl*_*lon 15 clojure clojurescript

虽然clojure和clojurescript功能基本相同(除了明显的差异),但宏不是.当我想要一个clojurescript中的宏时,我必须在clojure中编写它并且需要它与require-macros.这是javascript的技术限制还是仅仅是设计决策?为什么不能两者都一样?

Ser*_*abe 16

来自ClojureScript: Stuart Sierra和Luker VanderHart的启动和运行,第69页:

在编译过程中应用宏.它们在运行时不存在.由于ClojureScript编译器是在Clojure中实现的,因此ClojureScript宏必须用Clojure编写,而不是用ClojureScript编写.幸运的是,Clojure和ClojureScript在操作数据结构时几乎完全相同,因此在两种语言之间切换并不困难.

这意味着宏代码在Clojure世界而不是在浏览器中执行,所以它必须用简单的Clojure编写.

  • 在相关的说明中,正在[clojurescript.net](http://clojurescript.net/)上对ClojureScript编译器进行ClojureScript编译工作.其中一位作者在[本视频](http://www.infoq.com/presentations/cljs-in-cljs)中对此进行了讨论. (5认同)
  • Google Closure Compiler仅用于删除未使用的依赖项并缩小代码,而不是将ClojureScript编译为JavaScript.当代码到达时,Google Closure Compiler已经只是JavaScript了,尽管ClojureScript团队努力工作以确保生成的JavaScript对大多数高级Google Closure Compiler功能都有效. (2认同)