programacion lenguaje for eta clojure compilation jvm-languages interpreted-language compiled-language

lenguaje - ¿Se compila o interpreta Clojure?



haskell for jvm (3)

Leí en alguna parte Clojure está compilada. ¿Está realmente compilado, como Java o Scala, en lugar de interpretado, como Jython o JRuby?


Ambos-ish! (cuando se trata de generar bytecode)

Clojure se compila sobre la marcha en el tiempo de carga del código en el bytecode de JVM, que tiene la sensación y el flujo de un lenguaje interpretado, y compilado anticipadamente en el bytecode de JVM, que tiene el flujo de un lenguaje compilado. ambos son compilados JIT en código de máquina por el compilador Java Hotspot que se ocupa de la optimización dinámica de la que Clojure depende para la velocidad. solo para hacer que el código interesante "cargado / evaluado" pueda compilarse sobre la marcha en tiempo de ejecución, y el código compilado AOT puede cargar y evaluar la fuente en tiempo de ejecución.

  • Si quiere "interpretar", entonces puede (load "/my/file.clj") desde la réplica.
  • Si desea compilar Ahead-Of-Time, le sugiero que utilice la herramienta de gestión de proyectos leiningen clojure.

En este caso, cuando menciono compilar vs. interpretar, debería quedar claro que estoy hablando de convertir el código fuente en bytecode de JVM. Todos los lenguajes JVM son compilados por la JVM en tiempo de ejecución, por lo que la distinción no es realmente muy interesante.


Clojure siempre está compilado .

El compilador de Clojure produce código de bytes de Java, que generalmente es luego JIT-compilado a código nativo por la JVM.

Lo que puede ser confuso es la naturaleza dinámica e interactiva de Clojure, lo que significa que puede invocar el compilador en tiempo de ejecución si así lo desea. Todo esto es parte de la tradición de Lisp "código es datos".

Por ejemplo, lo siguiente invocará el compilador Clojure en tiempo de ejecución para compilar y ejecutar el formulario (+ 1 2) :

(eval ''(+ 1 2)) => 3

La capacidad de invocar el compilador en el tiempo de ejecución es muy útil, por ejemplo, le permite compilar y ejecutar un nuevo código en el medio de una aplicación Clojure en ejecución mediante el uso de REPL. Pero es importante no confundir este estilo de desarrollo "interactivo" con ser "interpretado": el desarrollo de Clojure es interactivo, pero siempre compilado.


Clojure es un lenguaje JVM compilado. Eso significa que el primer paso que toma cuando se enfrenta con un nuevo programa es compilarlo en bytecode de JVM.

Algunos de los códigos de bytes de JVM pueden compilarse luego en código de máquina mediante HotSpot, si está utilizando OpenJDK o una derivada de este.

Como un lenguaje de alto nivel, Clojure tiene una forma de tipado dinámico, que es a lo que se refiere la frase "completamente dinámica".