clojure程序/编译器/解释器如何实际“工作”?

时间:2010-06-24 04:45:34

标签: compiler-construction clojure jvm interpreter

似乎要在每个新IDE中安装Clojure,我必须完全重新安装它并创建它的副本。运行REPL似乎正在运行Java程序。

我来自Ruby背景,其中Ruby程序由ruby program.rb运行,而ruby是从一个地方执行到程序的程序(我知道这与它的工作方式类似)对于java,python等也是如此。

clojure“解释器”仅仅是一个编译的Java文件,它将.clj文件作为参数,并对其进行处理吗?

1 个答案:

答案 0 :(得分:29)

首先,Clojure没有翻译。所有Clojure代码在加载时都会编译成JVM字节码。我强调这一点,因为这是Clojure出色的表演故事。

其次,在你做Ruby的意义上,你并没有真正“安装”Clojure。 Clojure是一个jar文件,它只是一堆Java类;如果将jar文件放在类路径上,则可以运行这些类的方法。在这些类中,clojure.main提供了运行REPL和“脚本”的main方法。因此,运行REPL确实运行了Java(即JVM)程序;并且运行clj文件相当于要求clojure.main加载并运行它(实际工作将交给Clojure实现中的其他类,但clojure.main是入口点)。顺便说一句,这与JRuby完全相同。

每个JVM程序最终“仅仅是一个已编译的Java文件”,或者可能是一堆这样的文件。要运行它,您需要让JVM实例加载它并运行相应的main方法。请注意,C程序(例如ruby - 命令)的不同之处仅在于操作系统知道如何为您找到它们的main函数(嗯,相当于Java的类路径的工作方式也大不相同) ,但主要概念是相同的)。使用JVM程序,您需要使用操作系统友好的可执行文件(java / java.exe)来启动。