Rust から Zig への書き換えの進行状況

2026/07/16 20:39

Rust から Zig への書き換えの進行状況

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

要約

Japanese Translation:

Roc プログラミング言語のチームは、開発期間 487 日を費やしてコンパイラー全体を Zig に書き換えに成功し、新たなツールチェーンが元の Rust ベースのバージョンとの機能同等性を達成したという重要なマイルストーンに達しました。即時的な主要な利点の一つとして、デモゲーム(例えば「Rocci Bird」)におけるバイナリサイズの劇的な削減と、コンパイル速度への飛躍的な向上があります。増分ビルドは現在 3.4 秒からわずか 35 ミリ秒で完了しており、これは約 464K 行のコードに対して該当します。この新しい Zig ベースは、パターン一致内の文字列補間を用いたゼロ割当ルーティングロジックや、自動ホットコードリロードなどの強力な機能を実装することを可能にしています(例:

/users/${id}
)。これにより、外部依存関係なしでメモリ使用量を最適化することが可能です。この書き換えは Rust の利便性の一部(例えば安定した互換性の確保や自動テストのための割当)を犠牲にしますが、粒度の細かいメモリアロケーターサポートを獲得し、WebAssembly および Alpine Linux 環境において理想的な独立型バイナリを作成しました。チームはプライベート構造体フィールドやマクロなどの機能におけるトレードオフを認めつつも、Zig が提供するデータレイアウトに対する制御力および
unsafe
コードへの支援を高く評価しています。今回の書き換えは Bun のポートが要した 11 日と比べて大幅に長期化しましたが、これは Roc が広範な内部変更を必要としたためです。それでも既に特定領域(例えば誤コンパイル versus ロジックエラー)でのバグ減少を実現しており、今年の後半に公式のバージョン 0.1.0 のリリースを目指すとともに、現時点では不完全ですが有望な機能をテストするための夜間ビルドが利用可能です。

本文

ロック(Roc)コンパイラ改稿レポート:Rust から Zig へ

ロック(Roc)のチームは過去1 年半以上をかけ、約30 万行に及ぶ Rust コードを完全に Zig に書き換えました。 このプロジェクトの目的と背景、機能の実装状況、そして言語選択の根拠について詳しく解説します。


🚀 マイルストーン:機能の平等(Feature Parity)達成

改稿が完了し、新コンパイラは元の Rust ベースのコンパイラと機能的に同等となりました。これにより、Roc コードで書かれた WASM ゲーム「Rocci Bird」を新環境での動作確認が可能になりました。

🎮 Rocci Bird の実績

  • 実装例: 全ソースコードが1,000 行未満の簡潔なゲーム。
  • サイズ削減:
    roc build --opt=size
    コマンドで生成された WASM バイナリは31KBに压缩されました(旧コンパイラはこれよりも倍以上大きかった)。
  • 動作確認: itch.io で遊べます。WebAssembly 経由でもブラウザで即座に実行可能です。
    • ゲームをクリック/タップし、スペースキーで翼ばたきを行ってください。(モバイル版では右矢印キーがないため、リフレッシュして再開始してください)

🙏 感謝の言葉

公式リリース(0.1.0 版、目標:今年後半)以前ですが、達成したことに感謝します。特に以下の貢献者に謝意を表します。

  • Anthony Bullard & Sam Mohr: 新しいパーサーの共同開発
  • Jared Ramirez: 新しい型チェッカーなど多機能実装
  • Ayaz Hafiz: 新しいラムダセット解決システムと旧コンパイラの引き継ぎ
  • Aurélien Geron: 108 問の練習問題(Roc Exercism)を手作業でアップデート
  • Stephan: ブラウザ上で動作する「echo」プラットフォームの実装(2.5MB の WASM ベイナリ利用)
  • Niclas Åhdén: 有益なバグ報告と具体的なフィードバック
  • JRI98: ファッザ誤差の再現・調査と修正
  • Jasper Woudenberg: ユーザースペースパッケージ API の改善
  • 基礎構築者たち (Folkert de Vries など): 元コンパイラを築いた方々への感謝
  • 最大の貢献者: Anton-4Luke Boswell
    • コンパイラワーク、ビルトイン関数、プラットフォーム作成など多大な支援に心から感謝します。

注記: Bun プロジェクトは Zig から Rust へ約 50 万行を 11 日間で書き換えました。我々は Rust から Zig への約 30 万行を書き換えましたが、487 日(約 16 ヶ月)かかりました。言語の違いだけでなく、プロジェクト規模や変更範囲の違いが理由です。


✨ 新しい機能の実装

🔥 ホットコードロード & クロスコンパイル

