Publication de la version alpha de Jank Lang
(github.com/jank-lang)- Un langage de programmation qui combine la syntaxe de Clojure et les performances natives basées sur LLVM, avec une interopérabilité fluide avec C++
- Il conserve les caractéristiques fonctionnelles et orientées valeur de Clojure, tout en utilisant LLVM comme environnement hôte à la place de la JVM
- Toutes les structures de données sont persistantes et immuables (persistent & immutable), avec une intégration directe possible avec la bibliothèque standard C++
- Actuellement au stade alpha (Alpha), avec une documentation officielle et des exemples disponibles dans le jank book
- Une tentative de combiner l’écosystème Clojure et les performances natives de C++, avec pour objectif de réduire la frontière entre langages fonctionnels et langages système
Présentation de jank
- jank est un langage hébergé sur LLVM fondé sur la syntaxe et la philosophie de Clojure
- Il s’appuie sur LLVM plutôt que sur la JVM et prend en charge l’interopérabilité avec C++ (interoperability)
- Il conserve les caractéristiques fonctionnelles, interactives et centrées sur les valeurs de Clojure
- Il vise une forte compatibilité avec Clojure et, de la même manière que Clojure interagit avec Java, jank s’intègre à C++
- Le développement se poursuit actuellement en version alpha, avec plus de détails dans la documentation officielle
Caractéristiques du langage
- Toutes les structures de données intégrées sont persistantes et immuables (persistent & immutable)
- Exemple :
(def george {:name "George Clooney"})
- Exemple :
- Les effets de bord (side effects) peuvent être effectués explicitement si nécessaire
- Exemple :
(defn say-hi [who] (println (str "Hi " (:name who) "!")) (assoc who :greeted? true))
- Exemple :
- Intégration directe avec la bibliothèque standard C++
- Exemple :
(cpp/std.this_thread.sleep_for (cpp/std.chrono.milliseconds ms))
- Exemple :
- Fournit diverses fonctions cœur pour le traitement fonctionnel des données
- Exemple :
(apply + (distinct [12 8 12 16 8 6])) ; => 42
- Exemple :
Développement et documentation
- Documentation officielle : jank book
- Le projet est basé sur LLVM 22 et compatible avec les standards C++ récents
- Prend en charge la compilation AOT, le profiling du GC et les options de build CMake
- Inclut une configuration pour un environnement Nix et des builds CI automatisés
Communauté et soutien
- Le projet peut être soutenu via GitHub Sponsors
- Entreprises et particuliers soutenant le projet : Clojure Together, nubank, multiply.co, modulr-software, etc.
- Canaux communautaires : Slack (Clojurians), Twitter
Présentations et introductions associées
- Vidéo de présentation de Clojure Conj 2023
- Présentation du langage dans The REPL Interview et Compiler Spotlight
- Vidéo YouTube: Language Introduction disponible
Résumé :
jank est un langage qui transpose la philosophie fonctionnelle de Clojure vers un environnement natif LLVM et C++, dans le but de combiner la productivité de Clojure et les performances de C++. Encore au stade alpha, il propose déjà une nouvelle expérience de développement unifiée pour les développeurs Clojure comme pour les programmeurs système.
1 commentaires
Commentaires sur Hacker News
Pour ce qui concerne l’alpha de jank, il vaudrait mieux se référer au livre officiel
Ce n’est pas encore tout à fait prêt pour une annonce complète, mais je suis ravi de voir que les gens s’y intéressent
Il ne manque plus que l’intégration de quelques fonctionnalités du compilateur pour que le projet soit suffisamment prêt afin de suivre le livre et d’essayer jank soi-même
J’y ai repéré quelques fautes de grammaire, et je me demande s’il est possible d’envoyer une PR sur la section
book, ou s’il vaut mieux faire un retour autrement pour préserver le style de l’auteurjank est un dialecte de Clojure, qui est lui-même un dialecte de Lisp
Il est centré sur le fonctionnel, mais prend aussi en charge l’état mutable et les effets de bord
Toutes les structures de données sont immuables par défaut, et comme Clojure il fournit des mécanismes de modification sûrs qui facilitent la concurrence
Il permet aussi une intégration poussée avec C++, au point de pouvoir définir à l’exécution de nouveaux types, fonctions et templates C++
Grâce à la compilation JIT via Clang et LLVM, il est facile d’accéder aux bibliothèques C/C++
Pour plus de détails, voir le livre officiel
J’aime Clojure, mais l’existence d’une cible native est attrayante
Je me demande à quelle vitesse vont la compilation et la recompilation dans jank
Je me demande à quel point le développement de jank va suivre de près Clojure
Est-ce que l’idée est de rester aussi identique que possible, comme cljs, ou bien d’en diverger un jour ?
J’ai déjà créé un langage similaire à Clojure à environ 90 %, mais je ne l’ai pas nommé ainsi parce qu’il était difficile de garantir une compatibilité totale
jank ressemble à un drop-in replacement, et ça a l’air très bien
Il y a une collaboration avec l’équipe Clojure et avec les développeurs d’autres dialectes, notamment en pilotant la cross-dialect clojure-test-suite
Clojure JVM, ClojureScript, Clojure CLR, babashka, Basilisp et jank sont déjà pris en charge ou en cours de prise en charge
Cela dit, un mode optionnel inspiré de Carp sera aussi ajouté, tout en conservant la compatibilité par défaut
Pendant un instant, j’ai cru qu’il s’agissait non pas de jank mais de Jack Lang (l’homme politique français)
Livre à consulter aussi : https://book.jank-lang.org/
Je suis le blog de jank depuis un an, donc félicitations pour la sortie en alpha
En tant qu’utilisateur d’Emacs, je me demande où en est le support des outils de développement comme CIDER
J’ai aussi repéré une coquille dans le lien de la section Welcome — il faut corriger “foreward” en “foreword”
On peut le voir dans try-jank
La progression est ralentie à cause d’un bug de Clang, mais c’est une tâche hautement prioritaire
La coquille dans le lien a déjà été corrigée
Je me demande si jank peut interopérer avec une base de code Rust
On peut le relier via l’ABI C ou via des mécanismes d’interopérabilité C++/Rust
Je me demande s’il inclut un système de types statique
Mais le développeur a mentionné son intention d’ajouter un système de types progressif¹
L’idée serait que certaines parties restent entièrement dynamiques et basées sur le GC, tandis que d’autres seraient plus contrôlées et optimisées
¹ Article de blog connexe
L’interop avec C++ est statiquement typée, mais dès qu’on revient dans l’espace Clojure, tout redevient complètement dynamique et polymorphe
Un mode de typage statique optionnel, à la Carp, sera exploré, mais pas cette année
Au début, j’ai cru que c’était l’histoire d’une personne nommée “Jank Lang” qui avait trouvé de l’alpha pour investir