为什么ClojureScript宏不能用ClojureScript编写?

16

尽管Clojure和ClojureScript的功能基本相同(除了明显的差异),但宏并非如此。当我想在ClojureScript中使用宏时,我必须在Clojure中编写它,并使用require-macros导入它。这是JavaScript的技术限制还是设计决策呢?为什么不能两者相同?

1个回答

18

来自Stuart Sierra和Luker VanderHart的ClojureScript: Up and Running第69页:

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

这意味着宏代码在Clojure世界中执行而不是在浏览器中执行,因此必须使用纯Clojure编写。


1
这是因为ClojureScript使用Google闭包编译器吧……用ClojureScript编写的ClojureScript编译器会更好。 - islon
2
Google Closure Compiler仅用于删除未使用的依赖项和缩小代码,而不是将ClojureScript编译为JavaScript。当代码到达Google Closure Compiler时,它已经是JavaScript了,尽管ClojureScript团队正在努力确保生成的JavaScript对大多数高级Google Closure Compiler功能有效。 - Serabe
5
相关的是,在clojurescript.net上有一个ClojureScript到ClojureScript编译器的工作正在进行中。其中一位作者在这个视频中谈到了它。 - bmaddy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接