Jank ist ein nativer Clojure-Dialekt, der direkt auf C++ aufbaut und eine nahtlose Interoperabilität ohne Boilerplate-Code ermöglicht. Das Projekt verbindet die Funktionen von Clojure mit einem Clang-basierten C++-JIT-Compiler und LLVM, wodurch C++-Header direkt eingebunden und das C++-Typsystem genutzt werden kann. Durch ein Cargo-inspiriertes Build-System und Leiningen-Projektmanagement eignet sich Jank besonders für rechenintensive Anwendungsbereiche wie die Spieleentwicklung.
Wichtigste Punkte
C++-Interoperabilität: Jank unterstützt Templates, virtuelle Funktionen, Exceptions, Overload Resolution und RAII nativ und ohne zusätzliche Bindings oder Marshalling.
LLVM- und Clang-Integration: Ein integrierter JIT-Compiler auf Basis von Clang verarbeitet C++-Quellcode zur Laufzeit und ermöglicht interaktive REPL-gesteuerte Entwicklung.
Paketverwaltung: Das Build-System lehnt sich an Cargo an und verwaltet native C- und C++-Abhängigkeiten über Leiningen-basierte Projektkonfigurationen.
Anwendungsbereich Spieleentwicklung: Jank bringt unveränderliche, funktionale Datenstrukturen und REPL-Workflows in native Umgebungen, was am Beispiel von ImGui und GLFW demonstriert wird.
Kompilierung: Neben der interaktiven Ausführung bietet Jank Ahead-Of-Time-Kompilierung (AOT) zur Erstellung kompakter Binärdateien mit sofortigen Startzeiten.
Diskussions-Highlights
Agenten-Programmierung: Mehrere Kommentatoren heben hervor, dass die Kombination aus REPL-gesteuerter Entwicklung und persistenten, unveränderlichen Datenstrukturen ideal für autonome Software-Agenten ist, da keine ständigen Neustarts oder Neukompilierungen erforderlich sind.
Vergleich mit anderen Dialekten: Teilnehmer vergleichen Jank mit Janet (einem leichtgewichtigen, eingebetteten Skriptsprachen-Dialekt) sowie mit Clasp (einer Common-Lisp-C++-Integration). Im Gegensatz zu Janet ist Jank jedoch ein vollständiger Clojure-Dialekt mit nativer C++-Kompilierung.
Klammer-Problem (S-Expressionen): Es wird intensiv diskutiert, ob moderne LLMs mit der Syntax von Lisp/Clojure und dem Schließen von Klammern überfordert sind. Mehrere Nutzer merken an, dass aktuelle SOTA-Modelle und MCP-Tools (Model Context Protocol) dieses Problem vollständig gelöst haben und fehlerfreie Edits ermöglichen.
Architektur und Tooling: Es wird klargestellt, dass Jank im Gegensatz zur JVM direkt Clang/LLVM einbindet. Einige Entwickler nutzen ähnliche Stacks mit Werkzeugen wie Maki oder speziellen Agenten-Skills, um Nischensprachen zuverlässig von KI steuern zu lassen.
Glossar
Clojure: Ein moderner, funktionaler Dialekt der Programmiersprache Lisp, der für die Java Virtual Machine (JVM) entwickelt wurde und auf unveränderliche Datenstrukturen setzt.
C++: Eine kompilierte, statisch typisierte, objektorientierte Programmiersprache, die für Systemprogrammierung und Hochleistungshandhabung bekannt ist.
JIT-Compiler (Just-In-Time Compiler): Ein System, das Code während der Programmausführung (zur Laufzeit) in Maschinencode übersetzt, um die Leistung zu steigern.
LLVM: Ein Compiler-Infrastrukturprojekt, das als universelles Backend zur Optimierung und Generierung von Maschinencode für verschiedene Architekturen dient.
Clang: Ein C-Sprach-Frontend für die LLVM-Compiler-Infrastruktur, das C, C++ und Objective-C analysiert und kompiliert.
REPL (Read-Eval-Print Loop): Eine interaktive Programmierumgebung, die Benutzereingaben liest, auswertet, das Ergebnis ausgibt und auf die nächste Eingabe wartet.
RAII (Resource Acquisition Is Initialization): Ein C++-Programmierkonzept, bei dem die Ressourcenverwaltung (wie Speicher oder Dateihandles) an die Lebensdauer von Objekten gebunden ist.
nREPL: Ein netzwerkfähiges REPL-Protokoll für Clojure, das die Fernsteuerung und IDE-Integration ermöglicht.
AOT (Ahead-Of-Time Kompilierung): Die Übersetzung von Quellcode in Maschinencode vor der Programmausführung, im Gegensatz zur Laufzeitkompilierung.
ImGui: Eine grafische Benutzeroberflächenbibliothek (Immediate Mode GUI) für C++, die häufig in der Spieleentwicklung für Tools und Debugging eingesetzt wird.
GLFW: Eine freie C-Bibliothek zur Erstellung von OpenGL-Fenstern, Contexts und zur Verarbeitung von Eingaben.
MCP (Model Context Protocol): Ein Protokoll, das es KI-Modellen ermöglicht, sicher auf lokale Tools, Editoren und Dateisysteme zuzugreifen.