jank is een native Clojure-dialect dat ontworpen is voor naadloze integratie met C++. In tegenstelling tot standaard Clojure, dat op Java leunt, biedt jank directe toegang tot het C++-typesysteem, inclusief templates, RAII en virtuele functies, zonder dat er boilerplate-code nodig is.
De belangrijkste technische kenmerken zijn:
- JIT-compiler: Maakt gebruik van een Clang-gebaseerde JIT-runtime voor interactieve, REPL-gestuurde ontwikkeling.
- Tooling: Projectbeheer is gebaseerd op Leiningen, met een native bouwsysteem dat is geïnspireerd op Cargo, waardoor het beheren van C/C++-afhankelijkheden eenvoudig is.
- Prestaties: De taal compileert naar C++ en ondersteunt AOT-compilatie voor het genereren van compacte binaire bestanden met een onmiddellijke opstarttijd.
Vanwege de combinatie van functionele data-structuren en de rauwe prestaties van C++, is jank bijzonder geschikt voor game-ontwikkeling, waarbij ontwikkelaars kunnen schakelen tussen flexibiliteit en maximale snelheid.
jank programmeertaal - Clojure/LLVM/C++
jank is een robuust Clojure-dialect dat interactieve, REPL-gestuurde ontwikkeling biedt, aangedreven door een Clang-gebaseerde C++ JIT-compiler.
(ns my.app.filesystem
(:include "boost/filesystem.hpp")
(:refer-global :rename {boost.filesystem.file_size file-size}))
(defn file-info [file-path]
(try
(let [bytes (file-size (cpp/cast std.string file-path))]
{:path file-path
:size bytes})
(catch boost.filesystem.filesystem_error e
{:path file-path
:error (.what e)})))
(file-info "/etc/passwd")
; {:path "/etc/passwd", :size 4025}
(file-info "/root/.bash_history")
; {:path "/root/.bash_history"
; :error "boost::filesystem::file_size: Permission denied [system:13]: \"/root/.bash_history\""}
jank bouwt voort op Clojure
Behoud je bestaande code en ontsluit de native wereld.
jank is Clojure
jank is een volledig Clojure-dialect, maar met C++-interop in plaats van Java-interop. Er is een :jank reader conditional beschikbaar voor situaties waarin dit nodig is.
jank is C++
jank kan elke C++-broncode includeren, koppelen aan elke C- of C++-bibliotheek en maakt gebruik van het C++-typesysteem. jank compileert zelfs naar C++.
Tooling geïnspireerd op Cargo
jank maakt gebruik van Leiningen-gebaseerd projectbeheer en beschikt over een uitgebreid native bouwsysteem. Het is eenvoudig om C- en C++-afhankelijkheden aan je project toe te voegen.
REPL en native JIT-compiler
Gebruik je favoriete nREPL-editorplugin. jank bevat een LLVM-gebaseerde JIT-runtime om C++-code on the fly te compileren.
Native afhankelijkheden eenvoudig gemaakt
jank brengt een Cargo-geïnspireerde gebruikerservaring naar C++ en Clojure.
Eenvoudig projectbeheer
Het native bouwsysteem van jank kan je geïnstalleerde native afhankelijkheden vinden of ze vanuit de bron bouwen. Het toevoegen van een nieuwe afhankelijkheid is een wijziging in één regel.
(defproject imgui+glfw "0.1-SNAPSHOT"
:dependencies [[org.jank-lang.commons/imgui-glfw-sys "2026.06-6"]
[org.jank-lang.commons/imgui-opengl2-sys "2026.06-6"]
[org.jank-lang.commons/gl-sys "2026.06-1"]]
:plugins [[org.jank-lang/lein-jank "2026.06-2"]]
:middleware [leiningen.jank/middleware]
:main imgui+glfw.main
:profiles {:base {:jank {:target-dir "target/debug"
:optimization-level 0}}
:release {:jank {:target-dir "target/release"
:optimization-level 3}}})
jank is uitstekend voor game-ontwikkeling
jank brengt functionele, onveranderlijke data en REPL-gestuurde ontwikkeling naar je game-development workflow. Met jank kun je overschakelen naar C++ wanneer je extra prestaties wilt. Er zijn geen bridges, geen functie/type-registraties, geen marshalling en geen callbacks nodig.
(ns imgui+glfw.main
(:include "GLFW/glfw3.h"
"imgui.h" "imgui_impl_glfw.h" "imgui_impl_opengl2.h"))
(defn -main []
(cpp/glfwInit)
(let [window* (cpp/glfwCreateWindow 400 300
"jank"
cpp/nullptr cpp/nullptr)]
(cpp/glfwMakeContextCurrent window*)
(cpp/ImGui.CreateContext)
(cpp/ImGui_ImplGlfw_InitForOpenGL window* true)
(cpp/ImGui_ImplOpenGL2_Init)
(while (cpp/! (cpp/glfwWindowShouldClose window*))
(cpp/glfwPollEvents)
(cpp/ImGui_ImplOpenGL2_NewFrame)
(cpp/ImGui_ImplGlfw_NewFrame)
(cpp/ImGui.NewFrame)
(when (cpp/ImGui.Begin "jank")
(cpp/ImGui.Text "Hello, jank and imgui!"))
(cpp/ImGui.End)
(cpp/ImGui.Render)
(cpp/ImGui_ImplOpenGL2_RenderDrawData (cpp/ImGui.GetDrawData))
(cpp/glfwSwapBuffers window*))
(cpp/glfwTerminate)))
Uitstekende AOT-compilatie
Experimenteer zoveel je wilt, maar genereer een compact binair bestand wanneer je er klaar voor bent. De opstarttijd is onmiddellijk.
jank programmeertaal - Clojure/LLVM/C++
jank is een robuust Clojure-dialect dat interactieve, REPL-gestuurde ontwikkeling biedt, aangedreven door een Clang-gebaseerde C++ JIT-compiler.
(ns my.app.filesystem
(:include "boost/filesystem.hpp")
(:refer-global :rename {boost.filesystem.file_size file-size}))
(defn file-info [file-path]
(try
(let [bytes (file-size (cpp/cast std.string file-path))]
{:path file-path
:size bytes})
(catch boost.filesystem.filesystem_error e
{:path file-path
:error (.what e)})))
(file-info "/etc/passwd")
; {:path "/etc/passwd", :size 4025}
(file-info "/root/.bash_history")
; {:path "/root/.bash_history"
; :error "boost::filesystem::file_size: Permission denied [system:13]: \"/root/.bash_history\""}
jank bouwt voort op Clojure
Behoud je bestaande code en ontsluit de native wereld.
jank is Clojure
jank is een volledig Clojure-dialect, maar met C++-interop in plaats van Java-interop. Er is een :jank reader conditional beschikbaar voor situaties waarin dit nodig is.
jank is C++
jank kan elke C++-broncode includeren, koppelen aan elke C- of C++-bibliotheek en maakt gebruik van het C++-typesysteem. jank compileert zelfs naar C++.
Tooling geïnspireerd op Cargo
jank maakt gebruik van Leiningen-gebaseerd projectbeheer en beschikt over een uitgebreid native bouwsysteem. Het is eenvoudig om C- en C++-afhankelijkheden aan je project toe te voegen.
REPL en native JIT-compiler
Gebruik je favoriete nREPL-editorplugin. jank bevat een LLVM-gebaseerde JIT-runtime om C++-code on the fly te compileren.
Native afhankelijkheden eenvoudig gemaakt
jank brengt een Cargo-geïnspireerde gebruikerservaring naar C++ en Clojure.
Eenvoudig projectbeheer
Het native bouwsysteem van jank kan je geïnstalleerde native afhankelijkheden vinden of ze vanuit de bron bouwen. Het toevoegen van een nieuwe afhankelijkheid is een wijziging in één regel.
(defproject imgui+glfw "0.1-SNAPSHOT"
:dependencies [[org.jank-lang.commons/imgui-glfw-sys "2026.06-6"]
[org.jank-lang.commons/imgui-opengl2-sys "2026.06-6"]
[org.jank-lang.commons/gl-sys "2026.06-1"]]
:plugins [[org.jank-lang/lein-jank "2026.06-2"]]
:middleware [leiningen.jank/middleware]
:main imgui+glfw.main
:profiles {:base {:jank {:target-dir "target/debug"
:optimization-level 0}}
:release {:jank {:target-dir "target/release"
:optimization-level 3}}})
jank is uitstekend voor game-ontwikkeling
jank brengt functionele, onveranderlijke data en REPL-gestuurde ontwikkeling naar je game-development workflow. Met jank kun je overschakelen naar C++ wanneer je extra prestaties wilt. Er zijn geen bridges, geen functie/type-registraties, geen marshalling en geen callbacks nodig.
(ns imgui+glfw.main
(:include "GLFW/glfw3.h"
"imgui.h" "imgui_impl_glfw.h" "imgui_impl_opengl2.h"))
(defn -main []
(cpp/glfwInit)
(let [window* (cpp/glfwCreateWindow 400 300
"jank"
cpp/nullptr cpp/nullptr)]
(cpp/glfwMakeContextCurrent window*)
(cpp/ImGui.CreateContext)
(cpp/ImGui_ImplGlfw_InitForOpenGL window* true)
(cpp/ImGui_ImplOpenGL2_Init)
(while (cpp/! (cpp/glfwWindowShouldClose window*))
(cpp/glfwPollEvents)
(cpp/ImGui_ImplOpenGL2_NewFrame)
(cpp/ImGui_ImplGlfw_NewFrame)
(cpp/ImGui.NewFrame)
(when (cpp/ImGui.Begin "jank")
(cpp/ImGui.Text "Hello, jank and imgui!"))
(cpp/ImGui.End)
(cpp/ImGui.Render)
(cpp/ImGui_ImplOpenGL2_RenderDrawData (cpp/ImGui.GetDrawData))
(cpp/glfwSwapBuffers window*))
(cpp/glfwTerminate)))
Uitstekende AOT-compilatie
Experimenteer zoveel je wilt, maar genereer een compact binair bestand wanneer je er klaar voor bent. De opstarttijd is onmiddellijk.