Mis pensamientos después de usar Clojure durante aproximadamente un mes
Funcional frente a POO y el diseño de Clojure
- Varios comentaristas parten de un entorno de POO y encuentran que el paradigma funcional resulta incómodo al principio, pero cada vez más convincente para sistemas grandes.
- Se considera que Clojure ofrece una especie de “POO a la carta” mediante maps/records, protocols, multimethods y schemas, aunque algunos sienten que esto es ad hoc en comparación con las jerarquías de clases tradicionales.
- Otros sostienen que la buena POO y la FP convergen en la práctica, y que la inmutabilidad omnipresente junto con transformaciones simples de datos hacen que el diseño a gran escala y la refactorización sean más fáciles.
Sintaxis, paréntesis y experiencia de edición
- Las opiniones sobre la sintaxis de Clojure están divididas: algunos la llaman “infierno de paréntesis”, mientras que otros dicen que los vectors/sets/maps y una sintaxis mínima del núcleo son una mejora neta frente a otros Lisps.
- Las herramientas de edición estructural (paredit, parinfer, navegación de sexp en Emacs, Ki editor, movimiento basado en indentación) se citan repetidamente como esenciales para gestionar corchetes y hacer que la refactorización sea agradable.
- Hay debate sobre elecciones sintácticas concretas (por ejemplo, enlaces
leten vectors, el recorrido distinto de listas frente a vectors en otros Lisps).
Runtime, concurrencia y “sintaxis vs runtime”
- Un hilo importante sostiene que las propiedades del runtime (green threads, actors, STM, inmutabilidad) importan más que la sintaxis para los sistemas del mundo real.
- Algunos prefieren fuertemente los runtimes de Erlang/Elixir o Go para enormes cantidades de actores ligeros y diseños sin compartición de estado.
- Otros responden que la JVM es uno de los runtimes más avanzados, ahora con virtual threads, una concurrencia sólida y bibliotecas como Akka; las afirmaciones de que “va por detrás” se consideran desfasadas.
- Se reconoce STM y actores en la JVM, pero se ven como menos idiomáticos o menos usados que el modelo integrado de BEAM.
LLMs, Clojure y el REPL
- Los benchmarks muestran que los LLMs en bruto tienen tasas de “éxito” de un solo intento más bajas en Clojure (sintaxis, paréntesis, orden de evaluación), pero cuando se conectan a un REPL de Clojure pueden probar código iterativamente y volverse mucho más efectivos.
- El desarrollo guiado por REPL se presenta como una superpotencia, tanto para humanos como para agentes LLM, ya que permite exploración incremental, depuración y descubrimiento de bibliotecas.
Tipado, specs y fiabilidad
- Algunos comentaristas tienen dificultades con el tipado dinámico, y reportan errores sutiles en tiempo de ejecución y la ausencia de garantías en tiempo de compilación que obtienen de lenguajes FP tipados.
- Otros defienden la dinamización intencional de Clojure y sugieren apoyarse en el REPL más schemas/spec (por ejemplo, Malli, spec, Typed Clojure en investigación/uso limitado) para comprobaciones estáticas parciales y validación de datos.
- Una postura fuerte afirma que el tipado dinámico siempre es un error; otros no están de acuerdo y enfatizan los compromisos y la productividad.
Portabilidad y ecosistema
- Clojure se destaca como un lenguaje hospedado con muchos dialectos (JVM, JS, CLR, Dart, babashka, C++, Python-hosted, etc.).
- Se está usando un test suite compartido de clojure.core para medir y mejorar la compatibilidad entre dialectos.
- Esta portabilidad se presenta como una ventaja importante: mucho código “puro” de Clojure puede ejecutarse sin cambios entre runtimes.
Empleos, popularidad y economía
- Algunos señalan que hay relativamente pocas ofertas de trabajo de Clojure y ven eso como una falta de atractivo en el mercado.
- Otros responden que los puestos de Clojure suelen pagar por encima de la media y señalan contrataciones no comoditizadas; la popularidad y el número de empleos no se corresponden directamente con el mérito técnico.
- La discusión distingue entre “sinergia” y política (por ejemplo, la adopción de Python, JS, C#, PHP) y la calidad del lenguaje.
Generadores de sitios estáticos y juguetes lispy
- Varios comentaristas mencionan haber escrito sus propios generadores de sitios estáticos en Clojure u otros Lisps como un rito de paso.
- Los SSG caseros son divertidos y fáciles de ampliar con macros/plantillas, pero se quedan cortos frente a herramientas maduras en optimización, manejo de CSS, SSR e integración con el ecosistema de Node; muchos acaban migrando a SSGs convencionales.