保罗格雷厄姆What Made Lisp Different的第九个要点,
9。整个语言始终可用。
读取时间,编译时和运行时之间没有真正的区别。您可以在编译时编译或运行代码,同时在运行时读取或编译代码。
在读取时运行代码允许用户重新编程Lisp的语法;在编译时运行代码是宏的基础;在运行时编译是Lisp在Emacs等程序中用作扩展语言的基础;并且在运行时读取使程序能够使用s表达式进行通信,这一想法最近被重新发明为XML。
最后一个要点是Clojure吗?
答案 0 :(得分:13)
你可以在Clojure中自由地混合运行时和编译时,虽然Common Lisp在这里仍然有点灵活(由于存在编译器宏和符号宏以及完全支持macrolet
; Clojure在它通过语法报价中的自动符号解析来实现宏观卫生。读者目前已关闭,因此无法自由混合运行时,编译时和读取时间 1 。
1 除了不受支持的clever hacks。
答案 1 :(得分:4)
确实如此,
(eval (read-string "(println \"Hello World!!\")"))
Hello World!!
nil
就像emacs一样,您可以在Clojure中进行程序配置,我知道Clojure的一个项目是static,它允许您将模板作为Clojure向量以及将在读取时执行的任意代码