コンパイラがあなたを驚かせる時

---  
*Titleの翻訳は「コンパイラがあなたを驚かせるとき」としました。長さや意味は元の英語に合わせつつ、自然で丁寧な日本語にしています。

2025/12/24 22:27

コンパイラがあなたを驚かせる時 --- *Titleの翻訳は「コンパイラがあなたを驚かせるとき」としました。長さや意味は元の英語に合わせつつ、自然で丁寧な日本語にしています。

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

要約

Japanese Translation:

記事では、現代のコンパイラが整数をある値まで合計する単純なループを即座に1行の計算に変える方法を示しています。最大最適化(-O3)で実行されたGCCは、低レベル命令(

lea
とベクトル化加算)を使用してループを書き換え、一サイクルあたり2つの数値を処理できるようにし、イテレーション回数を半分に削減します。Clangはさらに進みます:正の値の場合、ループ全体を完全に排除し、閉形式式 (v(v-1)/2) をアセンブリで
imul
shr
、そして最後に
ret
で直接計算します。著者は生成されたコードからこの結果を導き出し、コンパイラが最適化中に代数的恒等式をどのように発見するかを示しています。この投稿は Matt Godbolt の「Advent of Compiler Optimisations 2025」シリーズ(24 Dec 2025 06:00 CST)の一部であり、LLM と人間によってレビューされました。著者は20年の経験後に得た驚きとインスピレーションを指摘し、将来のコンパイラリリースでも同様のパターン認識最適化が登場し続けることを示唆しています

本文

私は自分で書き、LLM に校正してもらったものです。
詳細は最後にあります。

たまにコンパイラが本当に賢いテクニックを見せてくれることがあります。最初にこの最適化を目にしたとき、ほぼ信じられませんでした。私はループ最適化を調べており、与えられた値までの全数を足し合わせるだけのシンプルな関数を書いていました。

...

ここまではまあまあで、GCC はいくつかの前処理チェックを行った後、

lea
を使って効率的に数値を足し合わせるループに落ち込みます(以前見たことがあります)。しかしループをもう少し掘り下げてみると、何か変わった点があるのです。

.L3:
  lea edx, [rdx+1+rax*2]        ; result = result + 1 + x*2
  add eax, 2                    ; x += 2
  cmp edi, eax                  ; x != value
  jne .L3                       ; keep looping

コンパイラは巧妙に、

x
x+1
を足し合わせることが同じく
x*2 + 1
になると判断し、一度に二つの数を処理できるようにしました。非常に狡猾ですね! -O3 にするとさらにハードで、並列加算を使ってループをベクトル化します。すべてが非常に賢明です。

これは GCC の話でした。では Clang は同じコードをどう扱うのでしょうか。

...

ここで私は椅子から落ちそうになりました:実際にはループがありません!Clang は正の値をチェックし、もしあれば次のようにします。

  lea eax, [rdi - 1]        ; eax = value - 1
  lea ecx, [rdi - 2]        ; ecx = value - 2
  imul rcx, rax             ; rcx = (value - 1) * (value - 2)
  shr rcx                   ; rcx >>= 1
  lea eax, [rdi + rcx]      ; eax = value + rcx
  dec eax                   ; --eax
  ret

ここで何が起きているのか、私には全く直感できませんでした。式を少し逆算すると、以下と等価です。

v + ((v - 1)(v - 2) / 2) - 1;

括弧を展開してみると:

v + (v² - 2v - v + 2) / 2 - 1

少し並べ替えると:

(v² - 3v + 2) / 2 + (v - 1)

(v - 1)
2/2
と掛けて統一すると:

(v² - 3v + 2) / 2 + (2v - 2)/2

これらを合体させ、約分すると:

...

簡略化して因数分解すると

v(v - 1) / 2
が得られます。これは「整数の総和」の閉形式解です! 本当に驚くべきことで、書いた O(n) アルゴリズムが O(1) に変わったのです。

私は二十年以上コンパイラを扱ってきましたが、それでもまだ驚かされることがあります。コンパイラを素晴らしくするために注ぎ込まれた経験と努力は本当に謙虚で、刺激的です。

このシリーズももう終わりに近づいています – もっと話したいことは山ほどありますが、それは次の機会に。明日は少し違う内容になります:それではまた!

この記事には付随する動画があります。

これは「2025年コンパイラ最適化 Advent of Compiler Optimisations」シリーズ第24日目です。25日間にわたり、コンパイラが私たちのコードをどのように変換してくれるかを探ります。
この記事は人間(Matt Godbolt)によって書かれ、LLM と人間によってレビューと校正が行われました。

Compiler Explorer を Patreon または GitHub でサポートするか、コンパイラエクスプローラーショップで CE 製品を購入してください。

2025年12月24日06:00:00 CST に投稿しました。

同じ日のほかのニュース

一覧に戻る →

2025/12/25 4:42

Show HN:ブラウザ内で動作し、すべてのデータをURLに保存するミニマリストエディタ

