# HG changeset patch # User Takahiro SHIMIZU # Date 1540890507 -32400 # Node ID 6dcf1143dc8fd7f427dc93d968ea6bb852167a66 # Parent 06f3183ef6c3764fa2e281ffb749767b20f9b1ba add about NQP diff -r 06f3183ef6c3 -r 6dcf1143dc8f anatofuz.tex --- a/anatofuz.tex Mon Oct 29 18:55:11 2018 +0900 +++ b/anatofuz.tex Tue Oct 30 18:08:27 2018 +0900 @@ -57,21 +57,42 @@ Perl5は設計と実装が同一であり,Larryらによって書かれたC実装のみだった.Perl6は設計と実装が分離しており様々な処理系が開発されきた. まず2005年に唐鳳によってHaskellで実装されたPugs\footnote{http://hackage.haskell.org/package/Pugs}が登場した. Pugsは最初に登場したPerl6実装であり,この実装を基にしてPerl6の仕様も修正された. +現在Pugsは歴史的な実装となっており,更新はされていない. その後Pythonとの共同動作環境としてParrot\footnote{http://parrot.org/}が実装された. ParrotはPASMと呼ばれるアセンブリを解釈可能なレジスタマシンである. ParrotでのPerl6の実装はNQP(NotQuitPerl)と呼ばれるPerl6のサブセットでPerl6を記述するというアイディアの基実装された. -ParrotVMは2006年のversion8.1.0を最後に開発が終了した. +ParrotVMは2006年のversion8.1.0を最後のリリースである. 現在主に使用されている実装であるRakudoは2010年にRakudo-Starという一連のツール郡としてリリースされた. +Perl6処理系自体は現在も未完成であるという認識であり,Perl6プロジェクトとして提供しているテストリポジトリ「Roast」\footnote{https://github.com/perl6/roast}で定義されているテストケースを完全に通化する処理系は現在未だ存在しない. \subsection{Rakudo} -RakudoとはParrotで使用されていたNQP,Perl6を基にしたプロジェクトである. -RakudoプロジェクトがPerl6のコンパイラと考えても良い. +RakudoとはParrotで構想に上がったNQP,NQPに基づくPerl6を基にしたプロジェクトである. +RakudoがPerl6のコンパイラかつインタプリタであると考えても良い. Rakudoの構成はNQPで記述されたPerl6,NQP自身,そしてNQPを解釈するVMという構成である. このVMは現在MoarVM,JavaVM,Javascript,GraalVMを選択可能である. -RakudoStarとはこのMoarVM,NQP,Perl6が一体となったコマンドラインの事である. +NQPで書かれたPerl6のことをRakudoと呼ぶ. +RakudoStarとはこのMoarVM,NQP,Perl6が一体となったパッケージの事である. + +\subsection{NQP} +RakudoにおけるNQP\footnote{https://github.com/perl6/nqp}は現在MoarVM,JVM上で動作し,MoarVMを一部利用することでNodeJSからも動作させる事が可能である. +NQPはPerl6のサブセットであるため主な文法などはPerl6に準拠しているが幾つか異なる点が存在する. +NQP自身はStage0と呼ばれる名前空間上のモジュールのみ動作環境のVMのバイトコードを必要とするが,それ以外はNQPで記述されておりBootstrappingされている言語である. +その為Rakudoを動作させる為にはMoarVMなどのVM,VMに対応させる様にビルドしたNQPがそれぞれ必要となる. +現在のNQPではMoarVM,JVMに対応するStage0はそれぞれMoarVMbytecode,jarファイルが用意されており,Javascriptではバイトコードの代わりにランタイム独自のModuleLoaderなどが設計されている. + +Roastやドキュメントなどによって設計が定まっているPerl6とは異なりNQP自身の設計は今後も変更になる可能性が開発者から公表されている. +現在の公表されているNQPのオペコードはNQPのGitHubリポジトリ\footnote{https://github.com/perl6/nqp/blob/master/docs/ops.markdown}に記述されているものである. +\subsection{Perl6} + + +\section{MoarMV} +この章では改良を行ったPerl6処理系であるMoarVMについて述べる. + +\subsection{MoarVMの処理流れ} +MoarVMはC言語で実装されており,Perl5で記述されたConfigure.plを \section{論文1ページ目の情報}