忍者ブログ
情報処理技術者試験の合格を目指す全受験者のための、1問1問「徹底解説」ブログです。単なる過去問の暗記ではなく、なぜその答えになるのかを本質的に理解できるよう解説します。書籍などでは学べない最新用語やトレンドを踏まえてご紹介します。

【プログラミング言語・コンパイラ】共通の中間表現で最適化&マルチプラットフォーム化!「LLVM」|情報処理問題1000本ノック

ClangやRust、Swiftなどの現代のプログラミング言語・コンパイラの基盤として欠かせない技術。「LLVM」の構造と中間表現(IR)による最適化のメリットを攻略しましょう。

1. 【 問題 】:ソフトウェア・プログラミング(コンパイラ・開発環境)

【 問題 】 コンパイラ基盤技術に関する記述です。ソースコードを一度特定の環境に依存しない中間表現(IR)に変換し、その上で共通の最適化処理を行い、標的とするプラットフォーム(CPUアーキテクチャ)に応じた高度な機械語コード(実行ファイル)を生成するコンパイラ基盤技術は、次のうちどれか。

(ア)JVM(Java Virtual Machine)
(イ)JIT(Just-In-Time Compiler)
(ウ)LLVM
(エ)GCC(GNU Compiler Collection)

2. 正解:

正解:(ウ)LLVM

3. 解説:「『言語(フロントエンド)』と『CPU(バックエンド)』を中間表現で分離する!」

従来のコンパイラは「言語ごと」「CPUアーキテクチャごと」に個別のコンパイラを作る必要があり非常に大変でした。
LLVMはコンパイラを「フロントエンド(言語処理)」「共通最適化」「バックエンド(機械語生成)」の3つに明確に分離し、すべてを共通の**中間表現(LLVM IR)**で仲介する設計を採用しています。

【LLVMの3段構造(アーキテクチャ)のイメージ】 ← 超重要コンセプト!

フェーズ担当・役割具体的な言語・CPU等
フロントエンド ソースコードを解析し、中間表現(LLVM IR)に変換する。 C/C++(Clang)、Rust(rustc)、Swift、Kotlin等
共通最適化 LLVM IRの状態で、コードの無駄を省き最高スピードへ最適化する。 LLVMオプティマイザ(共通で利用可能)
バックエンド LLVM IRからターゲットCPU向けの機械語(実行ファイル)を出力する。 x86/x64、ARM(スマホ等)、RISC-V、WebAssembly等

1. 理解のコツ: 「世界の言語を日本語(中間表現)に翻訳する万能翻訳チーム」で例えてみましょう。
・英語・フランス語・中国語をまず「日本語(IR)」に翻訳し、推敲・推敲して完璧な文章(最適化)にした後で、目的の相手(Intel CPUやARM CPU)の言葉に変換して届けます。
・新しい言語を作る際も、中間表現(IR)さえ出せれば、一瞬で全CPU対応の超高速コンパイラが作れます!

2. 試験対策の視点: 開発環境・コンパイラ技術の最新動向で注目されるキーワードです。
問題文に「中間表現(IR)」「コンパイラ基盤」「プラットフォームに応じたコード生成」「ClangやRustの基盤」といったキーワードが出たら、迷わずLLVMを選択しましょう!


4. まとめ

ソースコードを仮想マシン向けの中間表現(LLVM IR)に変換・最適化し、各種プラットフォームに合わせた実行ファイルを生成するコンパイラ基盤。これがLLVMです。近代プログラミング言語を支える重要技術としてしっかり押さえておきましょう!

PR