Seguimos con Clojure...
Como funcióna o lee las expresiones Clojure?
En Java, el código fuente (archivos .java) se lee como caracteres por el compilador (javac), que produce código de bytes (archivos .class) que la JVM puede cargar. Es decir un proceso tipico de compilación, se lee y compila el archivo fuente y produce bytecode que corre sobre la JVM. Sería algo así :
En Clojure, se lee el código fuente como caracteres y esto se puede de leer desde un archivo .clj o recibir una serie de expresiones de forma interactiva. El lector produce datos de Clojure. El compilador de Clojure luego produce el código de bytes para la JVM. Sería algo así :
Hay dos puntos importantes:
- La unidad del código fuente es una expresión Clojure, no un archivo fuente Clojure. Los archivos de origen se leen como una serie de expresiones, como si las hubiera escrito de forma interactiva en el REPL.
- Separar el lector y el compilador es una separación clave que deja espacio para macros. Las macros son funciones especiales que toman código (como datos) y emiten código (como datos).