QBE コンパイラバックエンド 1.3

2026/06/03 2:37

QBE コンパイラバックエンド 1.3

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

要約

Japanese Translation:

改良された要約:

QBE バージョン 1.3 は、バージョン 1.0(大まかには 7k 行の追加と 1.5k 行の削除)に対する飛躍的な進歩を意味し、リンケージとアーキテクチャ互換性の改良—特に Scott Graham が Upstream で導入した

-t amd64_win
フラグを介した Windows 向けのサポート—を通じて、コンパイラを実運用向けに近づけることを目指している。このリリースは、位置不依存コードのサポートを追加し、多くのターゲットで共有オブジェクトのシームレスなリンケージを可能にし、またランタイムではなくリンケージ時に割り当てられるアドレスではなく、実行時において割り当てられるアドレスを表す新しい IL
extern
「動的定数」(DYNCONST)を通じた間接的全局アクセスを追加する。

パフォーマンス最適化は主に coremark 分析に基づいており、標準ベンチマークソースコードを改変せずに GCC の

-O2
パフォーマンスからのギャップを 40% から 63% 以上まで縮めた;対象となった改良(例:
ee_isdigit
のインライン化、
crcu8
の簡素化)により、QBE はその約 70% の目標に達する。主要な最適化には GVN/GCM、ループ最適化、if-elimination、CFG 簡素化が含まれる一方、QBE の関数単位ストリーミングモデルとの互換性を維持するため、インライン化は除外されている。新しい OCaml ツール
mgen
は、算術の結合法や交換法則など複雑なコードパターンを扱い、DAG ナンバーと BitSet を用いたパターンマッチングにより IL パターンに一致する慣用的 C コードを生成する。

ベンチマーク結果では、QBE 1.3 と 1.2 の比較において Hare テストスイートにおける実行時間は 33% 減少した(2.6s から 1.7s に)。出力は AT&T 表記であり、mingw ツールで組み立てるのが最も適している。全体として、QBE 1.3 は Windows とクロスプラットフォーム環境をサポートしつつ、業界標準のコンパイラと現実世界のアプリケーションにおいて競合できる高性能な代替手段としての位置づけを獲得している。

本文

QBE 1.3 リリースノート

QBE 1.3 は、開発に時間を要したにもかかわらず 1.0 以降最も意義深いリリースです。約 7,000 行の新規コードを追加し、約 1,500 行のコードを削除するリファクタリングを実施しました。主な更新点は以下の通りです。

  • 独自のパターニング IL マッチングアルゴリズムを採用
  • Roland Paterson-Jones と Scott Grahamによる新しい最適化機能を追加
  • Michael Forneyの提言に基づき、位置不依存コード(共有オブジェクト動作)の実装を追加
  • チームワークによる成果であり、すべての貢献者に感謝します

より高速化

QBE は常に速度向上への挑戦を続けます。今回は

Coremark
ベンチマークにおいて具体的な最適化課題が浮上し、特に以下の 2 つの関数処理がボトルネックとなっていました:

  • ee_isdigit
  • crcu8

これらは従来の C の慣習(例:論理積演算子として

&&
を用いるなど)に従っておらず、性能に支障をきたしていましたが、QBE のインライン化機能の欠如だけが原因ではないことが分かりました。CPU 依存型コードの大部分はコンパクトなセクションで処理されるという想定通りでした。

実装された最適化

以下の最適化パスを実装し、パフォーマンスを向上させました:

  • GVN/GCM(共有値ノード・グローバル共通部分除去)
  • ループ最適化
  • if-消去
  • CFG の簡素化

達成した成果

  • インライン化を一時的に最適化セットから排除し、他社商用コンパイラに対するスコアを 63% 超えることに成功しました。
  • ベンチマーク自体の修正(
    ee_isdigit
    のインライン化、
    crcu8
    の分岐不使用実装への置換)により、**目標の 70%**を達成しました。

