# HG changeset patch # User Takahiro SHIMIZU # Date 1541672989 -32400 # Node ID 7689b70a1a79a9ffa45c68d50e0c0abe19cb06bc # Parent fb4c1b408c9fcbd9092b5c189901886606cc7389 create stagenqp.pdf and tweak tex diff -r fb4c1b408c9f -r 7689b70a1a79 Paper/anatofuz.pdf Binary file Paper/anatofuz.pdf has changed diff -r fb4c1b408c9f -r 7689b70a1a79 Paper/anatofuz.tex --- a/Paper/anatofuz.tex Thu Nov 08 17:49:04 2018 +0900 +++ b/Paper/anatofuz.tex Thu Nov 08 19:29:49 2018 +0900 @@ -177,21 +177,31 @@ RakudoにおけるNQP\cite{nqp}は現在MoarVM,JVM上で動作し,MoarVMを一部利用することでNodeJSからも動作させる事が可能である. NQPはPerl6のサブセットであるため主な文法などはPerl6に準拠しているが幾つか異なる点が存在する. -NQP自身はStage0と呼ばれる名前空間上のモジュールのみ動作環境のVMのバイトコードを必要とするが,それ以外はNQPで記述されておりBootstrappingされている言語である. +NQP自身はStage0と呼ばれるディレクトリに用意されているモジュールのみ動作環境のVMのバイトコードを必要とするが,それ以外はNQPで記述されておりBootstrappingされている言語である. Perl6の一部はNQPを拡張したもので書かれている為,Rakudoを動作させる為にはMoarVMなどのVM,VMに対応させる様にビルドしたNQPがそれぞれ必要となる. -現在のNQPではMoarVM,JVMに対応するStage0はそれぞれMoarVMbytecode,jarファイルが用意されており,Javascriptではバイトコードの代わりにランタイム独自のModuleLoaderなどが設計されている. -MoarVMのModuleLoaderはStage0あるMoarVMbytecodeで書かれた一連のファイルが該当する. +現在のNQPではMoarVM,JVMに対応するStage0はそれぞれMoarVMBytecode,jarファイルが用意されており,Javascriptではバイトコードの代わりにランタイム独自のModuleLoaderなどが設計されている. +MoarVMのModuleLoaderはStage0あるMoarVMBytecodeで書かれた一連のファイルが該当する. +NQPのビルドフローは図\ref{fig:nqpbuild}に示す. Stage0にあるファイルをmoarvmに与えることでnqpのインタプリタが実行される様になっている. これはStage0の一連のファイルはmoarvm bytecodeなどで記述されたNQPコンパイラのモジュールである為である. -NQPは6modelと呼ばれるオブジェクトモデルを採用としているが,これを構築する為に必要なNQPCORE,正規表現系のQRegex,MoarVMのModuleLoaderなどがmoarvmbytecodeで記述されている.これらMoarVMBytecodeの拡張子は.moarvmである. +NQPは6modelと呼ばれるオブジェクトモデルを採用としているが,これを構築する為に必要なNQPCORE,正規表現系のQRegex,MoarVMのModuleLoaderなどがMoarVMBytecodeで記述されている.これらMoarVMBytecodeの拡張子は.moarvmである. MoarVMに対してStage0のディレクトリにライブラリパスを設定し,nqp.moarvmを実行させることでnqpの対話型環境が起動する. 実際にperl6を動かすためにはself buildしたNQPコンパイラが必要となる.その為にstage0を利用してStage1をビルドしNQPコンパイラを作成する. +Stage1は中間的な出力であり,生成されたNQPファイルはStage2と同一であるが,MoarVMBytecodeが異なる. +Perl6では完全なセルフコンパイルを実行したNQPが要求される為,Stage1を利用してもう一度ビルドを行いStage2を作成する. Roastやドキュメントなどによって設計が定まっているPerl6とは異なりNQP自身の設計は今後も変更になる可能性が開発者から公表されている. 現在の公表されているNQPのオペコードはNQPのリポジトリ\cite{nqpopcode}に記述されているものである. +\begin{figure}[ht] + \begin{center} + \includegraphics[width=70mm]{fig/stagenqp.pdf} + \end{center} + \caption{NQPのビルドフロー} + \label{fig:nqpbuild} +\end{figure} \subsection{Rakudo Perl6} Rakudo実装上におけるPerl6はRakudo Perl6と呼ばれているGitリポジトリで管理されているプログラムのことである. @@ -386,7 +396,7 @@ Perl6の開発は非常に活発に行われている為,CbCMoarVMの最新版の追従も課題となっている. 現在はinterp.cからPerlスクリプトを用いて自動でCbCのCodeSegmentを生成している. -今後の開発領域の拡大と共により効率的にCbCコードへの自動変換も複数のCコードに対応する様に開発を行っていく.. +今後の開発領域の拡大と共により効率的にCbCコードへの自動変換も複数のCコードに対応する様に開発を行っていく. %å\subsection{MoarVMの処理流れ} %MoarVMはC言語で実装されており,Perl5で記述されたConfigure.plを diff -r fb4c1b408c9f -r 7689b70a1a79 Paper/fig/stagenqp.pdf Binary file Paper/fig/stagenqp.pdf has changed