新コンパイラは開発中でもホットコードロードを自動実行します。

  • 動作:
    roc server.roc
    でサーバー起動中にソースを修正すると、リクエスト処理時に即座に反映されます。
  • クロスコンパイル:
    roc build --target=x64musl
    コマンドで Alpine Linux 用の静的バイナリを作成可能です(Mac など他 OS でも同様の出力サイズ)。

🧵 文字列埋め込みを持つパターンマッチング

新機能「パターンマッチング内への文字列埋め込み(String Interpolation)」を実装しました。

match (verb, path) {
    ("GET", "/users/${id}/${page}") => match page {
        "" | "profile" => ok(id)
        "settings" => ok(with_default(user_agent, id))
        "posts/${post_id}" => ok("Post ID: ${post_id}")
        _ => not_found
    }
    // ... 他のケース
}
  • 特徴: ランタイムでのテンプレート解析ではなく、コンパイル時の言語機能として実装。
  • 利点: 型安全かつゼロのヒープ割り当て。Hot Code Loading の環境下でも安定しています。

📖 詳しく知りたい方はRoc Zulipをご覧ください。


❓ なぜ「スクラッチ・リライト(Scratch Rewrite)」なのか?

🔍 背景:メモリ割り当てとデフォニクショナライゼーション

Roc はシステム言語ではなく、参照カウントによる自動メモリ管理を持っています。

  • 既存の課題: クロージャキャプチャ時のヒープ割り当て数が多すぎること。
  • 解決策: 非学術的な言語として初めて**「多态な defunctionalization(ラムダセットの専門化)」**を導入し、クロージャキャプチャをヒープに割り当てないようにしました。

🛠 アーキテクチャ的再構築の必要性

この最適化は複雑で、元のコンパイラでは重大なバグが生じていました。OCaml によるプロトタイプを作成した Ayaz Hafiz が示した通り、根本問題は**「複数のコンパイラフェーズにまたがるアーキテクチャ」**にありました。

  • 一部を直すだけでなく、コンパイラの一部を再構築する必要があることを認識。
  • コンパイラ自体を自言語(Roc)で自己ホストするのは異例ですが、書き換えの利点がコストを上回るケースが存在することを理解しました。

🆚 なぜ Zig を選んだのか?

Rust ではなく Zig を選ぶ決定要因は以下の通りです。

1. ビルド時間の大幅短縮

  • Cargo のインクリメンタルビルドはコード増加と共に遅化していました。
  • Zig に書き換えることで、ビルド時間を劇的に短縮できました(後述)。

2. メモリ制御の柔軟性

  • Rust: 単一のグローバルアロケーター前提。
  • Zig: 粒度細やかなアロケータ前提。**構造体配列(SoA)**レイアウトが標準でサポート。
  • コンパイラ開発には、特定の領域ごとにメモリを制御する需要が高いため、Zig のモデルに合致します。

3. エコシステムの適応性

  • Rust は大規模ですが、我々のようなニッチな最適化(LLVM ビットコードの高速出力など)については Zig にすでにコードが存在しました。

4. メモリ非安全性への対応

  • Rust は
    unsafe
    を最小限に抑えようとする文化があります。
  • しかしコンパイラ開発では**メモリ非安全なコード(FFI やライブラリ互換など)**が避けられません。約 1,200 の
    unsafe
    ブロックが必要でしたが、Zig はこれらをより自然に扱える設計です。

🛡️ 改稿後のメモリー安全性検証

脆弱性内訳と ReleaseSafe/ReleaseFast

Microsoft の調査によると、メモリセキュリティ脆弱性の多くは使用後フリー(UAF)などです。

  • ReleaseSafe: ランタイムチェックあり(パニック発生可能)。TigerBeetle DB で実証済み。
  • ReleaseFast: テスト・デバッグ用。生産環境ではチェックをスキップ(オーバーヘッド削減)。

バグレポートの比較表

カテゴリRust 版 (旧)Zig 版 (新)
メモリ腐敗が起きたバグ2110
メモリ腐報が発生しなかったバグ2,575421
合計2,596431
  • 重要な事実: Rust 版の 21 のバグはすべてコンパイラロジック以外(コンパイルされたプログラムの動作)で発生していました。ローバーチェッカーが正常に機能していた証左です。
  • Zig 版の 10 バグのうち、8 は誤コンパイル(UAF エラー)、2 はコンパイラ自体のものでした。

ツールの選択による影響

異なるツール設定でも顕著な違いはみられませんでした。

ツール選択結果
Zig ReleaseFast (標準)2 バグ(ファイル名レンダリング不具合)
Zig ReleaseSafe (厳格)2 バグ(パニック発生、レンダリング不具合)
Rust ローバーチェッカー0 バグ(検知不可能な場合を含む)

