言語処理系
ソースコードを実行可能にする処理系。コンパイラとインタプリタは「いつ機械語にするか」の軸上の位置の違い。
ソースコードを実行可能にする処理系。
2 つの方式#
| コンパイラ | インタプリタ | |
|---|---|---|
| 変換の時期 | 実行前に一括 | 実行しながら |
| 実行速度 | 速い | 遅い |
| 起動 | 遅い(ビルドが要る) | 速い |
| 誤りの発見 | 実行前 | 到達したとき |
| 移植性 | 対象ごとにビルド | 処理系があれば動く |
実際には混ざっている#
純粋なコンパイラ/インタプリタは少ない。
Java … [[AOTコンパイル|AOT]] で [[バイトコード]] → JVM が [[JITコンパイル|JIT]]
Python … バイトコードにコンパイル → VM が解釈
JS … 解釈で開始 → 熱いコードを JIT
Swift … LLVM で AOT ネイティブいつ機械語にするかという時間軸の上に、 各処理系が異なる位置を占めていると見るのが分かりやすい。
構成#
参考文献#
- Alfred V. Aho, Monica S. Lam, Ravi Sethi, Jeffrey D. Ullman. Compilers: Principles, Techniques, and Tools, 2nd ed. Pearson, 2006.
- Robert Nystrom. Crafting Interpreters. Genever Benning, 2021.(全文公開) https://craftinginterpreters.com/