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

Jus*_* L. 13 compiler-construction interpreter jvm clojure

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

我来自Ruby背景,运行Ruby程序ruby program.rb,ruby是从一个地方执行的程序到文件上(我知道这类似于java,python等的工作方式)好).

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

Mic*_*zyk 29

首先,Clojure没有翻译.所有Clojure代码在加载时都会编译成JVM字节码.我强调这一点,因为这是Clojure的优秀表现故事开始.

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

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