view paper/chapter5.tex @ 66:7955d5a147bd

update
author anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
date Mon, 18 Feb 2019 15:14:24 +0900
parents 5ec812f6e3d6
children 1a7622df57b8
line wrap: on
line source

\chapter{CbCMoarVMの評価}
前章までに、 MoarVMの一部処理をCbCでの書き換えを検討した。
本章では、 CbCMoarVMの評価を行う。

\section{命令処理のモジュール化}
MoarVMの命令コードディスパッチ部分は、 当初はcase文やラベルgotに変換されるため、 1ファイルの記述せざるを得なかった。
書き換えたCodeGearは、 関数の様にCbCから扱う事が可能である。
MoarVMの命j令コードディスパッチでは、 命令に対応する数値を利用して、 case文又は配列から実行するラベルなどを取り出していた。
CbCMoarVMでは、 CodeGearの集合である配列を用意している。
この配列の登録順のみ対応させれば、 CbCMoarVM内の命令に対応するCodeGearの書く場所は問わなくなる。
そのため、 命令処理部分を別ファイルに書き出すなどのモジュール化が可能となった。

\section{CbCMoarVMのデバッグ}
主要なデバッガであるgdbやlldbでは、 関数には直接break pointを設定する事が可能である。
MoarVMのバイトコードディスパッチ部分はcase文やラベルgotoに変換され、 関数として扱う事が出来ない。
その為、 命令に対応する処理部分でbreak pointを設定を行う場合、 まず処理が書かれているMVM\_interp\_run関数にbreak pointを設置する必要がある。
プロセス起動後、 関数が書かれているinterp.cファイル中の行番号を指定してbreak pointを付けなければならない。
また、ディスパッチでは数値又はラベルを利用している為、 デバッガ上で直接どの命令を実行するか確認をする事が困難である。


CodeGearは関数として扱う事ができる為、 break pointとして直接設定する事が可能である。
また、 gdbなどのデバッガは、 実行するべき関数名を表示する事が可能であるため、 CodeGearの名前も表示可能である。
CodeGear名は命令と対応している為、 CodeGear名から命令名を推測する事が可能となった。

\section{パフォーマンス}

\section{Threaded Code}

\section{欠点}