Mercurial > hg > Papers > 2019 > anatofuz-thesis
changeset 76:582b97946af6
updare prepaper
author | anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 18 Feb 2019 18:37:18 +0900 |
parents | 29bb4dca94ea |
children | 2327c951dfb9 |
files | prepaper/finalpre.pdf prepaper/finalpre.tex |
diffstat | 2 files changed, 6 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/prepaper/finalpre.tex Mon Feb 18 18:09:00 2019 +0900 +++ b/prepaper/finalpre.tex Mon Feb 18 18:37:18 2019 +0900 @@ -128,10 +128,9 @@ 進めた後にcase文の先頭もしくはCのラベルジャンプを利用して次の処理に遷移する。 この一連の処理を命令コードのディスパッチと呼ぶ。 命令コードの実行の中では、 現在のMoarVMのレジスタであるreg\_baseやスレッドごとの環境である構造体tcなどを参照する。 -この方法の問題点として、 巨大なcase文になっている為命令列の分割が出来ない。 -ディスパッチ部分の処理が都度走る為低速になる。 -Cファイルでの可読性とモジュール化が損なわれてしまう。 -ラベルにbreak pointを設定できない為デバッグし辛いなどが挙げられる。 +この方法の問題点として、 巨大なcase文に変換されてしまう事から、 命令に対応する処理のモジュール化が出来ない。 +ディスパッチ部分の処理が都度走る為に、 低速になる。 +ラベルにbreak pointを設定できない為に、 デバッグし辛いなどが挙げられる。 \lstinputlisting[label=origdis, caption=MoarVM内のインタプリタのディスパッチ]{src/dispatch.c} \section{CbCMoarVMのディスパッチ} @@ -160,6 +159,9 @@ またラベルにはbreak pointを設定する事が出来なかったが、 CodeGearはデバッガからは関数として見る事ができるため通常のCの関数の様にbreak pointを設定する事が可能である。 +現在はMoarVMを利用しNQP, Perl6のビルドが達成出来た。 +またテストコードも、 元のMoarVMと同様の達成率を得た。 +処理速度は再帰呼び出しなどを行っている例題では、 オリジナルのMoarVMより低速であるが、単純ループなど、 命令がCPUのキャッシュに残る場合は高速に動く事が測定された。 \section{今後の課題} 本研究では、 MoarVM の命令ディスパッチ部分がCodeGearの集合に変換可能である事を示した。