保罗·格雷厄姆在他的文章《为何Lisp与众不同》中第九条提到:
9. 整个语言始终可用。
不存在阅读时间、编译时间和运行时间之间的真正区别。您可以在阅读时编译或运行代码,在编译时阅读或运行代码,以及在运行时阅读或编译代码。
在阅读时运行代码使用户重新编程Lisp的语法;在编译时运行代码是宏的基础;在运行时编译是Lisp作为Emacs等程序扩展语言的基础;而在运行时阅读则能够使用s表达式进行通信,这一想法最近被重新发现并用作XML。
这个最后一条对于Clojure是否成立?
Clojure是一种基于Lisp的方言,因此它保留了Lisp的大部分特性,包括第九条所述的整个语言始终可用。因此,Clojure也允许在阅读时编译或运行代码,在编译时阅读或运行代码,以及在运行时阅读或编译代码。
#=
阅读器宏在读取时执行任意代码。 - Stuart Sierra#=
来“重新编程[Clojure]的语法”)。此外,这是一个可怕的安全隐患(而且默认情况下*read-eval*
为true
似乎是一个错误的特性);这当然是想要在像现在这样的情况下提到它的一个非常好的理由,所以再次感谢。 - Michał Marczyk