1 Punkte von GN⁺ 2026-01-04 | 1 Kommentare | Auf WhatsApp teilen
  • Eine Programmiersprache, die Clojure-Syntax und LLVM-basierte native Performance kombiniert und nahtlose Interoperabilität mit C++ bietet
  • Behält die funktionalen und wertorientierten Eigenschaften von Clojure bei, nutzt aber LLVM als Host-Umgebung statt der JVM
  • Alle Datenstrukturen sind unveränderlich (persistent & immutable) und können direkt mit der C++-Standardbibliothek zusammenarbeiten
  • Derzeit in der Alpha-Phase; offizielle Dokumentation und Beispiele sind im jank book verfügbar
  • Ein Versuch, das Clojure-Ökosystem mit nativer C++-Performance zu verbinden, mit der Bedeutung, die Grenze zwischen funktionalen und Systemsprachen zu verkleinern

Überblick über jank

  • jank ist eine LLVM-gehostete Sprache, die auf Syntax und Philosophie von Clojure basiert
    • Sie basiert auf LLVM statt auf der JVM und unterstützt Interoperabilität mit C++
    • Sie bewahrt die funktionalen, interaktiven und wertzentrierten Eigenschaften von Clojure
  • Ziel ist eine hohe Kompatibilität mit Clojure; so wie Clojure mit Java interagiert, integriert sich jank in C++
  • Derzeit wird es als Alpha-Version entwickelt; Details finden sich in der offiziellen Dokumentation

Sprachmerkmale

  • Alle eingebauten Datenstrukturen sind unveränderlich (persistent & immutable)
    • Beispiel: (def george {:name "George Clooney"})
    Anzeige
  • Side Effects können bei Bedarf explizit ausgeführt werden
    • Beispiel: (defn say-hi [who] (println (str "Hi " (:name who) "!")) (assoc who :greeted? true))
  • Direkte Anbindung an die C++-Standardbibliothek möglich
    • Beispiel: (cpp/std.this_thread.sleep_for (cpp/std.chrono.milliseconds ms))
  • Bietet verschiedene Core-Funktionen für funktionale Datenverarbeitung
    • Beispiel: (apply + (distinct [12 8 12 16 8 6])) ; => 42
Anzeige

Entwicklung und Dokumentation

  • Offizielle Dokumentation: jank book
  • Das Projekt basiert auf LLVM 22 und ist mit aktuellen C++-Standards kompatibel
  • Unterstützt AOT-Kompilierung, GC-Profiling und CMake-Build-Optionen
  • Einschließlich Einrichtung für Nix-Umgebungen und automatisierte CI-Builds

Community und Sponsoring

  • Das Projekt kann über GitHub Sponsors unterstützt werden
  • Unterstützende Unternehmen und Einzelpersonen: Clojure Together, nubank, multiply.co, modulr-software u. a.
  • Community-Kanäle: Slack (Clojurians), Twitter

Verwandte Vorträge und Einführungen

  • Vortragsvideo von der Clojure Conj 2023
  • Sprachvorstellung in The REPL Interview und Compiler Spotlight
  • YouTube: Language Introduction-Video verfügbar

Zusammenfassung:
jank ist eine Sprache, die die funktionale Philosophie von Clojure in eine LLVM- und C++-native Umgebung überträgt und damit versucht, die Produktivität von Clojure mit der Performance von C++ zu verbinden. Sie befindet sich derzeit in der Alpha-Phase, bietet aber bereits eine neue integrierte Entwicklungserfahrung für Clojure-Entwickler und Systemprogrammierer.

