1 ポイント 投稿者 GN⁺ 2026-01-04 | 1件のコメント | WhatsAppで共有
  • Clojureの文法とLLVMベースのネイティブ性能を組み合わせたプログラミング言語で、C++とのシームレスな相互運用性を提供
  • Clojureの関数型・値指向の特性を維持しながら、JVMの代わりにLLVMをホスト環境として使用
  • すべての**データ構造が不変(persistent & immutable)**であり、C++標準ライブラリと直接連携可能
  • 現在アルファ(Alpha)段階で、公式ドキュメントとサンプルは jank book で提供
  • ClojureエコシステムとC++ネイティブ性能を結びつける試みであり、関数型言語とシステム言語の境界を狭める意義を持つ

jank 概要

  • jankClojure の文法と哲学をベースにした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 Togethernubankmultiply.comodulr-software など
  • コミュニティチャンネル: Slack (Clojurians), Twitter

関連発表と紹介

  • Clojure Conj 2023 の発表動画
  • The REPL Interview および Compiler Spotlight で言語を紹介
  • YouTube: Language Introduction 動画を提供

要約:
jankは、Clojureの関数型哲学をLLVMおよびC++ネイティブ環境へ移植した言語で、Clojureの生産性とC++の性能を組み合わせることを目指す試み。現在はアルファ段階だが、Clojure開発者とシステムプログラマの双方に新たな統合開発体験を提示している。

1件のコメント

 
GN⁺ 2026-01-04
Hacker Newsの意見
  • jank alpha については公式ブックサイトを参照してほしい
    まだ完全に発表する準備はできていないが、人々が関心を示してくれていることが嬉しい
    あといくつかコンパイラ機能をマージすれば、本を追いながら jank を実際に使ってみられる程度には準備が整っている

    • jank にとても興味があって、さっきリンクされた本を読んでいる
      文法ミスがいくつか見えるのだが、book セクションにPR を送ってよいのか、それとも著者の文体を維持するために別の形でフィードバックしたほうがよいのか気になる
    • 関わったすべての人に感謝と称賛を送りたい
  • jank はClojure の方言で、Clojure 自体も Lisp の方言だ
    関数型中心だが、可変状態と副作用もサポートしている
    すべてのデータ構造はデフォルトで不変であり、Clojure のように安全な変更メカニズムを提供して並行性を扱いやすくしている
    また C++ と深く統合でき、ランタイムに新しい C++ の型、関数、テンプレートを定義できる
    Clang と LLVM を使ったJIT コンパイルにより、C/C++ ライブラリへ容易にアクセスできる
    詳しくは公式ブックを参照

    • 以前 C++ を使っていたとき、コンパイル工程があまりにもつらかった
      Clojure は好きだが、ネイティブターゲットがある点が魅力的だ
      jank のコンパイル/再コンパイル速度がどの程度なのか気になる
  • jank の開発が Clojure をどれだけ近く追従していくのか気になる
    cljs のようにできるだけ同一に保つ計画なのか、それともいつか分岐するのかも知りたい
    以前 90% ほど Clojure に似た言語を作ったことがあるが、完全な互換性を保証するのが難しく、Clojure と名乗らせなかった
    jank はdrop-in replacementのように見えてすばらしい

    • jank は Clojure であり、アップストリームの Clojure 開発を追従していく予定だ
      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” に直す必要がある

    • nREPL サーバーは動作しているが、まだ jank リポジトリにはマージされていない
      try-jankで確認できる
      Clang のバグのため進行が遅れているが、優先度の高い作業
      リンクの誤字はすでに修正した
  • jank がRust コードベースと連携できるのか気になる

    • 一般的な C++ プロジェクトと同じように可能だ
      C ABI や C++/Rust の相互運用メカニズムを通じて接続できる
    • もちろん可能だ
  • 静的型システムが含まれているのか気になる

    • Clojure の方言なので、基本的には動的型付け言語
      ただし開発者は漸進的型システム¹を追加する計画に言及していた
      一部は完全に動的で GC ベース、一部はより制御され最適化された形で動かせるようにしたいという構想だ
      ¹ 関連ブログ記事
    • 言語全体としての静的型付けはない
      C++ との interop は静的に型付けされるが、Clojure の領域に戻ると完全に動的かつ多相的だ
      Carp のようなオプションの静的型付けモードを探る予定だが、今年ではない
    • Clojure を実装しているのだから、静的型付けはないだろうと強く推測する
  • 最初は「Jank Lang」という人が投資アルファを見つけたという話かと思った