Hare テストスイートでの改善

Hare ユーザー向けにも有益な改善が見られました:

  • qbe-1.2 から 33% の速度向上(1.7 秒 → 2.6 秒へ)を実測

より賢く

QBE は Ken Thompson の Plan9 C コンパイラに触発され、長年「bottom-up 型ツリー番号付けアルゴリズム」を使用してきましたが、算術演算子の結合律と交換律の扱いに微妙な課題がありました。

新しい OCaml ツール「mgen」の導入

QBE 1.3 でこの課題をメタプログラミングにより解決。新ツール

mgen
が以下の機能を提供します:

  • lispy 形式の IL パターンを C コードへコンパイル
  • IL パターンを含む特別コメントブロックを検出し、該当箇所にマッチする C コードを自動インライン化
  • 生成されたコードは QBE 内の慣習的な記述に準拠し、1.3 以前のロジックと同等の動作を保証

命令 DAG と番号付け

  • 命令 DAG(Directed Acyclic Graph)を Ken Thompson コンパイラと同様の手法で番号付け
  • mgen
    が各ノードに対し、トップレベルユーザーパターンとの一致度をビットセットで関連付け
  • 最適なパターンは手書きロジックにより選択され、変数を含む場合はマッチプログラム実行を通じて収集

将来の展開

mgen
は以下への拡張が予定されています:

  • 多様なバックエンドにおける命令選択の簡素化
  • IL パターン(例:ビット回転)の認識による最適化パス強化

より使いやすく

Windows ABI の対応

Scott Graham が貢献してくれたWindows ABI のアップストリーム実装が採用されました。

  • 生成されるアセンブリは引き続き AT&T スキプトを使用
  • mingw アンセーブラとの相性が最適ですが、Windows 環境でのテストは行われていません
  • Windows 向けコンパイルには以下のオプションを使用します:
qbe -t amd64_win <input.c>

位置不依存コード(PIC)の大幅強化

共有オブジェクト生成が今やほぼ全てのターゲットで問題なくリンク可能になりました。

  • 主な障害物だったグローバル変数の間接アクセス(例:ELF のグロバルオフセットテーブル)をサポート
  • 新しい IL の外部フラグ
    DYNCONST
    (動的定数)を導入し、IL レベルからサポート

動的リンクライブラリでの変数アクセスの例

動的リンカーが割り当てる実行時アドレスシンボルにアクセスするには:

function w $load() {
    @start
        %v =w load extern $dlvar
        ret %v
}

用語解説:「動的定数」

このオキシモロンな用語は以下の理由で使用されています:

  • コンパイル時の静的リンクフェーズではなく、ランタイムまたはダイナミックリンカーで割り当てられる
  • アドレスシンボルが実行時においてのみ既知であるため(=動的)

同じ日のほかのニュース

一覧に戻る →

2026/06/03 3:47

MAI コード 1 のフラッシュ処理

## Japanese Translation: 以下の内容は、Key Points List に含まれていた欠落していた具体的な指標およびデータポイントを統合しつつ、明瞭さを維持した改良されたバージョンです。 **Improved Summary:** MAI-Code-1-Flash は、実稼働環境で使用される GitHub Copilot harness を直接トレーニングによって訓練され、現実世界の agentic タスクを処理するコーディング AI における画期的な進歩を表します。以前の手法では正確性と効率性は排他的なものとして扱われていましたが、本モデルはこれらがシームレスに共存できることを実証しました。適応的なソリューション長制御を活用し、推論の深さを動的に調整することで、単純なリクエストには簡潔に応答し、複雑な問題にはより多くの予算を割く仕組みです。その結果、開発者は競合製品である Claude Haiku 4.5 に比べて最大 60% も少ないトークンで有用な出力をより早期に受け取り、レイテンシと運用コストを大幅に削減できます。 同じプロダクション harness 内での多様なデータセット(SWE-Bench Verified、SWE-Bench Multilingual、SWE-Bench Pro、Terminal Bench 2)を含む評価が、優位性の高いパフォーマンスを確認しました。MAI-Code-1-Flash は、テストされたすべてのコアコーディングベンチマークにおいて Claude Haiku 4.5 を凌駕し、多様で現実世界のタスクである SWE-Bench Pro で注目される +16 ポイントのリード(51.2% vs. 35.2%)を達成しました。これらの結果は、MAI-Code-1-Flash を使用する場合、より高い正確性と更大なる効率がもはやトレードオフではないことを検証し、インタラクティブなコーディングワークフローを滑らかにしつつ、全体の生産性を最適化するためのトークン投資を実現します。

