Leo en alguna parte Clojure está compilado. ¿Está realmente compilado, como Java o Scala, en lugar de interpretado, como Jython o JRuby?¿Se compila o interpreta Clojure?
Respuesta
Clojure es siempre compilado.
El compilador Clojure produce código de bytes Java, que normalmente es 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 lo desea. Todo esto es parte de la tradición de Lisp "código es datos".
Por ejemplo, la siguiente invocará el compilador Clojure en tiempo de ejecución para compilar y ejecutar la forma (+ 1 2)
:
(eval '(+ 1 2))
=> 3
La capacidad de invocar el compilador en tiempo de ejecución es muy útil - por ejemplo, se le permite compilar y ejecutar código nuevo 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.
Both-ish! (Cuando se trata de la generación de código de bytes)
Clojure es sobre el FLY- compiled at code load time en bytecode JVM, que tiene la sensación y el flujo de un lenguaje interpretado, y ahead-of-time compiled en bytecode JVM, que tiene el flujo de de un lenguaje compilado. ambos son luego JIT compilados 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 desea "interpretado", entonces se puede
(load "/my/file.clj")
a partir de la réplica. - Si desea la compilación Ahead-Of-Time, le sugiero que utilice la herramienta de administración de proyectos leiningen clojure.
En este caso, cuando menciono la compilación vs interpretando Debería estar claro que estoy hablando de convertir el código fuente en bytecode JVM. Todos los lenguajes JVM son compiled by the JVM at runtime por lo que la distinción no es realmente muy interesante.
Ambos! Es incorrecto, es solo el flujo de un lenguaje interpretado, nunca hay nada interpretado. – nickik
nos encontramos con la disputa entre deffinitions puros y respuestas claras y concisas. en el último párrafo. Estoy hablando del proceso de creación de bytecode JVM. –
editado para hacer que el distinctin sea más claro, gracias kickik –
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 byte JVM pueden compilarse luego en código de máquina mediante HotSpot, si está utilizando OpenJDK o una derivada de este.
Como lenguaje de alto nivel, Clojure tiene una forma de tipado dinámico, que es a lo que se refiere la frase "completamente dinámica".
- 1. ¿Se compila o interpreta PHP?
- 2. ¿Compila Javascript o interpreta dos pasadas?
- 3. ¿Se interpreta el lenguaje R?
- 4. ¿Cómo se interpreta la instrucción printf?
- 5. ¿Se compila Javascript o es un lenguaje interpretado?
- 6. MySQL declaración LIKE interpreta "o" y "ö" como el mismo
- 7. ¿Por qué PHP no se interpreta en FF pero se interpreta en Chrome en mi sitio web?
- 8. ¿Por qué/cómo se compila?
- 9. java.lang.Object o = 1; // ¿por qué compila esto?
- 10. Jekyll no interpreta el descuento
- 11. Scala - Java =? (O Clojure -? = Java)
- 12. ¿Cómo se componen dos o más predicados en clojure?
- 13. código se compila con OpenCV Bibliotecas
- 14. en Eclipse Leiningen No se pudo localizar clojure/contrib/o duck_streams__init.class clojure/contrib/duck_streams.clj
- 15. Editor de código de Windows que compila/interpreta la mayoría de los idiomas a la par del CodeRunner?
- 16. mapa STL contiene referencias no se compila
- 17. PCRE se compila sin soporte UTF
- 18. asp.net: DetailsView control no interpreta html
- 19. Característica o error: ¿Por qué compila este código de Java?
- 20. ¿Cómo se compila C en vi y se ejecuta?
- 21. Desarrollo de Clojure: ¿IDE o REPL?
- 22. ¿Windows 8 compila JavaScript?
- 23. Enorme archivo de biblioteca estática cuando se compila con VS2005, tamaño normal cuando se compila con gcc
- 24. ¿En qué se compila C# lambda? ¿Un marco de pila, una instancia de tipo anónimo o?
- 25. Clojure o Scheme bibliotecas de clasificación bayesian?
- 26. self.delegate respondsToSelector: ... no compila
- 27. ¿Cuándo compila Rails CoffeeScript?
- 28. Cómo verificar si un archivo ejecutable o una DLL se compila en modo Liberar o Depurar (C++)
- 29. ¿Por qué compila esto?
- 30. expresiones condicionales en Monádicos - GHC compila, cábala se niega
JFGI. Mire la página de inicio del proyecto. – Marcin
@Marcin Lo hice pero me confunde un poco. ¿Podría proporcionar un aswer junto con donwvote? – OscarRyz
"Clojure es un lenguaje compilado: se compila directamente en el bytecode de JVM, pero sigue siendo completamente dinámico". ¿Bastante claro? – Marcin