programming-languages - hello - learn lisp
¿Se mantiene “El lenguaje completo siempre disponible” en caso de Clojure? (2)
Noveno punto de bala en Whats Lisp Different de Paul Graham dice:
9. Todo el lenguaje siempre disponible.
No existe una distinción real entre tiempo de lectura, tiempo de compilación y tiempo de ejecución. Puede compilar o ejecutar código mientras lee, leer o ejecutar código mientras compila, y leer o compilar código en tiempo de ejecución.
Ejecutar código en tiempo de lectura permite a los usuarios reprogramar la sintaxis de Lisp; ejecutar código en tiempo de compilación es la base de las macros; compilar en tiempo de ejecución es la base del uso de Lisp como un lenguaje de extensión en programas como Emacs; y la lectura en tiempo de ejecución permite que los programas se comuniquen mediante expresiones-s, una idea recientemente reinventada como XML.
¿Se mantiene este último punto de bala para Clojure?
Se mantiene,
(eval (read-string "(println /"Hello World!!/")"))
Hello World!!
nil
Al igual que emacs, puede tener la configuración de su programa en Clojure, uno de los proyectos que conozco es Clojure es static que le permite tener su plantilla como vector de Clojure junto con un código arbitrario que se ejecutará en el momento de la lectura.
Puede combinar el tiempo de ejecución y el tiempo de compilación libremente en Clojure, aunque Common Lisp todavía es un poco más flexible aquí (debido a la presencia de macros del compilador y macros de símbolos y un macrolet
totalmente compatible; Clojure tiene una ventaja en su enfoque fresco a la macro higiene mediante resolución de símbolos automágicos en sintaxis-cita). El lector está actualmente cerrado, por lo que no es posible la mezcla libre de tiempo de ejecución, tiempo de compilación y tiempo de lectura 1 .
1 Excepto a través de hacks inteligentes no soportados.