弛緩:Rust のビルド時間を短縮するための JIT コンパイラ

2026/11/12 6:20

弛緩:Rust のビルド時間を短縮するための JIT コンパイラ

RSS: https://news.ycombinator.com/rss

要約▶

Japanese Translation:

Summary:

Relax は、

rustc
、LLVM、またはリンカーを必要とせずにコードを瞬時にコンパイルするライブコンパイラー兼 JIT ランタイムとして機能する画期的な Rust ツールです。実行時に関数をオンデマンドでコンパイルすることでホットパスの最適化を行い、アプリケーションの状態を維持し、ライブエディットのための高速イテレーションおよび「ホットパッチング」を可能にします。Apple M4 ハードウェア上では、Relax は起動時に劇的な速度向上を示しており、大型 3D ゲームは rustc の約 3 分に対してわずか 11 秒で起動し、小規模なアプリケーションは標準 Rust コンパイルの 3.7 秒に対して 0.24 秒です。そのピークパフォーマンスは完全最適化された
rustc
ビルドよりもわずかに低いですが(アーキテクチャによって 12~24% 遅い)、冷たい起動およびライブエディティングワークフローにおいて大きな利点を提供します。現在 x86-64 および AArch64 をサポートしており、Relax はコンパイラーとアプリケーション間でメモリを共有しますが、構造体レイアウトの変更やインポートの更新など複雑な変更には、
relax inspect
によるセッションの再起動が必要です。Makepad のような主要プロジェクトは、UI アプリをネイティブビルドなしで実行するために Relax を使用し、時間短縮と AI エージェントのコスト削減を実現しています。アーキテクチャは並行して更新される独立したクライトを採用しており、スタックトレースを保持したままパニックを一時停止する高度なデバッグ機能もサポートしています。

本文

Relax: 待つことなしの Rust ライブコンパイラ

Relax は Rust で実装されたライブコンパイラ(Live Compiler)および JIT(即時実行可能コード生成)ランタイムです。プログラムのビルドと実行を同時期に行います。 従来の

rustc
が起動前に全ビルドを完了させるのに対し、Relax は各関数が初めて呼ばれる際にコンパイルを開始し、プログラム実行中にホットな関数を最適化しながら、エディタでの編集をプロセスに瞬時に適用(ライブパッチ)します。

主要機能比較:Relax vs
cargo + rustc

機能項目cargo + rustcRelax
大規模 3D ゲームの性能初回フレーム:ビルドに約 3 分かかる、その後起動。
2 回目実行(M4 MacBook):1.15 秒。
初回フレーム:11 秒で M4 MacBook からソース直出しですぐ開始。
小規模アプリ(コールド/ウォーム)コールド:3.7 秒、ウォーム:0.41 秒。コールド:3.7 秒、ウォーム:0.41 秒。
編集して実行再ビルド・再リンク・再起動が必要:状態が失われる。パッチ適用により、状態は維持される。
保存時のテスト実行テストを再実行(92 つのテストで約 2.2 秒)。テストはウォームなまま維持され、変更された関数だけを再実行する。
型チェック
cargo check
:全てをチェックしてから実行。
貸借関係チェックも同然。
relax check
:各関数を実行前に型チェックし、貸借関係チェックをバックグラウンドで実行。
コード速度(ベースライン)x64: 1.00×
arm64: 基準値。
x64: 1.12×、arm64: 1.24×(21 のワークロードの幾何平均)。
注:Relax は全体として
rustc
より遅い傾向にあるが、開発効率向上は圧倒的。
依存関係
rustc
、LLVM、リンカーが必要。
Rust ライブラリ 1 つのみ(438k 行)。crates.io の外部依存関係なし。

コード生成のサポート

  • x86-64 と AArch64 をサポートします。
  • Linux x86-64 および macOS arm64 でクローンしたまま構築可能です。
  • 注意:Windows 版は現時点でテストされていません。

トレードオフと制限事項

