Esta pregunta proviene puramente de "masterbation mental" y probablemente no tiene ningún valor práctico.Constantes en tiempo de compilación Clojure
Si defino un valor en Clojure usando def
, ¿se puede inducir al compilador a evaluarlo en tiempo de compilación y no esperar hasta el tiempo de ejecución?
(def the-answer 42)
(+ the-answer 1)
supongo que podría definir una macro, pero la sintaxis de llamada se convierte en una especie de incómoda:
(defmacro the-answer [] 42)
(+ (the-answer) 1)
Esto también funciona, pero sigue siendo fea:
(+ `~the-answer 1)
que también entienden (o cree) que Clojure evalúa expresiones constantes en tiempo de compilación:
(def milliseconds-per-day (* 24 60 60 1000))
Estoy aprendiendo Common Lisp, pero mi opinión es que Common Lisp soporta macros lector definidos por el usuario, por lo que podría definir una macro lector (algo así como #$
) que evalúa el siguiente símbolo en tiempo de compilación:
(+ #$the-answer 1)
Por cierto, esa sintaxis no es "más bonita" que la macro llamada.
¿Cómo hago que Clojure evalúe los valores constantes en el tiempo de compilación y reemplace la referencia con el valor real? ¿Ya lo hace?
Antes de que alguien comience a citar la Ley de Knuth ("la optimización prematura es la raíz de todos los males"), hago esta pregunta para comprender mejor los aspectos internos de la compilación de Clojure.
Eso no es lo que es la pontificación. La Pontificación es hablar de manera pomposa o dogmática. –
Sí, lo eliminé. – Ralph