Jank Lang アルファ版を公開
(github.com/jank-lang)- Clojureの文法とLLVMベースのネイティブ性能を組み合わせたプログラミング言語で、C++とのシームレスな相互運用性を提供
- Clojureの関数型・値指向の特性を維持しながら、JVMの代わりにLLVMをホスト環境として使用
- すべての**データ構造が不変(persistent & immutable)**であり、C++標準ライブラリと直接連携可能
- 現在アルファ(Alpha)段階で、公式ドキュメントとサンプルは jank book で提供
- ClojureエコシステムとC++ネイティブ性能を結びつける試みであり、関数型言語とシステム言語の境界を狭める意義を持つ
jank 概要
- jankは Clojure の文法と哲学をベースにしたLLVMホスト言語
- JVMの代わりにLLVMを基盤とし、**C++との相互運用性(interoperability)**をサポート
- Clojureの関数型・対話的・値中心の特性を維持
- Clojureとの高い互換性を目指しており、ClojureがJavaと相互作用するように、jankはC++と統合
- 現在アルファ版として開発中で、詳細は 公式ドキュメント で確認可能
言語の特徴
- すべての組み込みデータ構造は不変(persistent & immutable)
- 例:
(def george {:name "George Clooney"})
- 例:
- **副作用(side effect)**は必要に応じて明示的に実行可能
- 例:
(defn say-hi [who] (println (str "Hi " (:name who) "!")) (assoc who :greeted? true))
- 例:
- C++標準ライブラリと直接連携可能
- 例:
(cpp/std.this_thread.sleep_for (cpp/std.chrono.milliseconds ms))
- 例:
- 関数型データ処理のための多様なコア関数を提供
- 例:
(apply + (distinct [12 8 12 16 8 6])) ; => 42
- 例:
開発とドキュメント
- 公式ドキュメント: jank book
- プロジェクトはLLVM 22ベースで、最新のC++標準と互換性あり
- AOTコンパイル、GCプロファイリング、CMakeビルドオプションなどをサポート
- Nix環境およびCI自動ビルド構成を含む
コミュニティと支援
- プロジェクトは GitHub Sponsors を通じて支援可能
- 支援企業および個人: Clojure Together、nubank、multiply.co、modulr-software など
- コミュニティチャンネル: Slack (Clojurians), Twitter
関連発表と紹介
- Clojure Conj 2023 の発表動画
- The REPL Interview および Compiler Spotlight で言語を紹介
- YouTube: Language Introduction 動画を提供
要約:
jankは、Clojureの関数型哲学をLLVMおよびC++ネイティブ環境へ移植した言語で、Clojureの生産性とC++の性能を組み合わせることを目指す試み。現在はアルファ段階だが、Clojure開発者とシステムプログラマの双方に新たな統合開発体験を提示している。
1件のコメント
Hacker Newsの意見
jank alpha については公式ブックサイトを参照してほしい
まだ完全に発表する準備はできていないが、人々が関心を示してくれていることが嬉しい
あといくつかコンパイラ機能をマージすれば、本を追いながら jank を実際に使ってみられる程度には準備が整っている
文法ミスがいくつか見えるのだが、
bookセクションにPR を送ってよいのか、それとも著者の文体を維持するために別の形でフィードバックしたほうがよいのか気になるjank はClojure の方言で、Clojure 自体も Lisp の方言だ
関数型中心だが、可変状態と副作用もサポートしている
すべてのデータ構造はデフォルトで不変であり、Clojure のように安全な変更メカニズムを提供して並行性を扱いやすくしている
また C++ と深く統合でき、ランタイムに新しい C++ の型、関数、テンプレートを定義できる
Clang と LLVM を使ったJIT コンパイルにより、C/C++ ライブラリへ容易にアクセスできる
詳しくは公式ブックを参照
Clojure は好きだが、ネイティブターゲットがある点が魅力的だ
jank のコンパイル/再コンパイル速度がどの程度なのか気になる
jank の開発が Clojure をどれだけ近く追従していくのか気になる
cljs のようにできるだけ同一に保つ計画なのか、それともいつか分岐するのかも知りたい
以前 90% ほど Clojure に似た言語を作ったことがあるが、完全な互換性を保証するのが難しく、Clojure と名乗らせなかった
jank はdrop-in replacementのように見えてすばらしい
Clojure チームや他の方言開発者たちと協力しており、そのためにcross-dialect clojure-test-suiteを主導している
Clojure JVM、ClojureScript、Clojure CLR、babashka、Basilisp、jank のすべてをサポートしているか、対応作業中だ
ただし Carp に着想を得たオプションのモードも追加予定で、デフォルトの互換性は維持される
一瞬、jank ではなく**Jack Lang(フランスの政治家)**の話かと勘違いした
あわせて読む本: https://book.jank-lang.org/
1年間 jank ブログを追っているが、alpha リリースおめでとう
Emacs ユーザーとして、CIDER のような開発ツールのサポート状況が気になる
それと Welcome セクションのリンクに誤字を見つけた — “foreward” ではなく “foreword” に直す必要がある
try-jankで確認できる
Clang のバグのため進行が遅れているが、優先度の高い作業だ
リンクの誤字はすでに修正した
jank がRust コードベースと連携できるのか気になる
C ABI や C++/Rust の相互運用メカニズムを通じて接続できる
静的型システムが含まれているのか気になる
ただし開発者は漸進的型システム¹を追加する計画に言及していた
一部は完全に動的で GC ベース、一部はより制御され最適化された形で動かせるようにしたいという構想だ
¹ 関連ブログ記事
C++ との interop は静的に型付けされるが、Clojure の領域に戻ると完全に動的かつ多相的だ
Carp のようなオプションの静的型付けモードを探る予定だが、今年ではない
最初は「Jank Lang」という人が投資アルファを見つけたという話かと思った