Relax はリリースビルドではなく、**「編集・実行のループ」**のために設計されています。出荷用ビルドとは別に、開発におけるユニークな機能を提供するためにわずかな性能コストを払う必要があります。

1. コード速度

全体として、

relax
が実行するコードは
rustc --release
よりも遅いです(幾何平均で x64 1.12 倍、arm64 1.24 倍)。LLVM が苦手とする特定の少数のワークロードでは速い場合があります。

2. メモリ使用量の増加

コンパイラ、キャッシュ、および発行されたすべてのコードバージョンがプロセスと共有されます。JIT コードは追加専用(append-only)です。

  • コードキャッシュ: シンプルな
    hello
    アプリでも
    target/relax
    に 120〜190 MB を使用します。
  • 状況確認:
    relax inspect <pid> memory

3. 制限事項

  • relax check
    : 大規模パッケージではコールドチェックに時間がかかり、メモリ消費も多くなります(改善中)。
  • クレートサポート: 全てのクレートが動作するわけではありません。
    libs/relax/KNOWN_GAPS.md
    を参照してください。
  • ライブパッチングの制約: 構造体のレイアウト、インポート、トレイト実装、マクロの変更には再起動が必要です(
    relax inspect <pid> session relaunch
    )。
  • 貸借関係チェック: 実行中のプログラムと競合しないよう設計されています。

JIT インスペクション機能

relax run
を実行すると
relax-remote: pid <pid>
が出力され、この PID で
relax inspect
を使用してプロセスを制御します。

機能コマンド例
ホットパッチング
relax run <package>

ファイルを保存すると変更された関数が即座に再コンパイル・入れ替わります。
保存時のテスト実行
relax test --live <package>

テストはウォームなまま維持され、変更箇所のみの再実行が可能です。
パニック時の一時停止
panics
,
locals panic=P1

スレッドを待ち状態にし、ローカル変数参照やコード評価が可能になります(最大 10 分)。
ブレークポイント
break <file>:<line>
,
continue

スタック情報を維持しつつ実行を一時停止できます。デバッガー不要です。
ハングアップの診断
why-hung

デッドロックやブロッキングの原因を表示します。
プロファイリング
prof s=3
,
why-slow

JIT フレームとネイティブフレームをサンプリングし、呼び出しツリーを確認できます。
フライトレコーダー
rec save

パニックや遅延時にイベント履歴を保存します。
メモリ・リーク解析
heap diff a now

RSS やmallocの状態、ヒープ追跡(Linux x64 / macOS arm64 限定)を表示。

高度なコマンド(詳細は
relax inspect <pid> help
)

  • asm <fn> vs=rustc
    :
    rustc
    との比較用マシンコード。
  • count <fn>
    : 関数の正確な呼び出し回数。
  • ハードウェアカウンターの監視。

インストールと使用方法

Relax をクローンし、新しいパッケージを JIT で実行しましょう。

# Relax のビルド
git clone https://github.com/makepad/relax
cd relax
cargo build --release --manifest-path relax/Cargo.toml -p relax-runner --bin relax

# 作成するプロジェクトのディレクトリ移動
cargo new hello
cd hello

# JIT モードでの実行(静かなモード)
../relax/target/release/relax run --quiet hello

# テストの実行
../relax/target/release/relax test hello

# 型チェックのみ
../relax/target/release/relax check hello

重要:

  1. パッケージのフォルダ内で動作するため、
    relax
    フォルダの場所は変更しないでください。
  2. 各新しいパッケージはコールド状態から始まります(
    relax clean
    でコンパイル済みアートを削除します)。

ネットワーク設定

  • オフラインモード:
    RELAX_OFFLINE=1
    または
    CARGO_NET_OFFLINE
    を設定すると、依存関係のダウンロードを無効にできます。
  • Git リポジトリ:
    relax fetch <git-url>
    により、リポジトリを単一ファイルとしてローカルに保存可能です。

新しいツールチェーンの構成

