在Clojure的情况下,“整个语言是否始终可用”?

时间:2010-09-19 06:42:11

标签: programming-languages clojure lisp common-lisp

保罗格雷厄姆What Made Lisp Different的第九个要点,

  

9。整个语言始终可用。

     

读取时间,编译时和运行时之间没有真正的区别。您可以在编译时编译或运行代码,同时在运行时读取或编译代码。

     

在读取时运行代码允许用户重新编程Lisp的语法;在编译时运行代码是宏的基础;在运行时编译是Lisp在Emacs等程序中用作扩展语言的基础;并且在运行时读取使程序能够使用s表达式进行通信,这一想法最近被重新发明为XML。

最后一个要点是Clojure吗?

2 个答案:

答案 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向量以及将在读取时执行的任意代码