2026/06/03 5:30

BYD の車部品 CT 走査検査

## Japanese Translation: 主な洞察は、現代のペットボトルが数十年前進化する工学によって最適化されており、シュリンクラップ、積み重ね、粗悪な取扱いなどに対して耐え抜き、産業物流に適合するように設計されているにもかかわらず、開封した後は実用的な使用時間がわずか数秒しかないという点にあります。この耐久性のパラドックスは、長距離輸送での耐久性に大規模な投資を行いながら製品を瞬時に廃棄するという重大な非効率性を浮き彫りにしています。重量のあるガラス(コカ・コーラの 1899 年の製瓶;エビアンが数世紀の陶器製の壺の使用の後、1908年にガラスへ転換)からプラスチックへの進化は、コスト、安全性、重量削減によって推進されました。初期のプラスチック試作には、モンサント社の「Easy-Goer」アクリロニトリルコポリマー(1975 年)があり、それが漏出と動物毒性に関する懸念から 1977年にFDA にて禁止されました。これにより、デュポン社が Polyethylene Terephthalate(PET)を導入した 1967–1973 年へと道が開かれました。1970年代後半には、大型の 2リットルボトル用の PET 生産が始まり、初期デザインは最大 96 g の重量を持ち、接着剤を用いたベースと 0.3–0.4 mm の壁厚を特徴としていました。1990年代初頭の革新としては、接着剤を使用しない「Petaloid」ベースや、より薄い壁(例:アクアフィナで約 0.2 mm)を採用するものがあり、材料使用量を大幅に削減しました。それ以降のさらなる進歩—例えば、ニージャラ・ボトルリング社の Eco-Air デザインが厚さ 0.17 mm 以下を達成し、1998年から現在にかけてプラスチック使用量を 60%削減した事例や、半リットルボトルが 2000年代中期のバージョンと比較して 75%少ないプラスチックを使用した事例—は、継続的な効率向上を反映しています。これらの進歩は企業の戦略とも整合しており、ネスレ社がペリエ社を買収(1992年)や、ペプシ/コカ・コーラがアクアフィナとダサニを中〜後半の 1990年代に発売したことは、ソーダ販売の減少への対応として行われました。しかし環境上の課題は依然として残っています。リサイクルシステムが材料の分離や汚染管理—if 特に破砕されたガラスが多材料ストリームに混入し、新しい容器にとって使用不可能になる—を失敗した場合、これらの良質に設計されたボトルは多くが埋め立て地に行き着いたり、下位利用されたりします。将来の進歩には、スマートなデザイン、厳格な材料分離プロトコル、改善されたリサイクルインフラストラクチャを通じて、サプライチェーンの耐性と廃棄物削減を調和させる必要があります。 ## Text to translate: The primary insight is that modern water bottles represent decades of advanced engineering optimized for robust industrial logistics—surviving shrink-wrapping, stacking, and rough handling—even though they have only seconds of practical use once opened. This durability paradox highlights a major inefficiency: investing heavily in long-haul resilience while discarding the product instantly. The evolution from heavy glass (Coca-Cola's 1899 bottling; Evian's switch to glass in 1908 after decades of earthenware jugs) to plastics was driven by cost, safety, and weight reductions. Early plastic attempts included Monsanto's "Easy-Goer" acrylonitrile copolymer (1975), which faced FDA bans in 1977 due to leaching and animal toxicity concerns, paving the way for DuPont's Polyethylene Terephthalate (PET) introduced around 1967–1973. By the late 1970s, PET production for large two-liter bottles began, with early designs weighing up to 96 g, featuring glued bases and wall thicknesses of 0.3–0.4 mm. Innovations in the early 1990s, such as "Petaloid" bases that eliminated glue and thinner walls (e.g., Aquafina at ~0.2 mm), cut material use significantly. Further advances since then—such as Niagara Bottling's Eco-Air designs under 0.17 mm thickness, which achieved a 60% plastic reduction from 1998 to today, and half-liter bottles using 75% less plastic than mid-2000s versions—reflect ongoing efficiency gains. These advances also align with corporate strategy: Nestlé's acquisition of Perrier (1992), and Pepsi/Coke launching Aquafina and Dasani in the mid-to-late 1990s, all in response to declining soda sales. Yet environmental challenges remain. If recycling systems fail to separate materials or manage contamination—especially with crushed glass mixed into multimaterial streams that become unusable for new containers—these well-engineered bottles often end up landfilled or downcycled. Future progress must reconcile supply chain resilience with waste reduction through smarter design, stricter material separation protocols, and improved recycling infrastructure.

