コンパイラ技術まとめ
コンパイラ, またはコンパイリング技術まとめ.
🐥Glossary
📝コンパイル
コンパイリング. Compliation.
高水準のプログラミング言語で書かれたプログラムをそれより低い水準の言語や機械語に変換すること.
- コンパイルをするソフトウェアがコンパイラ.
- 逆変換はデコンパイル(decompile).
- cf. 📝インタプリタ, コンパイル不要でプログラムをランタイム実行.
📝ビルド
コンパイルしたファイルをまとめて実行ファイルにすること.
📝トランスパイル
transpile. あるプログラミング言語を別のプログラミング言語に変換すること.
- compileは低水準言語(機械語)への変換だが, transpileは別の高級言語への変換.
- ex. ) ClojureScript -> JavaScript
- translation + compileの造語.
💻ソースコード
プログラムが書かれたテキスト. ソース(src), コード(code).
📝プログラム(Program)がファイルで保存されているもの.
📝ソースコード
📝文字列で表現されたコード.
📝バイトコード
bytecode. 中間表現のコードの総称.
バイナリプログラム, 📝バイナリで記述されたコードだが, バイナリコードもバイトコードということが多い.
📝機械語
機械語とは、コンピュータの CPU で直接実行される一連の命令.
一つ一つの命令が行う仕事は極めて限定されており、CPU のレジスタやメモリ上の単位データに対して、読み込みやジャンプ、ALU といった操作を実行する。
機械語は, レジスタ、プロセッサを用いて、メモリを操作する.
📝アセンブリ言語は機械語を人間にわかりやすい形で記述する.
🔖コンパイル言語
コンパイル戦略
📝AOT compilation
事前コンパイル, AOTはAhead-of-timeの略.
アプリケーション実行前に事前にコンパイルすること.
JVM系言語のバイトコンパイルの文脈でよく登場する. C言語やC++では事前コンパイルが当たり前のため, 単にコンパイルと言われる.
対義語は📝JIT compilation.
📝JIT compilation
実行時コンパイル, JITはJust-In-Timeの略.
ソフトウェアの実行時にコードのコンパイルを行うことで実行速度の向上を図る.
インタプリタのJITコンパイルによって高速化!という文脈で登場することが多い. またはJITによってJavaでもJShellのようなREPLを実現する.
対義語はAOT.
📝トランスコンパイラ
トランスコンパイラ, トランスパイラ.
トランスコンパイラは同じ程度の(抽象化の)水準のコードをコンパイル結果として出力.
Topics
AOTコンパイルとJITコンパイルの違いはなんですか?
AOTは事前に機械語にコンパイルする, JITは実行時に機械語にコンパイルする.