【こんぱいる】

コンパイル とは?

💡 人間が書いたコードをコンピュータが読める言語に「翻訳」する処理
📌 このページのポイント
コンパイル vs インタプリタ コンパイラ(一括変換) ソース コード 字句解析 構文解析 最適化 機械語 (実行ファイル) {'x = 1 + 2;'} トークン分割 AST構築 不要コード削除 0101... インタプリタ(1行ずつ実行) 1行目: x = 1 2行目: y = 2 3行目: z = x+y 解釈→即実行 解釈→即実行 解釈→即実行 比較 コンパイラ:実行速度が速い インタプリタ:開発が手軽 例: C, Go / Python, Ruby JITコンパイラはインタプリタ+コンパイラのハイブリッド方式
コンパイルの流れ
ひよこ ひよこ

コンパイルって何のためにするの?

ペンギン先生 ペンギン先生

コンピュータはCやJavaで書いたコードを直接は理解できないから、機械語(0と1の命令)に変換する必要がある。コンパイルはその「翻訳作業」だよ。

ひよこ ひよこ

Pythonはコンパイルしないよね?

ペンギン先生 ペンギン先生

Pythonはインタープリタ型で、コンパイルなしに1行ずつ実行する。手軽に動かせる反面、一般にコンパイル言語より実行速度が遅い。ただしPythonも内部的には中間コード(バイトコード)に変換している。

ひよこ ひよこ

コンパイルのメリットは?

ペンギン先生 ペンギン先生

①実行速度が速い(機械語に変換済みだから)②コンパイル時にエラーを検出できる(型エラーや構文エラーを実行前に発見)。大規模・パフォーマンスが重要なシステムではコンパイル言語が使われることが多い。

ひよこ ひよこ

JIT(ジット)コンパイルって何?普通のコンパイルとどう違うの?

ペンギン先生 ペンギン先生

JIT(Just-In-Time)は実行時にコンパイルする方式で、事前コンパイル(AOT: Ahead-Of-Time)との中間的な存在だよ。Javaは.classファイル(バイトコード)にコンパイルしてから、JVMがJITで機械語に変換する。V8エンジン(Chrome/Node.js)もJavaScriptをJITコンパイルするんだ。面白いのは、JITは「よく実行されるコード(ホットスポット)」を重点的に最適化するから、場合によっては事前コンパイルより速くなることもあるんだよ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
コンパイルって出てきたら「ソースコードをコンピュータが実行できる機械語に変換するプロセス」と思えばOK!
📖 おまけ:英語の意味
「Compile」 = 編集する・まとめる
💬 複数のソースファイルを「まとめて(compile)」機械語に変換することから。コンパイラはコンパイルを行うプログラム
← 用語集にもどる