1 points par GN⁺ 2026-01-04 | 1 commentaires | Partager sur WhatsApp
  • 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"})
  • 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))
  • Intégration directe avec la bibliothèque standard C++
    • Exemple : (cpp/std.this_thread.sleep_for (cpp/std.chrono.milliseconds ms))
  • Fournit diverses fonctions cœur pour le traitement fonctionnel des données
    • Exemple : (apply + (distinct [12 8 12 16 8 6])) ; => 42

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

 
GN⁺ 2026-01-04
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

    • jank m’intéresse beaucoup, donc je lis en ce moment même le livre lié juste au-dessus
      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’auteur
    • Merci et bravo à toutes les personnes qui ont participé
  • jank 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

    • À l’époque où j’utilisais C++, le processus de compilation était vraiment pénible
      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

    • jank est Clojure, et il est prévu de suivre le développement de Clojure en amont
      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)

    • J’ai eu exactement la même confusion
  • 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”

    • Le serveur nREPL fonctionne, mais il n’a pas encore été fusionné dans le dépôt jank
      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

    • Oui, comme avec n’importe quel projet C++ classique
      On peut le relier via l’ABI C ou via des mécanismes d’interopérabilité C++/Rust
    • Oui, bien sûr
  • Je me demande s’il inclut un système de types statique

    • Comme c’est un dialecte de Clojure, c’est fondamentalement un langage à typage dynamique
      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
    • Il n’y a pas de typage statique à l’échelle de tout le langage
      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
    • Comme il s’agit d’une implémentation de Clojure, je suppose fortement qu’il n’y a pas de typage statique
  • 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