## Japanese Translation: GitHub は、Copilot、Spark、Models、および MCP Registry といった AI 搭載のエンタープライズグレードツール群を拡充し、開発者がより速く質の高いコードを書けるようにしています。これら新しいオファリングは、Actions、Codespaces、Issues、作業計画・追跡、コードレビュー、変更管理といった既存のワークフローを補完し、自動化やモデル用プロンプト管理、シークレット保護や脅威検知などのセキュリティ制御を追加します。企業向けには、Advanced Security、Copilot for Business、プレミアム 24/7 サポート、および標準的な DevSecOps パイプラインに組み込める AI 強化ビジネス分析などのエンタープライズ アドオンを導入しています。同時に、GitHub は Sponsors ファンディングや Security Lab、Maintainer Community、Accelerator、Archive Program などのプログラムを通じてオープンソース エコシステムを強化し、プロジェクトを健全に保ちます。総合的な目標は、個人貢献者、小規模チーム、大企業を問わず、医療・金融・製造・政府などさまざまな業界で利用できる、一貫性があり、安全かつ知能的な開発体験を提供することです。

2025/12/25 2:49

Show HN:Vibium ― AIと人間向けのブラウザ自動化(Selenium創設者による)

## Japanese Translation: Vibiumは軽量でGoベースのブラウザ自動化ライブラリで、AIエージェントが最小限のオーバーヘッドでChromeを制御できるようにします。単一の約10 MBバイナリとして配布され、WebDriver BiDiプロトコルとMCPサーバーを使用してブラウザを管理し、自動待機、要素ポーリング、ビューポートスクリーンショット(PNG)、不可視実行などの機能を提供します。開発者は `npm install vibium` でインストールでき、ライブラリは同期 (`browserSync`) と非同期 (`browser`) の両方のJavaScript/TypeScript APIを公開し、一般的なブラウザ操作に対応しています。 Claude Codeエージェントは次のように一歩でブラウザ制御を追加できます: `claude mcp add vibium -- npx -y vibium`; これによりセットアップ時にChromeも自動ダウンロードされます。ツールはLinux x64、macOS Intel x64、macOS Apple‑Silicon arm64、およびWindows x64をサポートし、Chromeとchromedriverをローカルにキャッシュしますが、`VIBIUM_SKIP_BROWSER_DOWNLOAD=1` を設定するとダウンロードをスキップできます。 主要なエージェントツールは次の通りです: - `browser_launch` - `browser_navigate` - `browser_find` - `browser_click` - `browser_type` - `browser_screenshot` - `browser_quit` VibiumはApache 2.0ライセンスでオープンソース化され、2025‑12‑22にnpmへ公開されました。将来計画(Roadmap V2)にはPython/Javaクライアント、Cortexメモリ/ナビゲーションレイヤー、Retina録画、動画キャプチャ、およびAI駆動のロケータが追加予定です。開発ガイドラインは `CONTRIBUTING.md` に、ロードマップ詳細は `V2-ROADMAP.md` に記載されています。このライブラリはAIエージェント向けにブラウザ自動化を簡素化し、開発者、テスター、およびデータ抽出ワークフローの利便性を高めることを目指しています。

2025/12/25 6:02

NVIDIAは、AIチップスタートアップGroqを約200億ドル(現金)で買収しています。

## Japanese Translation: (日本語訳) **改訂サマリー** Nvidia は、Groq の全資産を 200 億ドルの現金で買収することに合意し、同社史上最大規模の買収となります。この取引は、2023 年 9 月に Groq が約 6.9 億ドルの評価額で 7 億5,000 万ドルを調達した資金調達ラウンドと、Nvidia に対する推論技術の非独占ライセンス契約(価格は未公開)に続くものです。主要創業者である CEO のジョナサン・ロス氏と社長のサニー・マドラ氏を含む幹部が、ライセンス取得した技術を推進するために Nvidia に加わります。一方、Groq は財務責任者シモン・エドワーズ氏が率いる独立企業として残り、GroqCloud は取引の対象外であり、そのまま運営され続けます。 Nvidia は Groq の低レイテンシプロセッサを AI ファクトリーアーキテクチャに統合し、より広範な推論およびリアルタイムワークロードを実現すると同時に、GroqCloud を別個に保つ計画です。この買収は、10 月末時点で Nvidia の現金及び短期投資が 606 億ドル(2023 年初頭の 133 億ドルから増加)だったことを受けて行われました。 Groq は本年の売上高を 5 億ドルと目標設定しており、これは大規模言語モデル推論用 AI アクセラレータチップへの需要によって牽引されます。この動きは、Enfabrica との同様だが規模が小さい 9 億ドルの取引(CEO の採用と技術ライセンス)に続くものです。Nvidia の買収は歴史上最大の購入者として位置付けられ、ハードウェアポートフォリオとクラウドサービス提供への影響を拡大し、アクセラレータチップ市場で競合他社に影響を与える可能性があります。