結論: Bun のように「手動管理メモリと GC の混合」が主課題の場合とは異なり、Roc はそのリスクが少ないため、ReleaseSafe/Rust ロワーチェッカーほどの厳密なチェックはプロジェクトに対して必須ではありませんでした。


⚡ ビルド時間の改善結果

コンパイラLoC (行数)冷たいビルドインクリメンタル
Rust 1.85.0 (改稿前)354K32.4s10.0s
Rust 1.97.0 (改善後)354K25.4s3.4s
Zig 0.16.0 (機能平等時)320K39.6s8.6s
Zig 0.17.0 (現在)464K32.1s0.035s
  • インクリメンタルビルド: Rust で改善されれば 10 秒→3.4 秒でしたが、Zig ではさらに35 ミリ秒まで短縮できました。
  • ゼロパースデシリアライゼーション: アリーナベースのデータ構造により、ディスクからメモリへ読み込む際の手間(パージ)を省略。I/O ボトルネックを回避する高速化を実現しています。

🍂 Rust から欠けているもの

Rust の世界に戻る際に恋しく思う点があります。

  • 自動割り当てと解放: 手動管理が必須の Zig では、テストでメモリリークを検知するテストアロケータの記述が大変です(Rust では不要)。
  • 適応型多態性 (Comptime): パラメトリックな型定義よりも、コンパイル時の値計算機能の方が実用的。
  • プライベート構造体フィールド: 防御的コーディングを助ける機能がないため、ドキュメント参照が難しい。
  • スネークケース命名: Rust の
    snake_case
    プレファレンスの方が直感的。
  • 逆方向互換性: Rust のマイナーリリースにおける平滑なアップグレード体験は素晴らしいです。

🌟 Zig で気に入っていること

  • 関数型プログラミングの純粋さ: 突然変異や制限されない副作用など、ツールボックスの使いやすさを実感。
  • マクロがない: シンプルさと予測可能性が高い。
  • データレイアウトへの直接アクセス:
    u7
    u5
    といった特殊サイズやビット操作が容易。
  • ビルドツールチェーンの独立性: Alpine Linux や WebAssembly 用の自立型バイナリ作成が可能。
  • エラー処理: エラーは自然に蓄積し、失敗したヒープ割り当てを通常のユーザースペースエラーとして扱う戦略が好き。

🔮 ロックの今後の展望

  • 目標: 今年後半にバージョン 0.1.0(初の番号付きリリース)をリリース予定です。
  • ナイトリービルド: リリース直前の最新ビルドを試すことができますが、バグや不完全な機能がある可能性があります。
  • 寄付受入れ: ロックプログラミング言語財団は 501(c)(3) 団体であり、寄付には税制優遇があります(コントリビューターの活動支援に充てています)。

みなさまの貢献に感謝いたします。 言語の助けをかりて新しいマイルストーンを達成できました。次の目標である最初の正式リリースに向けて、さらに多くの機能を強化してまいります!

  • 質問や意見は Roc Zulip でお気軽にチャットしてください。

同じ日のほかのニュース

一覧に戻る →

2026/07/16 23:46

Kimi K3:オープン・フロンティア・インテリジェンス

## Japanese Translation: Kimi K3 は、ネイティブビジョン機能と 100 万トークンのコンテキストウィンドウを備えた、開かれた 2.8T パラメータモデルであり、同クラスにおいて初めてこの規模に達したものです。Kimide Delta Attention (KDA)、Attention Residuals (AttnRes)、Stable LatentMoE(896 のエキスパートのうち 16 を有効化)を活用し、Kimi K2 に比べて約 2.5 倍のスケーリング効率向上を実現しています。API、モバイルアプリ(iOS、Android、HarmonyOS)、デスクトップアプリ(Windows/Mac v3.1.0 以降)、ターミナル(Kimi Code)、および Kimi Work プラットフォーム経由で現在利用可能です。完全なモデル重みは 2026 年 7 月 27 日にリリース予定です。 発売時はデフォルトで"max"の思考努力で動作し、将来のアップデートで低い effort と高い effort のモードが個別に導入される予定です。全体的一般ベンチマークでは Claude Fable 5 や GPT 5.6 Sol などのプロプライエタリモデルに劣りますが、「max」推論(temperature = 1.0, top-p = 1.0)を使用する際は、評価スイート内でテストされた他のすべてのモデルで一貫して高スコアを獲得しています。NVIDIA H200 上での Kernel Optimization テストでは、Claude Fable 5 と競合的な性能を誇り、Opus 4.8、GPT 5.6 Sol、GPT 5.5 を大幅に上回っています。また、NanoTriton を成功裏に構築しており、これは Triton や torch.compile に匹敵するかそれ以上のパフォーマンスを発揮しながら、エンドツーエンドの nanoGPT 訓練を継続可能なカスタム GPU コンパイラです。 ドメイン固有のベンチマークでは Kimi K3 が内部指標で優位を示しています:DeepSWE(67.5)、Program Bench(77.8)、Terminal Bench 2.1(88.3)。顕著なケーススタディには、48 時間以内にナノモデルを供給するチップの自律的デザイン(シミュレーションにおいて 100 MHz のタイミングクロージャー達成および>8,700 トークン/秒のデコードスループット達成)、ならびに 20 以上の論文を相互検証し Python コード 3,000 行以上を生成することで複雑な天体物理学研究タスクを数週間から約 2 時間へと短縮する実績が含まれます。 Kimi Work には、永続的な視覚インタラクションのためのウィジェットおよびダッシュボード、そしてネイティブ動画編集機能を搭載した新機能が追加されました。モデルは API 経由で利用可能で、入力/出力それぞれに対し MToken あたり 0.30 米ドル・3.00 米ドル・15.00 米ドルの料金体系を適用しています。制限事項としては、思考履歴への感受性(特定のハネス互換性を必要とする例:Kimi Code など)、および曖昧なタスクに対して過度の能動性を示す傾向があり、これらには明示的な振る舞い制約が必要です。

