言語処理系

言語処理系

ソースコードを実行可能にする処理系。コンパイラとインタプリタは「いつ機械語にするか」の軸上の位置の違い。

執筆済 コンピュータ言語処理系

ソースコードを実行可能にする処理系。

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/
ノート一覧を閉じる