编译后,一个程序可以假设运行而无需调用eval吗?

Ced*_*tin 4 lisp macros eval clojure

我正在学习Clojure是如何工作的,我想知道是否有可能(只是为了理解Clojure和Lisps方言一般如何工作)来编译Clojure程序然后运行它"禁止"使用eval.

请注意,我不会问,在技术上是否可能,例如,hotpatch正在运行的Clojure程序,以便一旦编译了Clojure程序,就会抛出异常,如果eval被调用的话.

我要问的是,如果技术上可以禁止使用eval,那么大多数Clojure程序不使用REPL而不是特定的eval仍然可以工作吗?

或者是在运行时使用eval的默认/内置API /宏/函数?

Ank*_*kur 10

eval是什么将交互式编程带到Clojure(和Lisps).一旦将Clojure代码编译为jvm字节代码(不在任何地方使用eval函数调用)或其他Lisp方言到其目标运行时(主要是本机代码),就不需要eval.

eval 应用程序的主要目的是在运行时生成代码并执行它,基本上它将允许创建"运行时宏",这不是语言的核心API需要做的事情.