Relax はラッパーや LLVM プラグインではなく、一つの Rust ライブラリとして実装されています。以下の要素を統合・置換しています。

段階通常のツール (
cargo + rustc
)
Relax
文字列処理/展開
rustc
relax-lex
,
relax-front
解決/型付け
rustc
relax-types
最適化
MIR
+ LLVM
relax-codegen
(O1, O3)
コード生成/リンクLLVM コードジェネレータ + リンカー
relax-backend
-> 実行可能メモリへの書き込み
マニフェストCargo
relax-base
コア/Std ビルドプリビルト配布Relax がソースからコンパイル (134k 行)

コンパイル戦略の違い

  • 適応型最適化: クレート全体を事前にコンパイルするのではなく、初めて呼ばれる時に一つ関数ずつコンパイルします。ホットな関数はバックグラウンドで O1 → O3 と移動します。
    #[relax(O2)]
    /
    #[relax(O3)]
    属性は即座に高い最適化レベルを適用できます。
  • キャッシュ: 入力ハッシュをキーとするため、
    cargo clean
    の必要がない安定したキャッシュ構造です(旧アートを削除しない)。
  • マクロ: ネイティブ
    dylib
    または JIT で実行されます。
  • ネイティブ API: 外部リソース(GPU, OS)へのアクセスは
    #[relax_api]
    を介して行われます。

Makepad における運用

Makepad は UI アプリで、Relax をランナーとして使用します。

特徴

  • 即座の起動: ネイティブビルド不要。ウィンドウがすぐに開き、ビルドはバックグラウンドで進行します。
  • 状態維持: 編集を保存し、アプリにパッチ適用されます。
  • スマートな再起動: パッチ適用不可な場合(構造変更など)は「更新準備中」と表示され、クリックすると同じプロセス内で再起動し、可能な限り状態を保持します。
  • エラー・パニックハンドリング: エラーやクラッシュ時は UI 上でファイル情報付きで表示され、ソース修正後すぐに再開可能です。
  • 詳細調査:
    ui find
    ,
    versions
    ,
    remarks
    ,
    rec save
    など、コマンドライン経由でも詳細な情報を取得できます。

性能(Makepad で)

エージェントによる一日の運用において、編集がアプリに到達するまでにかかる時間は中央値 3.6 秒 です(コールドキャッシュでの p90 は 86 秒)。


AI エージェント向け最適化

AI エージェントはビルド時間やトークンコストが高くつきがちです。

Relax + devhub
を使用することで以下のメリットがあります。

メトリックcargo + rustcRelax + devhub
編集到達大規模アプリで数分かかる(再ビルド・再リンク)0.1 秒でパッチ適用(中央値 3.6 秒)。
テスト判定全テストの再実行(2.2 秒程度)テストをウォームに保ち、変更分のみ実行。
UI 確認再起動・ナビゲーション必要ライブアプリから PNG を瞬時に取得。
ワーカー起動コールドビルドウォーム起動(キャッシュ維持)。

実際に運用では 9 つのエージェントが並行動作しており、

devhub
は時間あたり 300 以上のジョブを処理しています。


速度比較:Relax vs Rustc(ワークロード別)

定常状態のコードは

LLVM (rustc)
よりも遅い傾向にあります(1.00× = rustc ストック)。以下の表は時間の倍率を示します(下数ほど高速)。

ワークロードx64 vs ストックarm64 vs ストック
テキストシェイピング/グリフレンダリング1.36×1.33×
サイン距離フィールド生成1.31×1.26×
DEFLATE デコード1.20×1.26×
PNG/Brotli デコード1.21× / 1.29×1.32× / 1.27×
ベクター地図タイルデコード1.06×1.01×
LLM デコード1.12×1.05×
マークダウン解析1.39×1.54×
HTML 解析1.06×1.04×
ゲームオーディオミキサー1.03×1.17×
スクリプト VM 評価1.11×1.12×
剛体物理学0.43× (速い!)1.30×
ゲームシミュレーションティック0.60× (速い!)1.25×
レベルウォーク0.87×0.91×
幾何平均 (21)1.12×1.24×

