Как на самом деле «работают» закрывающие программы / компиляторы / интерпретаторы? - PullRequest
13 голосов
/ 24 июня 2010

Похоже, что для установки Clojure в каждой новой IDE мне нужно полностью переустановить его и создать его копию. И запуск REPL кажется, что он запускает программу на Java.

Я пришел из Ruby, где программы Ruby запускаются ruby program.rb, а ruby ​​- это программа, выполняемая из одного места, в файл (я знаю, что это похоже на то, как это работает для Java , питон и т. д.).

Является ли clojure "интерпретатор" просто скомпилированным файлом Java, который принимает файл .clj в качестве аргумента и что-то с ним делает?

1 Ответ

29 голосов
/ 24 июня 2010

Во-первых, у Clojure нет переводчика.Весь код Clojure при загрузке компилируется в байт-код JVM.Я подчеркиваю этот момент, потому что это то, с чего начинается история отличной производительности Clojure.

Во-вторых, вы на самом деле не «устанавливаете» Clojure в том смысле, в каком вы работаете с Ruby.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-команда) отличаются только тем, что операционная система знает, как найти для вас их функции main (ну, эквивалент Java-пути к классам тоже работает довольно по-разному, но основнойпонятия одинаковы).В программах JVM для запуска нужно использовать дружественный к ОС исполняемый файл (java / java.exe).

...