1 puntos por GN⁺ 2026-01-04 | 1 comentarios | Compartir por WhatsApp
  • Un lenguaje de programación que combina la sintaxis de Clojure y el rendimiento nativo basado en LLVM, y ofrece interoperabilidad fluida con C++
  • Mantiene las características funcionales y orientadas a valores de Clojure, pero usa LLVM como entorno host en lugar de la JVM
  • Todas las estructuras de datos son persistentes e inmutables y pueden integrarse directamente con la biblioteca estándar de C++
  • Actualmente está en fase alfa (Alpha), y la documentación oficial y ejemplos están disponibles en el jank book
  • Es un intento de combinar el ecosistema de Clojure con el rendimiento nativo de C++, con el significado de reducir la frontera entre los lenguajes funcionales y los lenguajes de sistemas

Resumen de jank

  • jank es un lenguaje alojado en LLVM basado en la sintaxis y filosofía de Clojure
    • Se basa en LLVM en lugar de la JVM y soporta interoperabilidad con C++
    • Mantiene las características funcionales, interactivas y centradas en valores de Clojure
  • Apunta a una alta compatibilidad con Clojure y, así como Clojure interactúa con Java, jank se integra con C++
  • Actualmente está en desarrollo como versión alfa, y se pueden consultar más detalles en la documentación oficial

Características del lenguaje

  • Todas las estructuras de datos integradas son persistentes e inmutables
    • Ejemplo: (def george {:name "George Clooney"})
  • Los efectos secundarios pueden realizarse explícitamente cuando sea necesario
    • Ejemplo: (defn say-hi [who] (println (str "Hi " (:name who) "!")) (assoc who :greeted? true))
  • Puede integrarse directamente con la biblioteca estándar de C++
    • Ejemplo: (cpp/std.this_thread.sleep_for (cpp/std.chrono.milliseconds ms))
  • Ofrece varias funciones core para el procesamiento funcional de datos
    • Ejemplo: (apply + (distinct [12 8 12 16 8 6])) ; => 42

Desarrollo y documentación

  • Documentación oficial: jank book
  • El proyecto está basado en LLVM 22 y es compatible con los estándares modernos de C++
  • Soporta compilación AOT, perfilado de GC y opciones de compilación de CMake
  • Incluye configuración para entornos Nix y builds automatizados de CI

Comunidad y patrocinio

  • El proyecto puede recibir apoyo a través de GitHub Sponsors
  • Empresas y personas patrocinadoras: Clojure Together, nubank, multiply.co, modulr-software, entre otras
  • Canales de comunidad: Slack (Clojurians), Twitter

Presentaciones e introducciones relacionadas

  • Video de la presentación de Clojure Conj 2023
  • Introducción al lenguaje en The REPL Interview y Compiler Spotlight
  • Disponible un video de YouTube: Language Introduction

Resumen:
jank es un lenguaje que traslada la filosofía funcional de Clojure al entorno nativo de LLVM y C++, y busca combinar la productividad de Clojure con el rendimiento de C++. Aunque todavía está en fase alfa, plantea una nueva experiencia de desarrollo unificada tanto para desarrolladores de Clojure como para programadores de sistemas.

1 comentarios

 
GN⁺ 2026-01-04
Comentarios en Hacker News
  • Para todo lo relacionado con jank alpha, agradecería que consultaran el libro oficial
    Todavía no está completamente listo para presentarse, pero me alegra que la gente esté mostrando interés
    Con solo integrar algunas funciones más del compilador, ya quedará lo suficientemente listo como para seguir el libro y probar jank directamente

    • Me interesa mucho jank, así que estoy leyendo el libro que acaban de enlazar
      Veo algunos errores gramaticales, y me pregunto si está bien enviar un PR a la sección book, o si sería mejor dar retroalimentación de otra forma para mantener el estilo del autor
    • Gracias y felicitaciones a todas las personas que participaron
  • jank es un dialecto de Clojure, y Clojure a su vez es un dialecto de Lisp
    Está centrado en lo funcional, pero también admite estado mutable y efectos secundarios
    Todas las estructuras de datos son inmutables por defecto y, al igual que Clojure, ofrece mecanismos seguros de cambio que facilitan la concurrencia
    Además, tiene una integración profunda con C++, por lo que se pueden definir nuevos tipos, funciones y plantillas de C++ en tiempo de ejecución
    Con compilación JIT usando Clang y LLVM, se puede acceder fácilmente a bibliotecas de C/C++
    Para más detalles, consulta el libro oficial

    • Cuando usaba C++ antes, el proceso de compilación era demasiado doloroso
      Me gusta Clojure, pero me atrae que tenga un objetivo nativo
      Me pregunto qué tan rápida es la compilación/recompilación en jank
  • Me pregunto qué tan de cerca seguirá el desarrollo de jank a Clojure
    Si planean mantenerlo lo más igual posible, como cljs, o si en algún momento se separará
    Antes hice un lenguaje que era como un 90% similar a Clojure, pero como era difícil garantizar compatibilidad total, no le puse ese nombre
    jank parece un drop-in replacement, y se ve genial

    • jank es Clojure, y planea seguir el desarrollo de Clojure upstream
      Está colaborando con el equipo de Clojure y con desarrolladores de otros dialectos, y para eso está liderando cross-dialect clojure-test-suite
      Ya da soporte, o está trabajando en ello, para Clojure JVM, ClojureScript, Clojure CLR, babashka, Basilisp y jank
      Aun así, también planea añadir un modo opcional inspirado en Carp, pero manteniendo la compatibilidad por defecto
  • Por un momento pensé que no era jank sino Jack Lang (el político francés)

    • Yo también me confundí igual
  • Libro para ver junto con esto: https://book.jank-lang.org/

  • Llevo un año siguiendo el blog de jank, así que felicidades por el lanzamiento alpha
    Como usuario de Emacs, me interesa saber cómo va el soporte para herramientas de desarrollo tipo CIDER
    También encontré un error en un enlace de la sección Welcome: hay que cambiar “foreward” por “foreword”

    • El servidor nREPL ya funciona, pero todavía no se ha integrado al repositorio de jank
      Se puede revisar en try-jank
      El avance se ha retrasado por un bug de Clang, pero es una tarea de alta prioridad
      El error del enlace ya fue corregido
  • Me pregunto si jank puede integrarse con una base de código en Rust

    • Se puede como con cualquier proyecto normal de C++
      Puede conectarse a través del ABI de C o de mecanismos de interoperabilidad C++/Rust
    • Claro que sí
  • Me pregunto si incluye un sistema de tipos estático

    • Como es un dialecto de Clojure, por defecto es un lenguaje de tipado dinámico
      Pero el desarrollador mencionó que planea añadir un sistema de tipos gradual¹
      La visión es que algunas partes puedan seguir siendo totalmente dinámicas y basadas en GC, mientras que otras funcionen de forma más controlada y optimizada
      ¹ Entrada de blog relacionada
    • No hay tipado estático a nivel de todo el lenguaje
      La interoperabilidad con C++ sí está tipada estáticamente, pero al volver al espacio de Clojure todo es completamente dinámico y polimórfico
      Se planea explorar un modo opcional de tipado estático como en Carp, pero no este año
    • Como implementa Clojure, supongo firmemente que no tendrá tipado estático
  • Al principio pensé que era sobre una persona llamada “Jank Lang” que había encontrado alpha de inversión