ジャンク・ラング・ヒット・アルファ
104日前原文(github.com)
概要
- 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や言語紹介、コンパイラ解説などのリソースが充実