# HG changeset patch # User Takahiro SHIMIZU # Date 1541756698 -32400 # Node ID 6fc015dd380b10c9f78109f2b10bc1a143905551 # Parent b2d28fb0b7a32f8212e500cf879ad727e70e6e13 fix fig lines diff -r b2d28fb0b7a3 -r 6fc015dd380b Paper/anatofuz.pdf Binary file Paper/anatofuz.pdf has changed diff -r b2d28fb0b7a3 -r 6fc015dd380b Paper/anatofuz.tex --- a/Paper/anatofuz.tex Fri Nov 09 16:11:54 2018 +0900 +++ b/Paper/anatofuz.tex Fri Nov 09 18:44:58 2018 +0900 @@ -185,14 +185,14 @@ RakudoにおけるNQP\cite{nqp}は現在MoarVM,JVM上で動作し,MoarVMを一部利用することでNodeJSからも動作させる事が可能である. NQPはPerl6のサブセットであるため主な文法などはPerl6に準拠しているが幾つか異なる点が存在する. NQPは最終的にはNQP自身でブートストラップする言語であるが,ビルドの最初にはすでに書かれたMoarvMByteCodeを必要とする. -このMoarVM~yteCodeの状態をStage0と言い,ディレクトリ名として設定されている. +このMoarVMByteCodeの状態をStage0と言い,ディレクトリ名として設定されている. Perl6の一部はNQPを拡張したもので書かれている為,Rakudoを動作させる為にはMoarVMなどのVM,VMに対応させる様にビルドしたNQPがそれぞれ必要となる. 現在のNQPではMoarVM,JVMに対応するStage0はそれぞれMoarVMBytecode,jarファイルが用意されており,Javascriptではバイトコードの代わりにランタイム独自のModuleLoaderなどが設計されている. MoarVMのModuleLoaderはStage0にあるMoarVMBytecodeで書かれた一連のファイルが該当する. Stage0にあるファイルをMoarVMに与えることでnqpのインタプリタが実行される様になっている. -これはStage0の一連のファイルはMoarVM bytecodeなどで記述されたNQPコンパイラのモジュールである為である. +これはStage0の一連のファイルはMoarVMBytecodeなどで記述されたNQPコンパイラのモジュールである為である. NQPは6modelと呼ばれるオブジェクトモデルを採用としているが,これを構築する為に必要なNQPCORE,正規表現系のQRegex,MoarVMのModuleLoaderなどがMoarVMBytecodeで記述されている.これらMoarVMBytecodeの拡張子は.MoarVMである. MoarVMに対してStage0のディレクトリにライブラリパスを設定し,nqp.MoarVMを実行させることでnqpの対話型環境が起動する. @@ -454,7 +454,11 @@ 主にcbc\_return系の命令が実行されている場合は,その直前で命令を切り替えるcbc\_invoke系統の命令が呼ばれているが,この周辺で何かしらの違いが発生している可能性が高い. また主に次のCodeGearに遷移する際にCbCコンパイラのバグが生じている可能性もある為,アセンブラレベルの命令を確認しながらデバッグを進めることとなる. +\subsection{MoarVMのテスト方法} +MoarVMは単体で実行する事が不可能である. +またNQPのリポジトリに付随するテストはnqpで書かれている為,MoarVMのテストはNQPリポジトリのファイルを直接使う場合は出来ない. +今回は正常に動くMoarVM,NQPを用意しnqpを経由してデバッグ \subsection{CbCコンパイラによるバグ} 現在までのCbCは複数個の入出力をCodeGearに与えるユースケースで利用していた. @@ -546,7 +550,7 @@ 今後CbCでの開発をより深く行っていくにあたり,CbCコンパイラそのものの信頼性を向上させる必要がある. MoarVMの開発を行うにあたり新たに発見された複数のバグを修正し,より安定するコンパイラにする為に改良を行う. -現在CbCMoarVMで直接バイトコードを入力した場合のnqpのテストはおおよそパスする. +現在CbCMoarVMで直接バイトコードを入力した場合のnqpのテストはJVM,Javascriptのテストを除く中で80\%パスする. また数値の計算と出力などの簡単なNQPの例題を作成し,オリジナルのNQP,MoarVMでバイトコード化したものを入力した際も正常に動作している. しかしNQPのセルフビルドは現在オブジェクトの生成に一部失敗している為成功していない. 今後はさらに複雑な例題やNQPのセルフビルド,Perl6の動作を行っていく. diff -r b2d28fb0b7a3 -r 6fc015dd380b Paper/fig/cbc_next.pdf Binary file Paper/fig/cbc_next.pdf has changed diff -r b2d28fb0b7a3 -r 6fc015dd380b Paper/fig/perl6nqp.pdf Binary file Paper/fig/perl6nqp.pdf has changed diff -r b2d28fb0b7a3 -r 6fc015dd380b Paper/fig/stagenqp.pdf Binary file Paper/fig/stagenqp.pdf has changed diff -r b2d28fb0b7a3 -r 6fc015dd380b Paper/src/cbc_next.graffle Binary file Paper/src/cbc_next.graffle has changed diff -r b2d28fb0b7a3 -r 6fc015dd380b Paper/src/perl6nqp.graffle Binary file Paper/src/perl6nqp.graffle has changed