C言語における尾再帰最適化は比較的新しく(2025年)です

2026/08/10 20:34

C言語における尾再帰最適化は比較的新しく(2025年)です

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

要約

Japanese Translation:

現代の C コンパイラ(GCC、Clang など)は、歴史的な制約を克服し、堅牢なテールコール最適化を実現しました。これにより、現在の関数の呼び出し元がスタックをクリーンアップでき、次のコールのために残さず済むようになりました。この画期的な進歩により、以前なら厳格なコール規約(呼び出し元が返却する前に引数を除去することを強制されていた)の下では不可能だった高度なコンパイル技術が可能になりました。最新のテストでは、主要なコンパイラの双方が複雑な使用パターンを効果的に処理することが確認され、別個の間接呼び出し制限を必要としないことが判明しました。これは、膨大なコードベースを処理するに関する研究からの発見を裏付けています。「Copy-and-Patch Compilation」という Xu および Kjolstad による論文はこの最適化を利用しており、その実装は 10 万ものコードスニペットを使用してテストされました。歴史的には、C の標準がコール側でのクリーンアップを許容しなかったのは 1994 年までであり、2001 年の初期の最適化ですら間接呼び出しでは失敗しました。この制限のため、Gforth などのレガシシステムは 2,000 スニペット未満しかサポートできませんでした。現在、ツールは 10 万という異なるコードスニペットを処理する準備が整っており、goto*ベースのシステムにおいて多数のスニペットを必要とする技術を実行可能にしていますが、Gforth にこれらの特定の最適化を組み込む作業はまだ完了していません。この進歩により、Python の開発者や広く業界全体は、自らのコミュニティによって以前から導入された強力な機能を採用することができ、かつて堅固なスタック管理のルールによってブロックされていた新たな戦略への扉が開かれています。この機能を実装した最初の Python コミュニティには賞賛を送りたいと思います。

本文

C 言語における尾部呼び出し最適化の経緯と現状

はじめに

C 言語における**尾部呼び出し最適化(Tail Call Optimization: TCO)**は比較的新しい技術です。Python コミュニティが最先端を走り、そのパフォーマンス向上において重要な進展となっています。

C 言語での TCO の歴史的経緯

当初から TCO が実装されていたわけではなく、呼出規約の限界が存在しました。

  • スタック削除の前提
    • 従来の呼出規約では、コールされた関数(callee)が、呼出し側(caller)によってスタック上に置かれたデータを削除しないことを前提としていました。
    • コール先が引数を処理しようとしても機能せず、結果として呼び出しは非尾部呼び出しとみなされました。
  • 実装の進展
    • 1994 年:当時の C コンパイラでは TCO がサポートされていませんでした。
    • 2001 年:Mark Probst が GCC で専用の呼出規約を導入し、TCO を実装しました。
      • ただし、当时的な制限事項があり、**「間接呼び出しに対応できない」**という欠点を持っていました(インタプリタディスパッチにおいて重要)。

GCC と Clang の現在の状況

著者は以前から GCC 内部の

goto *
メカニズムには満足していたものの、近年の研究論文により TCO が活用されていることを確認しました。

  • 技術的背景
    • Xu と Kjolstad による論文「Copy-and-Patch Compilation」において TCO の活用事例が示されました。
  • 検証結果
    • GCC や Clang を実際に検証したところ、記事で示されている種類の尾部呼び出しに対して最適化を実行し、正常動作することを確認できました。
  • 規模の比較
    • 論文: 10 万個以上のコード断片を検討対象としています。
    • Gforth: VM 命令やスタックキャッシュなど、静的なスーパー指令に限定され、2,000 未満の断片にとどまります。

今後の展望

TCO の活用が巨大規模のコードに対応できるようになれば、

goto *
ベースでは実用不可能だった多数の異なるコード断片を処理する技術も利用可能になります。

  • 現状: まだ Gforth への正式導入段階ではありません。
  • 祝福: Python コミュニティがこの領域を先取りしたことを祝意を表します。

同じ日のほかのニュース

一覧に戻る →

2026/08/10 19:10

Muse Glimmer:常時稼働型ローカルエージェントワークフローに最適化された 30 バラマイトモデル

