コンピューティングにおいて、コピー&パッチコンパイルとは、ジャストインタイムコンパイル(JITコンパイル)を目的としたシンプルなコンパイラ技術です。パターンマッチングを用いて、事前に生成されたテンプレートを抽象構文木(AST)またはバイトコードストリームの一部と照合し、対応する事前に記述されたマシンコードフラグメントを出力します。これらのマシンコードフラグメントは、メモリアドレス、レジスタアドレス、定数、その他のパラメータを挿入するようにパッチが適用され、実行可能コードが生成されます。テンプレートに一致しないコードは、通常の方法で解釈されるか、インタープリタコードを直接呼び出すように作成されたコードになります。
コンピレーション
コピー アンド パッチは、より厳密な手法よりも桁違いに高速なコンパイルに対する「手っ取り早い」アプローチですが、多くの場合、それらの手法によって生成された部分的に最適化されたコードのパフォーマンスに近づくことができるコードが生成されます。
コピーアンドパッチは、2021年の論文でフレドリック・キョルスタッドとハオラン・シューによって初めて説明されました。[1]
2023年時点で、徐はインタープリタプリミティブの高水準言語記述に基づいてテンプレートを自動生成するLua[update]の実装に取り組んでいた。 [2]
2024年現在、 Python[update] 3.13 JITコンパイラではバイトコードベースのコピーアンドパッチ実装が使用されていました。[3] [4]
参照
参考文献
- ^ Xu, Haoran; Kjolstad, Fredrik (2021-10-15). 「コピー・アンド・パッチ・コンパイル:高水準言語とバイトコードのための高速コンパイルアルゴリズム」ACM on Programming Languages 誌5 ( OOPSLA): 136:1–136:30. arXiv : 2011.13127 . doi :10.1145/3485513.
- ^ Xu, Haoran (2023-05-12). 「Lua用のベースラインJITを自動的に構築する」sillycross.github.io . 2024年1月11日閲覧。
- ^ 「Python 3.13はJITを取得」tonybaloney.github.io . 2024年1月9日閲覧。
- ^ 「GH-113464: brandtbucherによるコピー&パッチJITコンパイラ · Pull Request #113465 · python/cpython」。GitHub 。2024年1月9日閲覧。