分析結果

  • 全体: 平均して
    rustc
    より遅いですが、剛体物理学やゲームシミュレーションティックなど特定タスクでは大幅に高速です。
  • ネイティブビルドとの比較:
    target-cpu=native
    を指定した場合、物理計算などの恩恵は薄れますが、開発時のイテレーション速度向上は無視できません。
  • 遅延の原因: 余分な命令(スタックトラフィック、レジスタコピー、ランタイムオーバーヘッド等)によるものです。

Relax は開発反復のために設計されています。 最終的なリリースビルドには必ず

rustc
を使用してください。


アーキテクチャとリポジトリ構成

Relax は単一プロセス内ですべてのパイプラインを所有し、並列にコンパイル可能なレイヤー構成を持っています。上位レイヤーの変更は下位レイヤーの再ビルドを発生させません。

クレートスタック

クレートパス役割rustc 相当物
relax-lex
libs/relax/lex
レーザ、トークン化、マクロ展開Lexer, proc_macro
relax-base
libs/relax/base
ハッシュ、メモリ会計、Cfg、GitCargo インフラ
relax-session
libs/relax/session
セッション管理、キャッシュキー增量キー
relax-front
libs/relax/front
解析、名前解決、マクロ展開Parser, Resolver
relax-types
libs/relax/types
型チェック、貸借関係チェックType Checker
relax-codegen
libs/relax/codegen
O1/O3 オプティマイザ、JIT コード生成MIR + LLVM Opt
relax-backend
libs/relax/backend
コード出力、C ABI 計画、リンカー代替CodeGen, Linker
relax-compiler
libs/relax/compiler
JIT ランタイム、std、インスペクト、テストランナーCargo Driver
relax_api
libs/relax_api
ネイティブ API インターフェース(JIT 呼び出し)(独自実装)

デザインルール

  1. 決してステインではない: キャッシュ結果はハッシュでキー付けされ、破棄されることはありません。
  2. コードのみが成長: マシンコードは解放・書き換えせず、安全なスワップを行います。
  3. デフォルトでの遅延: 必要になるまでコンパイルしません(オンデマンド)。
  4. 透明性: 全てのフェーズで動作ログを出力し、ボトルネックを可視化できます。

ライセンス

MIT ライセンスを使用しています。Relax がコンパイルする Rust Standard Library (std) のソースには独自のクレジットとライセンスが付帯します(

libs/relax/compiler/std/CREDITS.md
を参照)。

同じ日のほかのニュース

一覧に戻る →

2026/11/13 3:39

Rust 1.100

## Japanese Translation: はい、元のサマリーは具体的な技術的な安定化の範囲を捉えたり、アロケータの機能に関する曖昧さを解消したりするために改善が必要です。 **改訂されたサマリー:** Rust チームは公式にバージョン 1.100.0 をリリースしました。これは長待たされてきた機能である「never type」(`!`)を安定化させ、より効率的でカスタマイズ可能なメモリ管理システムを構築するための強力な新 API を導入するマイルストーンです。このリリースには、トランザクションのような安全性を提供する `DropGuard` API、ゼロサイズタイプを作成するための `conjure_zst`、および `Vec` および `Box` 用のアロケータに特化したコンストラクタなど、主要な機能が追加されています。 アップグレードするには、ユーザーは `rustup update stable`を実行するか、`rustup` が不足している場合は Rust ウェブサイトからツールを直接ダウンロードしてください。ほとんどの変更は安全ですが、2024 年版より前のエディションのユーザーにとっては重要な不互換の変更があります:never type の内部フォールバックが `()` から `!` にシフトしました。開発者はコードを調整し、互換性を維持するために新しい `Infallible`アリアスを使用する必要があります。また、このアップデートは Cargo において重大な安全性の向上をもたらしており、未使用の依存関係に対するデフォルト警告や、サプライチェーンリスクを軽減するための最小公開年齢の設定などが含まれます。チームは、早期の問題発見に貢献し、よりスムーズなエコシステムの発展を実現するため、ユーザーがベータまたはナイトリーチャンネルで今後のリリースを試すことを推奨しています。

