コピー&パッチ

Compiler technique

コンピューティングにおいてコピー&パッチコンパイルとは、ジャストインタイムコンパイル(JITコンパイル)を目的としたシンプルなコンパイラ技術です。パターンマッチングを用いて、事前に生成されたテンプレートを抽象構文木(AST)またはバイトコードストリームの一部と照合し、対応する事前に記述されたマシンコードフラグメントを出力します。これらのマシンコードフラグメントは、メモリアドレスレジスタアドレス、定数、その他のパラメータを挿入するようにパッチが適用され、実行可能コードが生成されます。テンプレートに一致しないコードは、通常の方法で解釈されるか、インタープリタコードを直接呼び出すように作成されたコードになります。

コンピレーション

コピー アンド パッチは、より厳密な手法よりも桁違いに高速なコンパイルに対する「手っ取り早い」アプローチですが、多くの場合、それらの手法によって生成された部分的に最適化されたコードのパフォーマンスに近づくことができるコードが生成されます。

コピーアンドパッチは、2021年の論文でフレドリック・キョルスタッドとハオラン・シューによって初めて説明されました。[1]

2023年時点で、徐はインタープリタプリミティブの高水準言語記述に基づいてテンプレートを自動生成するLua[update]の実装に取り​​組んでいた。 [2]

2024年現在、 Python[update] 3.13 JITコンパイラではバイトコードベースのコピーアンドパッチ実装が使用されていました[3] [4]

参照

参考文献

  1. ^ Xu, Haoran; Kjolstad, Fredrik (2021-10-15). 「コピー・アンド・パッチ・コンパイル:高水準言語とバイトコードのための高速コンパイルアルゴリズム」ACM on Programming Languages 誌5 ( OOPSLA): 136:1–136:30. arXiv : 2011.13127 . doi :10.1145/3485513.
  2. ^ Xu, Haoran (2023-05-12). 「Lua用のベースラインJITを自動的に構築する」sillycross.github.io . 2024年1月11日閲覧。
  3. ^ 「Python 3.13はJITを取得」tonybaloney.github.io . 2024年1月9日閲覧
  4. ^ 「GH-113464: brandtbucherによるコピー&パッチJITコンパイラ · Pull Request #113465 · python/cpython」。GitHub 2024年1月9日閲覧
Retrieved from "https://en.wikipedia.org/w/index.php?title=Copy-and-patch&oldid=1316709730"