2026/06/03 4:27

「グメールが私をおろかに思っている」と感じたので、退社しました。

## Japanese Translation: 著者は、嫌悪感と軽慢さを感じてしまう強制的な AI 機能のため、16 年使用してきた Gmail アカウントを恒久離脱することにした。具体的な問題は、不要なメッセージの要約、自動補填された返信文、そして「メールを書いてください」、「Tab で改善する」など、ユーザー自身がメールを作成できないか、あるいは受信者への時間の価値が低いことを示唆するような常駐的なプロンプト(促し)が含まれる。一部の AI 機能はオフにすることもできるが、それを行うことで自動的なスレッド分類といった長く使い続けられ有用な機能を犠牲にせざるを得なくなる。著者は、これらの強制的な機能が真のユーザーニーズを満たすためではなく、言語モデルの利用指標を人為的に高めるための意図的な戦術であることを疑っている。Google の従来からある安定したサービスや、fediverse を通じて独自ドメインと接続して使用している Fastmail での良好な第一印象とは裏腹に、著者はこの移行を Google エコシステムからの故意の断絶——単なるクライアントの切り替えではない——と捉えている。著者は連絡先を移す予定だが、歴史のあるメールスレッドはインポートせず、「不快な経験」として記述する後に「きれいな決別」を図る打算である。この状況はより広範な懸念を示している:技術企業は、ユーザーの自律性や長期的な信頼よりもエンゲージメントデータを優先することで、忠実な顧客を失うリスクを抱えている。 ## Text to translate: Improved Summary: The author is permanently leaving their 16-year-old Gmail account due to mandatory AI features they find intrusive and disrespectful. Specific issues include unsolicited message summaries, pre-filled replies, and persistent prompts ("help me write," "Tab to improve") that imply the user cannot compose emails themselves or that recipients do not deserve their time. While some AI features can be disabled, doing so forces users to sacrifice long-standing, useful functions like automatic thread categorization. The author suspects these unsolicited features are intentional tactics to artificially inflate language model usage metrics rather than serve genuine user needs. Despite Google's historically stable service and positive first impressions with Fastmail (which they have connected their custom domain to and use via the fediverse), the author views this move as a deliberate break from Google's ecosystem—not merely a client switch. They plan to migrate their contacts but will not import historical email threads, seeking a "clean break" after what they describe as a "bad taste" experience. The situation highlights a broader concern: tech companies risk losing loyal customers by prioritizing engagement data over user autonomy and long-term trust.