Mercurial > hg > Papers > 2019 > anatofuz-thesis
changeset 20:bb510f08d601
update chapter2
author | anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 11 Feb 2019 15:24:45 +0900 |
parents | 365856474363 |
children | e6e66afc3a73 |
files | paper/chapter2.tex paper/main.pdf |
diffstat | 2 files changed, 18 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/paper/chapter2.tex Fri Feb 08 16:04:33 2019 +0900 +++ b/paper/chapter2.tex Mon Feb 11 15:24:45 2019 +0900 @@ -17,6 +17,9 @@ \section{NQP} NQPとはRakudoにおけるPerl6の実装に利用されているプログラミング言語である。 NQP自体は、 Perl6のサブセットとして開発されている。 +歴史的にはPerl6の主力実装がParrotであった際に開発され、 現在のRakudoに引き継がれている。 +RakudoにおけるNQPは、 Parrot依存であった実装が取り払われている。 + 基本文法などはPerl6に準拠しているが、 変数を束縛で宣言する。インクリメント演算子が一部利用できない。 Perl6に存在する関数などが一部利用できないなどの制約が存在する。 @@ -25,12 +28,19 @@ Perl6はNQPで実装されている為、 Perl6におけるVMはNQPの実行を目標として開発されている。 + NQP自体もNQPで実装されており、 NQPのビルドには予め用意されたMoarVMなどのVMバイトコードによるNQPインタプリタが必要となる。 +実際にNQP内部で入力として与えられたNQPから加算命令を生成する部分をCode\ref{nqp_code_add_ops}に示す。 + +\lstinputlisting[frame=lrbt, label=nqp_code_add_ops, caption=NQPが加算命令を生成する箇所]{./codes/nqp_ops.nqp} + + MoarVMを利用する場合、 MoarVMの実行バイナリであるmoarに対して、 ライブラリパスなどを予め用意したNQPインタプリタのバイトコードに設定する。 設定はオプションで与える事が可能であり、 moarを実行することでNQPのインタプリタが起動する。 NQPのビルドには、 このNQPインタプリタをまず利用し、 NQP自体のソースコードを入力して与え、 ターゲットとなるVMのバイトコードを生成する。 このバイトコードはNQPソースコードから生成されたNQPインタプリタのバイトコードであり、 次にこのバイトコードをライブラリとしてmoarに与え、 再びNQPをビルドする。 -2度ビルドする事により、 ソースコードからビルドされたVMバイトコードでNQP自身をビルドする事が出来たため、 処理系自身をその処理系でビルドするセルフビルドが達成出来たことになる。 +この2度目のビルドで、ソースコードからビルドされたVMバイトコードでNQP自身をビルドした事になる。 +処理系自身をその処理系でビルドする事をセルフビルドと呼び、 NQPはセルフビルドしたバイナリを利用する。 2度目のビルドの際に生成されたNQPインタプリタの事を小文字のnqpと呼び、これがNQPのインタプリタのコマンドとなる。 @@ -38,12 +48,16 @@ RakudoとはNQPによって記述され、 MoarVM、 JVM、 Javascript上で動作するPerl6の実装である。 Rakudo自体はNQPで記述されている箇所と、 Rakudo自身で記述されている箇所が混在する。 - -ビルド時にはNQPインタプリタが必要となる為、 ソースコードからビルドする際は予めNQPインタプリタであるnqpをビルドする必要が存在する。 +実際にNQPで記述されている箇所の一部をCode\ref{nqp_on_rakud}に示す。 +\lstinputlisting[frame=lrbt, label=nqp_on_rakud, caption=Rakudの実装の一部]{./codes/src_main.nqp} +NQPで記述されているプログラムは.nqpの拡張子であり、 Rakudo自身で記述されているものはpm6である。 -このように、環境付き継続を用いることで C、CbC 間の処理の移動が可能になる。 +Rakudoをソースコードからビルドする際は予めNQPインタプリタであるnqpをビルドする必要が存在する。 +Rakudoのビルド時にはこのnqpと、 nqpが動作するVMを設定として与える必要がある。 +この両者を指定しない場合、 ビルド時に動的にNQP、 MoarVMをソースコードをダウンロードし、 ビルドを行う。 + %Data Gear はデータの単位であり、int や文字列などの Primitive Type を持っている。