コンパイラ
実行前にプログラム全体を機械語に変換。
コンパイラは、C++、Java、Pythonなどの高水準プログラミング言語で書かれたソースコードを、コンピューターのプロセッサが理解して実行できる低水準言語、通常はマシンコードまたは中間表現(バイトコードなど)に変換する特殊な種類のコンピュータープログラムです。コンパイルとして知られるこの変換プロセスには、いくつかの段階が含まれます。まず、ソースコードがスキャンされ、トークンに分解されます(字句解析)。次に、これらのトークンは言語の文法に基づいて階層構造に整理されます(構文解析またはパーシング)。多くの場合、抽象構文木(AST)が作成されます。その後、意味解析が行われ、意味と型の整合性がチェックされます。中間コード生成により、マシンに依存しない表現が作成されます。最後に、最適化技術が適用されてコードの効率が向上し、ターゲットアーキテクチャ固有のマシンコードが生成されます(コード生成)。コンパイラはソフトウェア開発に不可欠であり、開発者が人間が読める言語でコードを記述し、それがハードウェアによって効率的に実行されることを保証します。トレードオフとして、コンパイルプロセス自体に時間とリソースが必要となる点が挙げられます。これは、個別の事前コンパイルステップなしにコードを一行ずつ実行するインタプリタ言語と比較した場合です。
graph LR
Center["コンパイラ"]:::main
Rel_interpreter["interpreter"]:::related -.-> Center
click Rel_interpreter "/terms/interpreter"
Rel_function["function"]:::related -.-> Center
click Rel_function "/terms/function"
Rel_functional_programming["functional-programming"]:::related -.-> Center
click Rel_functional_programming "/terms/functional-programming"
classDef main fill:#7c3aed,stroke:#8b5cf6,stroke-width:2px,color:white,font-weight:bold,rx:5,ry:5;
classDef pre fill:#0f172a,stroke:#3b82f6,color:#94a3b8,rx:5,ry:5;
classDef child fill:#0f172a,stroke:#10b981,color:#94a3b8,rx:5,ry:5;
classDef related fill:#0f172a,stroke:#8b5cf6,stroke-dasharray: 5 5,color:#94a3b8,rx:5,ry:5;
linkStyle default stroke:#4b5563,stroke-width:2px;
🧠 理解度チェック
🧒 5歳でもわかるように説明
フランス語の本を丸ごと読んで、あなたが読む前に日本語で書き直してくれる翻訳者のようなものです。最初は時間がかかりますが、完成版は超高速で読めます。
🤓 Expert Deep Dive
コンパイルプロセスは、プログラムの高水準で抽象的な表現を、ターゲットマシンの具体的で低水準な命令にマッピングするように設計された複雑な変換シーケンスです。最新のコンパイラは、静的単一代入(SSA)形式、ループ展開、命令スケジューリング、デッドコード削除など、洗練された最適化技術を採用しており、実行時間とメモリフットプリントを最小限に抑えることを目指しています。LLVM IRやJavaバイトコードのような中間表現(IR)は、リターゲティングとモジュラー最適化パスを容易にします。実行時コンパイル(JIT)は、実行前にコンパイル(AOT)とインタプリタの間のギャップを埋め、実行中にコードをコンパイルしてパフォーマンスを向上させます。コンパイラ設計には、コンパイル速度、最適化の徹底度、生成されたコードのパフォーマンスの間で複雑なトレードオフが伴います。コンパイラの正確性を保証するために、形式手法とコンパイラ検証技術が採用されており, 最適化やコード生成から生じる可能性のある微妙なバグを最小限に抑えています。