comparison anatofuz.tex @ 6:6dcf1143dc8f

add about NQP
author Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
date Tue, 30 Oct 2018 18:08:27 +0900
parents 06f3183ef6c3
children
comparison
equal deleted inserted replaced
5:06f3183ef6c3 6:6dcf1143dc8f
55 Perl6は2002年にLarryWallがPerlを置き換える言語として開発を開始した. 55 Perl6は2002年にLarryWallがPerlを置き換える言語として開発を開始した.
56 Perl5の言語的な問題点である純粋なオブジェクト指向言語としての機能などを取り入れた言語として設計された. 56 Perl5の言語的な問題点である純粋なオブジェクト指向言語としての機能などを取り入れた言語として設計された.
57 Perl5は設計と実装が同一であり,Larryらによって書かれたC実装のみだった.Perl6は設計と実装が分離しており様々な処理系が開発されきた. 57 Perl5は設計と実装が同一であり,Larryらによって書かれたC実装のみだった.Perl6は設計と実装が分離しており様々な処理系が開発されきた.
58 まず2005年に唐鳳によってHaskellで実装されたPugs\footnote{http://hackage.haskell.org/package/Pugs}が登場した. 58 まず2005年に唐鳳によってHaskellで実装されたPugs\footnote{http://hackage.haskell.org/package/Pugs}が登場した.
59 Pugsは最初に登場したPerl6実装であり,この実装を基にしてPerl6の仕様も修正された. 59 Pugsは最初に登場したPerl6実装であり,この実装を基にしてPerl6の仕様も修正された.
60 現在Pugsは歴史的な実装となっており,更新はされていない.
60 その後Pythonとの共同動作環境としてParrot\footnote{http://parrot.org/}が実装された. 61 その後Pythonとの共同動作環境としてParrot\footnote{http://parrot.org/}が実装された.
61 ParrotはPASMと呼ばれるアセンブリを解釈可能なレジスタマシンである. 62 ParrotはPASMと呼ばれるアセンブリを解釈可能なレジスタマシンである.
62 ParrotでのPerl6の実装はNQP(NotQuitPerl)と呼ばれるPerl6のサブセットでPerl6を記述するというアイディアの基実装された. 63 ParrotでのPerl6の実装はNQP(NotQuitPerl)と呼ばれるPerl6のサブセットでPerl6を記述するというアイディアの基実装された.
63 ParrotVMは2006年のversion8.1.0を最後に開発が終了した. 64 ParrotVMは2006年のversion8.1.0を最後のリリースである.
64 現在主に使用されている実装であるRakudoは2010年にRakudo-Starという一連のツール郡としてリリースされた. 65 現在主に使用されている実装であるRakudoは2010年にRakudo-Starという一連のツール郡としてリリースされた.
66 Perl6処理系自体は現在も未完成であるという認識であり,Perl6プロジェクトとして提供しているテストリポジトリ「Roast」\footnote{https://github.com/perl6/roast}で定義されているテストケースを完全に通化する処理系は現在未だ存在しない.
65 67
66 \subsection{Rakudo} 68 \subsection{Rakudo}
67 69
68 RakudoとはParrotで使用されていたNQP,Perl6を基にしたプロジェクトである. 70 RakudoとはParrotで構想に上がったNQP,NQPに基づくPerl6を基にしたプロジェクトである.
69 RakudoプロジェクトがPerl6のコンパイラと考えても良い. 71 RakudoがPerl6のコンパイラかつインタプリタであると考えても良い.
70 Rakudoの構成はNQPで記述されたPerl6,NQP自身,そしてNQPを解釈するVMという構成である. 72 Rakudoの構成はNQPで記述されたPerl6,NQP自身,そしてNQPを解釈するVMという構成である.
71 このVMは現在MoarVM,JavaVM,Javascript,GraalVMを選択可能である. 73 このVMは現在MoarVM,JavaVM,Javascript,GraalVMを選択可能である.
72 RakudoStarとはこのMoarVM,NQP,Perl6が一体となったコマンドラインの事である. 74 NQPで書かれたPerl6のことをRakudoと呼ぶ.
75 RakudoStarとはこのMoarVM,NQP,Perl6が一体となったパッケージの事である.
76
77 \subsection{NQP}
78 RakudoにおけるNQP\footnote{https://github.com/perl6/nqp}は現在MoarVM,JVM上で動作し,MoarVMを一部利用することでNodeJSからも動作させる事が可能である.
79 NQPはPerl6のサブセットであるため主な文法などはPerl6に準拠しているが幾つか異なる点が存在する.
80 NQP自身はStage0と呼ばれる名前空間上のモジュールのみ動作環境のVMのバイトコードを必要とするが,それ以外はNQPで記述されておりBootstrappingされている言語である.
81 その為Rakudoを動作させる為にはMoarVMなどのVM,VMに対応させる様にビルドしたNQPがそれぞれ必要となる.
82 現在のNQPではMoarVM,JVMに対応するStage0はそれぞれMoarVMbytecode,jarファイルが用意されており,Javascriptではバイトコードの代わりにランタイム独自のModuleLoaderなどが設計されている.
83
84 Roastやドキュメントなどによって設計が定まっているPerl6とは異なりNQP自身の設計は今後も変更になる可能性が開発者から公表されている.
85 現在の公表されているNQPのオペコードはNQPのGitHubリポジトリ\footnote{https://github.com/perl6/nqp/blob/master/docs/ops.markdown}に記述されているものである.
73 86
74 87
88 \subsection{Perl6}
89
90
91 \section{MoarMV}
92 この章では改良を行ったPerl6処理系であるMoarVMについて述べる.
93
94 \subsection{MoarVMの処理流れ}
95 MoarVMはC言語で実装されており,Perl5で記述されたConfigure.plを
75 96
76 \section{論文1ページ目の情報} 97 \section{論文1ページ目の情報}
77 98
78 論文の1ページ目には,タイトル,著者名,著者所属,概要,キーワードが配置される. 99 論文の1ページ目には,タイトル,著者名,著者所属,概要,キーワードが配置される.
79 それぞれ, 100 それぞれ,