## 日本語翻訳: 以下に、キーポイントリストに含まれていた欠落した事実的詳細を取り込みつつ、明確さと流れを維持し、ソース資料の包括的な表現を確保する改良されたサマリーを提示します。 ## 改良されたサマリー: Meta は、標準的な消費者向けハードウェアでの高性能で常時稼働可能なローカルエージェントワークフローに特化するように設計された、300 億パラメータを持つ AI モデル「Muse Glimmer」を正式にオープンソース化しました。このモデルは Apache 2.0 ライセンスの下でリリースされており、Meta の大型の Muse Spark チェリーターからの新型ディストリルションレシピと、コンパクトなアーキテクチャを通じて、ハードウェア制約と能力をバランスさせることで、インターネット接続なしで完全オフラインでの高度なタスク(関数呼び出し、ローカルコーディング、LLM-as-a-judge 評価など)の遂行を可能にします。モデルは 100 語以上の言語をサポートし、認識エンコーダーによるマルチモーダル入力を備えています。 MacBook M4-Max、M5-Max、RTX 5090(24 GB または 32 GB の VRAM)など、デバイス上での流れるようなリアルタイム相互作用を確保するために、モデルは重みを 20 GB 未満に圧縮する 4 ビット量子化を採用しています。推論はさらに加速され、DFlash ベースの「drafter」モデルを使用してスペキュレティブデコーディングが行われます。このドラフトモデルは並列でトークンブロックを提案し、それを検証します。Muse Glimmer は DeepSearch QA、MCP-Atlas、𝛕-Bench、SWE-Bench などのベンチマークで強靭なパフォーマンスを発揮し、Gemma4-31B や Qwen3.6-27B を上回っています。 開発リソースは Hugging Face で公開されており、llama.cpp、MLX、ExecuTorch、Ollama、LM Studio、Unsloth、Together AI などを含むフレームワーク向けの最適化された統合が順次導入される予定です。モデルのトレーニングは 3 つのフェーズ(事前学習:ログイットディストリルテーション、中盤学習:より長いコンテキストとエージェント主体のデータ、事後学習:オンポリシーディストリルテーションおよび強化学習を用いた SFT)で行われました。これらの取り組みは、複雑なコーディングおよび評価シナリオにおけるアクセシブルなローカル AI 実行のエコシステムを大幅に拡張します。

2026/08/11 5:20

イリノイ州が、Linux を年齢確認義務の対象とする法律を可決しました。

## Japanese Translation: イリノイ州は HB5511(公共法 104-0664)を制定し、主要なソーシャルメディアプラットフォームおよびオペレーティングシステムプロバイダーを対象とした厳格な法律を施行することで、オンライン上の未成年者の保護を図っています。同法案は段階的に適用され、2028 年 1 月より発効します。この立法により、18 歳未満の利用者に対してデフォルトの保護措置が適用されます。具体的には、アルゴリズムに基づくフィードの禁止、午後 10 時から翌日午前 7 時までの通知制限、大人の不特定多数からの連絡遮断が含まれます。2028 年までに、OS ベンダーおよびアプリストアは必須の年齢申告手順を実施し、利用者の年齢層(13 歳未満、13〜15 歳、16〜17 歳、または 18 歳以上)を表す暗号化された API シグナルを提供する必要があります。「未成年」という年齢層が受信されると、これらの安全デフォルトが自動的に適用されます。コロラド州やカリフォルニア州の法律とは異なり、HB5511 はオープンソースソフトウェアプロジェクトに対する**免責条項を設けていない**ため、GitHub に代表されるコミュニティ運営または非営利のコードリポジトリにも適用されます。執行はイリノイ州司法長官に独占されており、個人による私的訴訟は禁止されています。法案本文では、過失による違反については影響を受けた子供 1 人あたり民事罰が 2,500 ドル、故意な違反については 7,500 ドルと上限が定められていますが、プリッツカー知事のプレスリリース当初には最高 50,000 ドルというより高い罚款が言及されており、本文では完全に調整されていない不一致が生じています。

2026/08/11 3:12

GPU 上の Rust SIMD

## Japanese Translation: VectorWare は、既存の CPU コードを書き換えずに、Rust の SIMD 抽象化(例:`core::simd`)を用いて高パフォーマンスな GPU アプリケーションを実行することを開発者にもたらす技術であり、この分野における世界初です。この画期的な成果は、標準的なスレッディングの概念を NVIDIA GPU ワープロップに直接マッピングし、手書きの PTX と比較して零のオーバヘッドを実現します(例えば、通常の `fn main` に `#![feature(portable_simd)]` を付与したソースコードで)。これは、内部の Rust ベースの中間表現(IR)を活用することで可能になっています。システムは要素ごとの算術演算、レーンマスクを生成する比較、それらによる選択操作、およびレーンをまたぐ水平型削減をサポートします。さらに、ワープロンプログラミングのための決定論的なテストを確保し、CPU デバッグツールに匹敵する信頼性を提供する専用参照インタプリタも実装されています。現在では NVIDIA ハードウェア向けに最適化されていますが、アーキテクチャ非依存の IR は、AMD のウェーブフロントおよび Vulkan サブグループ向けにも設計されています。今後の開発では、GPU 向けのスレッド合成や非同期操作の実装、また行列形状の SIMD をテンザコアへの変換(ローリング)が焦点となります。この進展により、業界ユーザーは新たなベクトル型を導入したり膨大なコード書き換えを伴う高コストなアプローチをとらずとも、要素ごとの算術演算と削減を効率的に活用することができます。ただし、制約としては、ベクトル幅の不一致(例:CPU の柔軟な N 対 GPU の固定 32/64 レーン)、およびハードウェアパターンと一致しない跨レーン操作におけるパフォーマンスコストが含まれます。