# HG changeset patch # User Takahiro SHIMIZU # Date 1543545889 -32400 # Node ID dec42afa6aaa03906f8584541160475267596312 # Parent 7aa749f9d936825fcacd6d3b1e7d8db5ab5c4dce update diff -r 7aa749f9d936 -r dec42afa6aaa Paper/anatofuz.pdf Binary file Paper/anatofuz.pdf has changed diff -r 7aa749f9d936 -r dec42afa6aaa Paper/anatofuz.tex --- a/Paper/anatofuz.tex Fri Nov 30 09:11:54 2018 +0900 +++ b/Paper/anatofuz.tex Fri Nov 30 11:44:49 2018 +0900 @@ -425,13 +425,6 @@ これはJavaのinterface, Haskellの型クラスに該当する概念であり, 次のCodeGearにInterface経由で継続する事が可能である. Interfaceは現在のCbCMoarVMの実装には用いていないが, 今後ThreadedCodeの実装を行うにあたり命令コードディスパッチ箇所に導入を検討している. -\subsection{他手法との比較} -本稿ではPerl6処理系の改良としてCbCを用い, 初期の実装を行った. -CbCを用い無い場合のMoarVMの改良方法としては, 命令コードに対応する処理をCの関数として記述し, この関数のポインタを利用する方法が考えられる. -関数ポインタの配列を作成し, 次の命令コードに対応する関数をポインタ経由で実行する. -Cの関数ポインタを利用した場合, CbCと同様に処理のモジュール化は可能である. -しかし, CbCとは違い軽量継続ではなく関数呼び出しで処理をする為, Cのスタックフレームが非常に巨大になる. -Cの関数呼び出しのコストから, 通常のcase文やラベルジャンプを利用した場合と速度差的に優位にならない. \section{MoarVMのデバッグ} @@ -605,6 +598,13 @@ 従ってThreadedCodeを実現するにあたり新たな処理系を開発する必要がなく, 既存の資源を利用してThreadedCodeが実現出来る. これを繰り返す事でperlccなどと比較してより高速化したThrededCodeが実現できる. +CbCを使わずにバイトコードディスパッチの箇所を改良する際に, 関数ポインタを利用する場合も考えられる. +この場合は, 関数ポインタの配列を作成し, 次の命令コードに対応する関数をポインタ経由で実行する. +Cの関数ポインタを利用した場合, CbCと同様に処理のモジュール化は可能である. +しかし, CbCとは違い軽量継続ではなく関数呼び出しで処理をする為, Cのスタックフレームが非常に巨大になる. +Cの関数呼び出しのコストから, 通常のcase文やラベルジャンプを利用した場合と速度差的に優位にならない. +また, ThreadedCodeの観点では, 命令列に対応した関数をThreadedCode用に大幅に修正する必要がある. +その為, CbCの様に関数そのものの並びでThreadedCodeに対応させることは出来ない. \section{まとめ} 本稿ではCbCによってPerl6の処理系であるMoarVMインタプリタの一部改良とその手法を示した.