概要
- jank はClojureの方言で、LLVMとC++インターフェースを持つ
- Clojure の特徴を維持しつつ、C++のパフォーマンスを活用
- JVMではなく LLVM をホストとし、C++とシームレスに連携
- 永続的かつイミュータブルなデータ構造を採用
- 現在は アルファ版 として開発中
jankとは何か
- jank は、Clojureのインタラクティブで関数型、値指向な性質を受け継ぐプログラミング言語
- LLVM をホストとし、 C++ との相互運用性を重視
- Clojureとの高い互換性を目指す設計思想
- Clojureが JVM とJavaの連携を前提とするのに対し、jankは LLVM とC++に重点
- 汎用プログラミング言語としての用途
jankの特徴
-
コメントは ; で記述
-
全ての組み込みデータ構造が 永続的かつイミュータブル
-
データはデフォルトで不変だが、副作用も柔軟に扱える
-
関数定義 や データ操作 のための豊富なコア関数群
-
C++ とのシームレスな相互運用が可能
- 例:C++のchronoやthis_threadなどの標準ライブラリとの連携
jankの基本例
- 標準出力:
(println "meow") - データ定義:
(def george {:name "George Clooney"}) - 関数定義と副作用:
(defn say-hi [who] (println (str "Hi " (:name who) "!")) (assoc who :greeted? true)) - イミュータブルなデータ操作例:
(apply + (distinct [12 8 12 16 8 6])) ; => 42 - C++連携例:
(defn sleep [ms] (let [duration (cpp/std.chrono.milliseconds ms)] (cpp/std.this_thread.sleep_for duration)))
開発状況とドキュメント
- アルファ版 として積極開発中
- 詳細なドキュメントは jank book にて公開
- オープンソースコミュニティによる活発な開発体制
- スポンサーシップによるプロジェクト支援体制
関連情報
- Clojure Conj 2023 などでの紹介実績
- REPL や 言語紹介、 コンパイラ解説 などのリソースが充実