直接呼叫 C++ 標頭檔與函式庫

Jank 被描述為一種完整的 Clojure 方言,但將原本的 Java 互動機制替換為 C++ 互動。開發者可以在程式碼中直接使用 include 指令引入 Boost 等 C++ 標頭檔,並透過 cpp/cast 進行型別轉換。

根據官方範例,Jank 能夠直接呼叫 C++ 函式並處理例外狀況。例如在檔案系統操作中,若遇到權限錯誤,程式碼可直接捕捉 boost.filesystem.filesystem_error 並提取錯誤訊息,無需額外定義橋接層。

基於 Clang 與 LLVM 的即時編譯架構

Jank 使用基於 Clang 的 C++ JIT 編譯器來支援互動式 REPL 開發,並內建 LLVM 基礎的 JIT 執行環境以即時編譯 C++ 程式碼。這意味著 Jank 最終會將 Clojure 程式碼轉換為 C++ 進行編譯與執行。

專案管理採用 Leiningen 架構,並配備原生建置系統。該系統可自動尋找已安裝的原生依賴項或從原始碼建置,新增 C/C++ 依賴項只需修改一行設定。

遊戲開發與高效能場景的應用

官方強調 Jank 適用於需要高效能的遊戲開發工作流,允許開發者在需要時直接存取 C++ 資源。範例展示了如何透過 Jank 呼叫 GLFW 和 ImGui 函式庫來建立視窗並渲染圖形介面,過程中無需進行函式註冊或資料序列化(marshalling)。

這種設計旨在結合 Clojure 的不可變資料結構與 REPL 開發體驗,同時保留 C++ 的原生效能。開發者可直接在 Jank 中呼叫 cpp/glfwCreateWindow 等底層 API。

社群對現有 Lisp-C++ 整合方案的比較

Jank 作者 Jeaye 指出,與另一種 Common Lisp 的 C++ 實作 Clasp 不同,Jank 不需要橋接 API 來註冊 C++ 函式、型別或值。他聲稱 Jank 能無縫處理模板實例化、重載解析及虛擬函式呼叫。

社群討論中,有使用者提醒 Common Lisp 透過 Clasp 實作已具備多年的 C++ 整合能力,並質疑 Jank 與 Clasp 的差異。另有評論建議應更明確說明 Jank 是將程式碼轉換(transpile)為 C++,而非僅是在 C++ 之上運作,以避免混淆。