2026/11/13 3:52

ジェミニ4水和素およびオーケストレーター

## Japanese Translation: 本日、Google は独立した AI モデル「Gemini 4 Hydrogen」を発表し、人工知能分析指数(Artificial Analysis Intelligence Index)でスコア 51 を記録して Argon の 50 を上回るとともに、Terminal-Bench 4.1 で 57% のスコアを取得し、前 versions の 3.8 Flash バージョンの性能を 3 倍以上向上させました。このリリースでは、「Orchestrator」という動的システムが新たに導入されました。これは現在、Google AI Ultra サブスクリプションユーザーに利用可能であり、Hydrogen と Carbon 計画モデルを組み合わせることで複雑なワークフローを最適化します。静的ルーティングシステムとは異なり、Orchestrator は双方向のアプローチを採用しており、Carbon が読み取り専用フェーズと計画を担当し、Hydrogen が書き込み、編集、テストを担当します。Hydrogen が困難に遭遇した場合は、自動的に Carbon に戻って計画の修復を受け、その後再開を行います。この動的な協調により、Carbon のタスク成功率达到にほぼ匹敵しつつ、コンピューティングクォータは 24% 削減し、タスク完了を 19% 高速化を実現しています。開発者は Antigravity SDK を直接使用して多モデルパイプラインに対するプログラム制御を行うことができ、Hydrogen は推論深度の 4 レベル(low、medium、high、xhigh)を提供します。今後の更新では、オープンソースデモへのアクセスが拡大され、例えばエージェントが高速な反復と高レベルのセキュリティチェックの間で任務を分担する問題の分類など、新たなユースケースが追加される予定です。最終的に、このイノベーションは要求の高いソフトウェア開発タスクに対して効率的なリソース配分を提供し、速度や品質を損なうことなく高度な低遅延推論機能を備えています。

2026/11/13 6:13

Foundation Models フレームワーク (macOS)

## Japanese Translation: Apple の Foundation Models フレームワークは、大規模言語モデルをシームレスに統合するネイティブ Swift API を提供することで、アプリ開発を革新します。その最も重要な特徴は、オンデバイスまたはクラウドにあるどの AI モデルプロバイダーにも、複雑な設定なしでアクセスできるようにする統一プロトコルです。ガイド付き生成、ツール呼び出し、画像理解(マルチモーダルプロンプト、Vision フレームワークによる OCR、バーコードスキャンを含む)、ダイナミックプロファイルといった組み込みツールがワークフローを簡素化し、Evaluations フレームワークはプロンプトのテストおよび動的条件下での機能検証を可能にします。プライバシー重視の Private Cloud Compute は、ユーザーデータが安全な環境外に出るか Apple によって保存されることはありません。特に、App Store Small Business プログラムに登録しており、初回ダウンロード数が 200 万未満の開発者は、これらのリソースを無料でお使いいただけます。さらに、新しい Python SDK がエコシステムのリーチを広げ、人気ツールとの統合を容易にし、カスタムスキルやコンテキスト管理ヘルパーなどの実験的機能を備えたオープンソースユーティリティパッケージが提供されています。今後、macOS 27 ではフルアプリケーションを書かずに高速なスクリプト作成と自動化を実現する `fm` CLI ツールを導入します。多様なモデル機能—from オンデバイス機能から Claude サーバーサイドの巨人まで—を一元化することで、このフレームワークは開発を簡素化しユーザーデータを保護し、あらゆるデバイスにわたる AI 統合のための堅牢な未来を確立します。

弛緩:Rust のビルド時間を短縮するための JIT コンパイラ | そっか~ニュース