2026/07/17 5:18

LM Studio Bionic:オープンソースモデル用の AI エージェント

## Japanese Translation: LM Studio Bionic は、機密データを厳格な「ゼロデータ保持ポリシー」に従って安全に処理するために設計された専用のワークアプリケーションとして発売されました。このポリシーにより、文書やコードがより広範なシステムの学習に使用されることは一切ありません。プラットフォームは柔軟な実行環境を提供しており、ユーザーは自身のハードウェア上でローカルにタスクを実行できるほか、LM Link プロトコルを介して接続したり、処理直後にリクエストを削除する安全なクラウドを利用したりすることができます。ただし、クラウドモデルへのアクセスには LM Studio アカウントの作成および課金設定が必要です。主な機能としては、Mistral AI Voxtral を活用したオフライン音声認識と、GLM 5.2 や Kimi K2.7 Code のようなモデルを用いた高度なコーディング能力(ローカルコードベースの検査、説明、編集)が挙げられます。文書処理には PDF スライド表計算シートなどが含まれます。すべてのファイルはサンドボックス化された「Work project」環境内で安全に扱われます。今後のアップデートでは、ジョブごとに特定モデルを選択するための Bionic エージェントおよび、文書の変更を元に戻せる自動チェックポイント機能が導入されます。このソリューションは、ユーザーのプライバシーを犠牲にしてモデル学習を行うプラットフォームとは異なり、組織がコードベースの検査や PDF の分析などを実行しながら、コストを正確に管理でき、安心して作業を進められるよう支援します。

2026/07/17 1:06

Microsoft Comic Chat がオープンソース化されました

## Japanese Translation: Microsoft は、1990 年代に登場し、テキストとイラスト化された漫画パネルを組み合わせた画期的なチャットクライアント「Comic Chat」のオープンソース版を正式に公開しました。このソフトは、ダビッド・DJ・カルランダー氏により Microsoft Research で 1995 年に構想され、Visual C++ 4.0 と MFC を用いて開発されました。同年に Internet Explorer 3 に、その後 Windows 98 にも組み込まれ、24 の言語に対応してリリースされました。「Comic Sans」フォントを最初にスピーチバブル会話の文脈で採用したことで同フォントを広めたのもこの製品です。実際のチャットセッションのトランスクリプトから、漫画家 Jim Woodring 氏が独自のビジュアル資産を作成し、システムは会話を示す手がかりを読み取り、自動的にポーズ、表情、ジェスチャー、パネルレイアウトを生成しました。これは SIGGRAPH '96 の論文で「自動イラストレーション構築の実験」として記述されています。Comic Chat は現代のリアクション、スタicker、GIF、AI 生成コンテンツ、そしてビデオが登場する以前の技術であり、それらの機能を先駆けとしたノスタルジックなアーチファクトとして機能します。オープンソースリリースの一環として、Microsoft は元々の C++/MFC コードを現在の Visual Studio ツールおよび高解像度 Windows システムで動作させるための AI による近代化試みを含めており、これらは洗練されたリイシューではなく、現代的な IRC サーバーとの互換性を示す実用サンプルとして提示されています。この取り組みはソフトウェアの歴史を保存すると同時に、開発者、歴史家、愛好家がソースコードを探索し、実験し、1990 年代の技術を基にした新たな形で創作できるよう促しています。