Mis impresiones tras un mes programando en Clojure

Fuentes: My thoughts after using Clojure for about a month

Tras un mes utilizando Clojure para reconstruir su sitio web personal, el autor comparte sus impresiones sobre el lenguaje y por qué piensa seguir con él.

El autor se acercó a Clojure esperando la sintaxis engorrosa que suele asociarse a los dialectos de Lisp, pero en la práctica lo encontró más ergonómico y cohesivo. Tres aspectos le resultaron especialmente positivos.

En primer lugar, Clojure resulta más cohesivo que Common Lisp. Common Lisp, un lenguaje diseñado por consenso a principios de los años 80, mezcla paradigmas y convenciones de nomenclatura que complican operaciones cotidianas: mapear requiere mapcar, filtrar usa el doble negativo remove-if-not, y la igualdad tiene múltiples formas específicas según el tipo (eq, eql, equal, equalp). Clojure reemplaza todo esto con una abstracción seq uniforme que funciona con listas, vectores y hash-maps, y con un único = (o == para números) para igualdad. Iterar sobre un hash-map se reduce a (map (fn [[k v] ...]) hash-table).

En segundo lugar, Clojure es más "con pilas incluidas" que Scheme. Scheme quedó reducido a un núcleo mínimo: el manejo de errores, la lectura y escritura de archivos y los hash-maps están ausentes del lenguaje base. Aunque R6RS añadió funcionalidades, provocó una fractura en la comunidad. Clojure, alojado sobre la JVM, incluye una amplia biblioteca estándar y puede aprovechar el ecosistema Java, algo especialmente valioso para programadores aficionados.

En tercer lugar, las estructuras de datos de Clojure son ergonómicas. Aunque el autor valora la idea de Lisp de "todo es una lista", las aplicaciones reales necesitan vectores y diccionarios. Clojure trata listas, vectores, hash-maps y conjuntos como ciudadanos de primera clase, manipulables de forma uniforme por las funciones del núcleo.

El autor también señala dos puntos débiles. Clojure arrastra más sintaxis que otros Lisp: (), [], {}, #{}, además de símbolos con . y / y el unquote ~. Los corchetes se acumulan al final de los bloques, lo que sigue resultando incómodo. Además, no saber Java dificulta razonar sobre las llamadas de interoperabilidad, aunque el lenguaje oculta gran parte de la maquinaria de la JVM.

A pesar de estos inconvenientes, el autor planea seguir con Clojure, citando herramientas como Babashka para scripting y Project Euler para practicar. El texto cierra con una invitación a conectar mediante un código de amigo de Project Euler.