Clojure всегда компилируется .
Компилятор Clojure создает Java-байт-код, который обычно затем JIT-компилируется в собственный код JVM.
То, что может сбивать с толку, - это динамическая и интерактивная природа Clojure, что означает, что вы можете вызывать компилятор во время выполнения, если хотите. Это все часть лисповской традиции «код - данные».
Например, следующее вызовет компилятор Clojure во время выполнения, чтобы скомпилировать и выполнить форму (+ 1 2)
:
(eval '(+ 1 2))
=> 3
Возможность вызывать компилятор во время выполнения очень полезна - например, он позволяет вам компилировать и запускать новый код в середине работающего приложения Clojure с помощью REPL. Но важно не путать этот «интерактивный» стиль разработки с «интерпретацией» - разработка Clojure является интерактивной, но все равно всегда компилируется.