
2026/08/09 2:38
Jolt:Chez Scheme で実装された Clojure コンパイラ
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
原文のサマリーは、提供されたキーポイントに基づいて高品質で明確かつ網羅的です。詳細なリストを効果的に一貫した物語へと統合しています。改善は必要ありません。
サマリー:
このテキストは主に Jolt を紹介します。Jolt は自己ホスト可能な Clojure の実装であり、標準的な JVM やその重厚な依存関係の必要性なくネイティブバイナリまたは JavaScript へ直接コンパイルします。この設計は、永続データ構造(ベクター、マップ、cons リスト)、遅延/無限シーケンス、トランスデューサーといったコアの Clojure セマンティクスを保持しながら、Java インタロプレーション、反射、および
gen-class/proxy 機能を回避することを望む開発者向けに、移植性の高い代替手段を提供します。インストールは Homebrew またはインストーリースクリプトを通じて Linux および macOS で直ちに可能で、nREPL を通じたライブリローディングによって開発ワークフローがサポートされ、再起動なしでの即時な変数の再定義を許可します。ユーザーは run を用いてプロジェクトを直接実行したり、build を用いてスタンドアロンのアプリケーションを構築したり、REPL 式を実行したりできます。数値型に関して、Jolt は整数、大整数、比、flonum ダブルを含む正確算術のタワーをサポートしています(ただし BigDecimal は除く)。また、Java の標準ライブラリではなく irregex を使用することで正規表現の機能を意図的に制限します。さらに、Jolt は Gambit バックエンドを通じて JavaScript にコンパイルでき、ブラウザでの利用が可能ですが、これらの小型ビルドは低ダウンロードサイズを維持するために正規表現といった高度な機能を省略する場合があります。結局のところ、Jolt は特定の数値精度に関する機能制限(BigDecimal なし)および Java 互換性を認めた上で、インフラストラクチャのオーバーヘッド削減を求めるチームに速度と移植性をもたらします。本文
Jolt:自己管理型 Clojure システムの概要
Jolt は JVM の依存を排除した、自己管理型の Clojure 実装システムです。ビルドステップが不要で、ほぼすべてのポータブルな Clojure コードを変更せずに動作します。
技術的特徴と実行環境
- 実行エンジン: Chez Scheme(ネイティブ)または Gambit Scheme(JavaScript 向け)を使用し、JVM は不要です。
- 自己コンパイル: コンパイラ自体が Clojure で記述されており、システムは自己コンパイル可能です。
- 真の並行処理: OS レベルのスレッド上で動作します。
、future
、agent
、pmap
などの機能は JVM と同等の挙動を提供します。core.async- 共有ヒープ上での実行を支援します。
スタンドアローンバイナリ(単一ファイル)
jolt build コマンドにより、ランタイムライブラリや依存関係(deps)を含む単一の自立型実行ファイルを生成できます。
- 即座の実行: 生成されたバイナリを実行するには Chez Scheme や JVM は一切不要です。
- 簡素化ビルド: ブラウザ環境での実行用には「簡素化されたビルド」が使用されますが、この環境では正規表現(regex)のサポートは未実装です。
なぜ Jolt か?
自己管理型コンパイラ
- Clojure コードを読み込み、ホスト環境に依存しない中間表現(IR)へ解析。
- Scheme コードとして出力し、Chez Scheme または Gambit Scheme で実行します。
スタンドアローンバイナリ
を用いてコンパイル済みの単一ファイルを作成します。jolt build- ソースコードやランタイム環境の別途インストールが不要です。
完全な Clojure 機能と互換性
- データ構造: パーシステントデータ構造(ベクトル、リスト、マップ/セット)、トランシェントコレクションを実装。
- 数値処理: 厳密な整数・大整数(bignums)、有理数(
)、浮動小数点数を完全サポート。1/2
はカテゴリーに敏感に動作。=
は値の厳密一致を判定。==
- 言語機能: 遅延リスト、トランスデューサー、構文分解、マルチメソッド、プロトコル/レコード、ネームスペース、完全なリーダー機能など、すべて Clojure と互換性があります。
注: Clojure コードの大部分は動作しますが、JVM に固有の機能(Java インタフェース、
など)は利用できません。gen-class
クイックスタート
自立型バイナリ
jolt をインストールしてください。これによりランタイム環境とコンパイラが一式含まれます。
インストール方法
Homebrew (macOS/Linux)
brew install jolt-lang/jolt/jolt
インストールスクリプト (Linux/macOS)
curl -sL https://raw.githubusercontent.com/jolt-lang/jolt/main/install | bash
簡単な試運転
jolt -e '(+ 1 2)' # => 3
ソースから直接実行(Chez Scheme が必要です)
git clone --recurse-submodules https://github.com/jolt-lang/jolt.git cd jolt bin/jolt -e '(+ 1 2)' # => 3
使用方法
式の評価
bin/jolt -e '(->> (range 10) (filter even?) (map (fn [x] (* x x))) (reduce +))' # 結果: 120 bin/jolt -e '(/ 1 2)' # 結果: 1/2
プロジェクトの実行
- メイン実行:
を解決しdeps.edn
メソッドを実行します。-mainbin/jolt run -m myapp.core - 引数への対応:
など、アライアスを使って標準入力として渡すことも可能です。-M:testbin/jolt -M:test [args]
スタンドアローンバイナリの生成
単一実行ファイルを生成し、どの環境でも動かします。
bin/jolt build -m myapp.core -o myapp ./myapp arg1 arg2 # 引数は -main に渡される
: 最適化ビルド--opt
: 未最適化ビルド--dev
nREPL サポート
CIDER / Calva / Cursive などの IDE との接続が可能です。
bin/jolt --nrepl-server # .nrepl-port ファイルが自動的に生成されます
- 変数の再定義は再起動不要で即時反映されます。
Clojure との違い (比較表)
Jolt は Clojure の语义を目標としますが、実行環境が Scheme であるため以下の相違点があります。
| 項目 | 違いの詳細 |
|---|---|
| Java インタフェース | JVM が存在しないため、一般的な Java インタフェースやリフレクション、/ は利用できません。代替として パッケージの一部がシムされ、C FFI も利用可能です。 |
| BigDecimal | 使用不可( が常に )。数値塔の其余部分は Clojure と一致しています。 |
| 正規表現 | でコンパイルされます。 の Java 固有機能とは動作が異なります(一般的なパターンは動作します)。 |