Se publica la versión alfa de Jank Lang
(github.com/jank-lang)- 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"})
- Ejemplo:
- Los efectos secundarios pueden realizarse explícitamente cuando sea necesario
- Ejemplo:
(defn say-hi [who] (println (str "Hi " (:name who) "!")) (assoc who :greeted? true))
- Ejemplo:
- Puede integrarse directamente con la biblioteca estándar de C++
- Ejemplo:
(cpp/std.this_thread.sleep_for (cpp/std.chrono.milliseconds ms))
- Ejemplo:
- Ofrece varias funciones core para el procesamiento funcional de datos
- Ejemplo:
(apply + (distinct [12 8 12 16 8 6])) ; => 42
- Ejemplo:
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
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
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 autorjank 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
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
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)
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”
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
Puede conectarse a través del ABI de C o de mecanismos de interoperabilidad C++/Rust
Me pregunto si incluye un sistema de tipos estático
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
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
Al principio pensé que era sobre una persona llamada “Jank Lang” que había encontrado alpha de inversión