1 Kommentare

 
GN⁺ 2026-01-04
Hacker-News-Kommentare
  • Für Inhalte rund um jank alpha sollte man einen Blick in das offizielle Buch werfen
    Es ist zwar noch nicht ganz bereit für eine vollständige Ankündigung, aber es freut mich, dass die Leute Interesse zeigen
    Wenn nur noch ein paar Compiler-Features gemergt werden, ist es so weit, dass man dem Buch folgen und jank selbst ausprobieren kann

    • Ich finde jank sehr spannend und lese gerade das eben verlinkte Buch
      Mir sind ein paar Grammatikfehler aufgefallen, und ich frage mich, ob ich für den Abschnitt book einen PR schicken kann oder ob Feedback auf eine andere Weise besser wäre, damit der Stil des Autors erhalten bleibt
    • An alle Beteiligten Danke und großes Lob
  • jank ist ein Dialekt von Clojure, und Clojure selbst ist ebenfalls ein Dialekt von Lisp
    Es ist funktional ausgerichtet, unterstützt aber auch veränderlichen Zustand und Seiteneffekte
    Alle Datenstrukturen sind standardmäßig unveränderlich und bieten wie Clojure sichere Mechanismen für Änderungen, wodurch sich Nebenläufigkeit leicht handhaben lässt
    Außerdem ist eine tiefe Integration mit C++ möglich, sodass sich zur Laufzeit neue C++-Typen, Funktionen und Templates definieren lassen
    Durch JIT-Kompilierung mit Clang und LLVM kann man leicht auf C/C++-Bibliotheken zugreifen
    Mehr dazu im offiziellen Buch

    • Als ich früher C++ genutzt habe, war der Kompilierungsprozess extrem schmerzhaft
      Ich mag Clojure, aber ein natives Target ist sehr attraktiv
      Mich würde interessieren, wie schnell Kompilierung und Re-Kompilierung bei jank sind
  • Ich frage mich, wie eng die jank-Entwicklung Clojure folgen wird
    Ist geplant, es wie cljs so weit wie möglich identisch zu halten, oder könnte es sich irgendwann abspalten?
    Ich habe früher einmal eine Sprache gebaut, die zu etwa 90 % wie Clojure war, aber ich konnte keine vollständige Kompatibilität garantieren und habe ihr deshalb nicht diesen Namen gegeben
    jank wirkt wie ein Drop-in Replacement, was ziemlich cool aussieht

    • jank ist Clojure und wird die Upstream-Entwicklung von Clojure nachverfolgen
      Wir arbeiten mit dem Clojure-Team und anderen Dialekt-Entwicklern zusammen und treiben dafür die cross-dialect clojure-test-suite voran
      Clojure JVM, ClojureScript, Clojure CLR, babashka, Basilisp und jank werden bereits unterstützt oder daran wird gearbeitet
      Zusätzlich soll es aber auch einen von Carp inspirierten optionalen Modus geben, wobei die Standardkompatibilität erhalten bleibt
  • Einen Moment lang dachte ich, es gehe nicht um jank, sondern um Jack Lang (den französischen Politiker)

    • Das dachte ich auch zuerst
  • Buch zum Mitlesen: https://book.jank-lang.org/

  • Ich verfolge den jank-Blog seit einem Jahr und Glückwunsch zum Alpha-Release
    Als Emacs-Nutzer würde mich interessieren, wie es um die Unterstützung für Entwicklungswerkzeuge wie CIDER steht
    Außerdem habe ich einen Tippfehler im Welcome-Abschnitt entdeckt — statt „foreward“ müsste dort „foreword“ stehen

    • Der nREPL-Server funktioniert, wurde aber noch nicht in das jank-Repository gemergt
      Man kann ihn in try-jank sehen
      Wegen eines Clang-Bugs verzögert sich der Fortschritt, aber es ist eine Aufgabe mit hoher Priorität
      Den Tippfehler im Link habe ich bereits korrigiert
  • Ich frage mich, ob sich jank mit einer Rust-Codebasis integrieren lässt

    • Das geht wie bei einem normalen C++-Projekt
      Man kann es über die C-ABI oder C++/Rust-Interop-Mechanismen anbinden
    • Ja, klar
  • Ich frage mich, ob ein statisches Typsystem enthalten ist

    • Da es ein Dialekt von Clojure ist, handelt es sich grundsätzlich um eine dynamisch typisierte Sprache
      Der Entwickler hat aber erwähnt, dass er ein graduelles Typsystem¹ ergänzen möchte
      Die Vision ist, dass manches vollständig dynamisch und GC-basiert bleibt, während anderes kontrollierter und stärker optimiert laufen kann
      ¹ Zugehöriger Blogpost
    • Es gibt kein statisches Typsystem auf Ebene der Gesamtsprache
      Das Interop mit C++ ist statisch typisiert, aber sobald man in den Clojure-Bereich zurückkehrt, ist alles vollständig dynamisch und polymorph
      Ein optionaler statischer Typmodus wie bei Carp soll untersucht werden, aber nicht dieses Jahr
    • Da hier Clojure implementiert wird, vermute ich stark, dass es keine statischen Typen gibt
  • Zuerst dachte ich, es gehe darum, dass jemand namens „Jank Lang“ Investment-Alpha gefunden hat