Clojure

Ecosistema y fundamentos

  • Lisp
    • Lenguaje de la familia Lisp moderno, diseñado para simplicidad, inmutabilidad y concurrencia.
    • Sintaxis mínima basada en listas, macros poderosas y orientación a datos.
  • PF Programación Funcional
    • Inmutabilidad por defecto.
    • Funciones de orden superior.
    • Composición funcional y ausencia de estado compartido mutable.
  • java JVM
    • Corre sobre la JVM, lo que permite:
      • Alto rendimiento.
      • Acceso directo a todo el ecosistema Java.
      • Portabilidad y madurez de la plataforma.
  • Evaluation of data structure
    • En Clojure, el código es datos (homoiconicidad).
    • Las estructuras de datos pueden evaluarse directamente como expresiones.
    • Facilita metaprogramación, macros y DSLs.
  • Clojure - The Reader
    • Describe cómo el lector transforma texto en estructuras de datos Clojure.
    • Paso previo a la evaluación.
    • Permite entender símbolos, listas, vectores, mapas, sets y macros reader (#() #_ #?).

Datos y procesamiento a gran escala

  • Data Science
    • Enfoque en transformación de datos inmutables.
    • Adecuado para pipelines reproducibles y auditables.
  • Big data processing
    • Uso de colecciones persistentes eficientes.
    • Buen encaje con modelos de procesamiento distribuido.
  • apache spark
    • Integración mediante APIs JVM.
    • Uso de Clojure como capa expresiva sobre Spark.
  • Pipelines de datos reproducibles
    • Funciones puras facilitan:
      • Reejecución determinista.
      • Testing sencillo.
      • Versionado lógico de transformaciones.

Más aplicaciones de Clojure

Desarrollo Web (Backend y Frontend)

  • Frameworks backend
    • Ring + Compojure
      • Abstracción simple sobre HTTP.
      • Similar en filosofía a Flask en Python.
      • Ideal para microservicios.
    • Luminus
      • Framework full-stack.
      • Incluye autenticación, routing, DB, configuración y tooling.
  • Frontend con ClojureScript (compila a JavaScript)
    • Reagent
      • Wrapper minimalista sobre React.
      • Uso directo de funciones y estado reactivo.
    • Fulcro
      • Framework full-stack.
      • Arquitectura basada en GraphQL y normalización de estado.
  • Caso real
    • Nubank
      • Usa Clojure extensivamente en su backend.
      • Escala masiva y foco en consistencia y productividad.

Procesamiento de eventos en tiempo real

  • Apache Kafka + Clojure
    • Consumo y producción de streams de eventos.
    • Procesamiento funcional de flujos.
  • Datomic
    • Base de datos transaccional creada en Clojure.
    • Datos inmutables y temporales.
    • Ideal para sistemas orientados a eventos y auditoría.

Automatización y scripting

  • Concisión y expresividad
    • Scripts cortos, claros y mantenibles.
    • Menos código imperativo.
  • Interop con Java
    • Uso directo de cualquier librería Java existente.
    • Ideal para automatizar sistemas JVM ya existentes.

Desarrollo de juegos (nicho)

  • LibGDX (con Clojure)
    • Desarrollo de juegos multiplataforma.
    • Clojure como capa lógica sobre motor Java.
  • Arcadia
    • Integración directa de Clojure con Unity.
    • Programación interactiva y hot-reload.

DevOps y herramientas

  • Boot
    • Alternativa histórica a Leiningen.
    • Enfoque en pipelines de tareas.
  • Tools.deps
    • Sistema oficial de dependencias.
    • Configuración declarativa.
    • Integración directa con el CLI de Clojure.

      Clojure — Temas avanzados y conceptos no cubiertos

Modelo de concurrencia

  • STM (Software Transactional Memory)
    • Manejo de estado coordinado mediante transacciones.
    • Uso de ref, dosync, alter, commute.
    • Garantiza consistencia sin locks explícitos.
  • Atoms
    • Estado independiente y sin coordinación.
    • Actualizaciones atómicas con swap! y reset!.
  • Agents
    • Manejo de efectos asíncronos.
    • Procesamiento en segundo plano basado en colas.
  • Futures y Promises
    • Concurrencia basada en tareas.
    • Uso para paralelismo simple y composición asíncrona.

Estructuras de datos persistentes

  • Persistent Data Structures
    • Inmutables pero eficientes.
    • Implementadas mediante árboles estructuralmente compartidos.
  • Vectores persistentes
    • Acceso indexado casi constante.
    • Uso intensivo en pipelines de datos.
  • Mapas y sets persistentes
    • Hash Array Mapped Tries (HAMT).
    • Rendimiento cercano a estructuras mutables.
  • Transients
    • Variante mutable temporal.
    • Usadas para optimización en secciones críticas.

Macros y metaprogramación

  • Macros
    • Transformación de código en tiempo de compilación.
    • Permiten crear nuevos constructos del lenguaje.
  • Syntax-quote
    • Uso de ` para evitar colisiones de símbolos.
    • Namespacing automático.
  • Unquote y unquote-splicing
    • ~ y ~@ para interpolación de expresiones.
  • DSLs internos
    • Creación de lenguajes específicos de dominio.
    • Uso frecuente en testing, routing y configuración.

Namespaces y organización de código

  • Namespaces
    • Aislamiento lógico del código.
    • Importación explícita de dependencias.
  • require, use, import
    • Control fino sobre símbolos y clases Java.
  • Aliases
    • Mejora de legibilidad en proyectos grandes.
  • Reloading
    • Desarrollo interactivo con recarga de namespaces.

Programación interactiva (REPL-driven development)

  • REPL
    • Ciclo de feedback inmediato.
    • Evaluación incremental del sistema.
  • Hot-reload
    • Modificación de funciones sin reiniciar la app.
  • Workflow incremental
    • Construcción del sistema pieza a pieza.
    • Reducción drástica del tiempo de debugging.
  • Herramientas
    • Integración con editores (CIDER, Calva).

Testing y calidad de código

  • clojure.test
    • Framework estándar de testing.
    • Tests declarativos y expresivos.
  • Testeo de funciones puras
    • Facilita pruebas deterministas.
  • Property-based testing
    • Uso de generadores de datos.
    • Validación de invariantes.
  • Contracts implícitos
    • Validación mediante specs y tests.

Spec y validación de datos

  • clojure.spec
    • Descripción formal de datos y funciones.
    • Validación, generación y documentación.
  • Specs de datos
    • Validación de estructuras complejas.
  • Specs de funciones
    • Instrumentación en tiempo de ejecución.
  • Uso en APIs
    • Contratos claros entre sistemas.

Performance y optimización

  • Lazy sequences
    • Evaluación bajo demanda.
    • Evitan cálculos innecesarios.
  • Reducers y transducers
    • Procesamiento eficiente sin crear colecciones intermedias.
  • Tipado opcional
    • Type hints para evitar reflexión JVM.
  • Profiling
    • Uso de herramientas JVM para análisis de rendimiento.

ClojureScript avanzado

  • Diferencias con Clojure
    • Runtime JavaScript.
    • Restricciones del entorno browser/Node.
  • Interop con JavaScript
    • Acceso directo a APIs JS.
    • Uso de objetos nativos.
  • Gestión de estado frontend
    • Arquitecturas reactivas.
    • Normalización y sincronización con backend.
  • Build tooling
    • Compilación avanzada y optimización.

Diseño de sistemas con Clojure

  • Arquitectura orientada a datos
    • Separación clara entre datos y comportamiento.
  • Event sourcing
    • Modelado del sistema como flujo de eventos.
  • CQRS
    • Separación de lectura y escritura.
  • Sistemas resilientes
    • Simplicidad funcional para tolerancia a fallos.

Filosofía del lenguaje

  • Simplicidad vs facilidad
    • Reducir conceptos, no atajos.
  • Datos como API
    • Preferencia por estructuras simples.
  • Menos abstracciones, más composición
    • Código flexible y reutilizable.
  • Estabilidad a largo plazo
    • Cambios mínimos en el core del lenguaje.

      Recursos y herramientas para Clojure (2025–2026)

Herramientas oficiales del lenguaje

Editores y entornos de desarrollo

  • Clojure LSP
    • Servidor de Lenguaje para Clojure y ClojureScript.
    • Integración con VS Code, Neovim, Emacs y otros editores vía LSP.
  • Calva (VS Code)
    • Extensión para Visual Studio Code con REPL interactivo y desarrollo guiado por REPL.
  • Tukain (Sublime Text)
    • Plugin para Sublime Text con soporte REPL y utilidades de desarrollo.
  • FlowStorm
    • Depurador visual para Clojure y ClojureScript con inspección temporal y trazas.

Build y gestión de proyectos

  • Clojure CLI / clj
    • Herramienta oficial para gestión de dependencias, ejecución de REPL y programas.
  • Leiningen
    • Herramienta clásica de build, testing y empaquetado.
  • tools.build
    • Toolkit moderno de build usando Clojure puro.
  • Boot
    • Herramienta histórica basada en pipelines de tareas (uso actual limitado).

Bibliotecas y utilidades destacadas

Web y APIs

  • Reacl-C
    • Librería UI declarativa para Clojure y ClojureScript.
  • Fulcro
    • Framework full-stack con GraphQL y gestión avanzada de estado.
  • Lacinia
    • Implementación GraphQL robusta para Clojure.
  • Legba
    • Librería para construir servicios que exponen OpenAPI.
  • Appia
    • Router minimalista para servicios backend en Clojure.

      Scripting y herramientas ligeras

  • Babashka
    • Intérprete Clojure nativo para scripting rápido y automatización.
  • Babashka releases
    • Página de artefactos y versiones publicadas.
  • Babashka Toolbox
    • Catálogo de herramientas y librerías compatibles con Babashka.
  • Clay
    • Herramienta REPL-friendly para notebooks, informes reproducibles y visualización de datos.

Repositorios y catálogos

  • Clojars
    • Repositorio Maven centrado en Clojure para publicar y consumir librerías.
  • The Clojure Toolbox
    • Índice categorizado de librerías y herramientas del ecosistema Clojure.

Eventos, comunidades y aprendizaje

  • Clojure Jam 2026
    • Evento creativo y técnico de la comunidad Clojure.
  • Clojure.org — Events
    • Calendario oficial de conferencias, meetups y eventos.
  • Dutch Clojure Days
    • Conferencia internacional gratuita organizada por la comunidad Clojure.

      Bases de datos y persistencia

  • XTDB
    • Base de datos inmutable con consultas SQL/Datalog y soporte temporal.
  • pg2
    • Driver PostgreSQL de alto rendimiento para Clojure/JVM.
  • Konserve
    • Almacenamiento clave-valor y documento con integración core.async.

Análisis, DevOps y CI/CD

  • MonkeyCI
    • Plataforma moderna de CI/CD escrita en Clojure.
  • Guardrails
    • Analizador estático y validación de contratos de funciones en tiempo de desarrollo.

Computación avanzada y ML

  • Neanderthal
    • Librería de álgebra lineal y computación numérica de alto rendimiento.
  • Qclojure
    • Biblioteca experimental para programación funcional cuántica.
  • litellm-clj
    • Adaptador universal para trabajar con modelos LLM desde Clojure.
  • clj-threats
    • Implementación de Threagile para modelado de amenazas en Clojure.

      ClojureScript y front-end

  • Squint
    • Dialecto ligero de ClojureScript orientado a simplicidad y compilación rápida.
  • Dompa
    • Parser y generador HTML sin dependencias para clj/cljs.
  • Reacl-C
    • Biblioteca UI declarativa para ClojureScript.
  • cljs-uix-electron
    • Starter para aplicaciones de escritorio con Electron.
  • cljs-uix-wails
    • Starter para aplicaciones nativas con Wails.
  • Solid-cljs
    • Bindings de ClojureScript para SolidJS.

Repositorios y catálogos

  • Clojars
    • Repositorio Maven centrado en Clojure para publicar y consumir librerías.
  • Clojure Toolbox
    • Catálogo categorizado de librerías y herramientas del ecosistema.

Eventos, comunidades y aprendizaje

  • Clojure Jam 2026
    • Conferencia online y gratuita centrada en creatividad y Clojure.
  • Babashka Conf
    • Evento internacional enfocado en scripting y tooling con Babashka.
  • Dutch Clojure Days
    • Conferencia europea gratuita organizada por la comunidad.
  • State of Clojure
    • Encuestas comunitarias con métricas de adopción, uso y tendencias del lenguaje.