Alpha-Version von Jank veröffentlicht
(github.com/jank-lang)- 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"})
- Beispiel:
- Side Effects können bei Bedarf explizit ausgeführt werden
- Beispiel:
(defn say-hi [who] (println (str "Hi " (:name who) "!")) (assoc who :greeted? true))
- Beispiel:
- Direkte Anbindung an die C++-Standardbibliothek möglich
- Beispiel:
(cpp/std.this_thread.sleep_for (cpp/std.chrono.milliseconds ms))
- Beispiel:
- Bietet verschiedene Core-Funktionen für funktionale Datenverarbeitung
- Beispiel:
(apply + (distinct [12 8 12 16 8 6])) ; => 42
- Beispiel:
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
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
Mir sind ein paar Grammatikfehler aufgefallen, und ich frage mich, ob ich für den Abschnitt
bookeinen PR schicken kann oder ob Feedback auf eine andere Weise besser wäre, damit der Stil des Autors erhalten bleibtjank 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
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
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)
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
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
Man kann es über die C-ABI oder C++/Rust-Interop-Mechanismen anbinden
Ich frage mich, ob ein statisches Typsystem enthalten ist
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
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
Zuerst dachte ich, es gehe darum, dass jemand namens „Jank Lang“ Investment-Alpha gefunden hat