Mercurial > hg > Papers > 2019 > anatofuz-thesis
changeset 60:f875514d43ad
update
author | anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 17 Feb 2019 17:13:12 +0900 |
parents | b1117ccb84a1 |
children | efe90261de01 |
files | paper/chapter4.tex paper/chapter5.tex paper/main.pdf |
diffstat | 3 files changed, 21 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/paper/chapter4.tex Sat Feb 16 17:34:27 2019 +0900 +++ b/paper/chapter4.tex Sun Feb 17 17:13:12 2019 +0900 @@ -1,4 +1,4 @@ -\chapter{MoarVMのバイトコード実行} +\chapter{CbCによるMoarVM} \section{スクリプト言語のバイトコード} プログラミング言語処理系は一般的に、 コンパイラ又はインタプリタに、 対象のソースコードを入力として与える。 処理系はソースコード中の各文字列を、 トークンと呼ばれる形式に変換する。 @@ -239,3 +239,21 @@ ガベージコレクションの回収を防ぐために、 MVM\_gc\_root\_temp\_pushでは、 大域変数の配列に一時的にオブジェクトのアドレスを入れる。 このオブジェクトは、 CodeGear中のローカル変数であるが、 CodeGear中のローカル変数は通常別のCodeGearに移動する際に破棄する為、 この様な動きを想定していない。 その為、 MVMROOT を呼び出す処理の場合は、 MVMROOT を使う命令を別の関数でラップし、 CodeGearから関数呼び出しの形で命令を呼び出す。 + + + +\section{CbCMoarVMのデバッグ} +CbCで書き換えたMoarVMであるCbCMoarVMは、 現在gcc、 LLVM/clang上に実装しているCbCコンパイラでビルドする事が可能である。 +また、 それぞれO3までの最適化オプションをビルド時に指定してもビルドする事が可能である。 + +MoarVMの書き換えに伴って、 正常にオリジナルのMoarVMと同じ振る舞いをするか確認をしたい。 +ソフトウェアの振る舞いの確認手法はいくつかあるが、 今回はテストコードを利用したテストを用いて確認する。 +MoarVM自体には現在テストコードが存在せず、 MoarVM上で動作するNQP、 及びRakudoに付随しているテストコードで、 MoarVMの実装をテストする。 + +NQPやRakudoのテストを行うには、セルフビルドしたそれぞれのインタプリタであるnqp、 perl6を作らなければならない。 +しかし、 これらをビルドする際にはMoarVMの実行バイナリである moar を動かす必要がある。 +nqpなどのビルド時には、 入力として与えられたバイトコードを解析し、 命令部分をディスパッチするバイトコードインタプリタを使用せざるを得ない。 +今回はバイトコードディスパッチ部分を書き換えた為、 この部分にバグが生じていると、 そもそもnqpやperl6を生成する事が出来ない。 +その為、 利用したいnqpやperl6のテストコードを利用する事が出来ない。 + +