comparison paper/chapter2.tex @ 17:9d5db297d154

use listings for chapter2.tex
author anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
date Fri, 08 Feb 2019 15:32:41 +0900
parents 6be34793a3e2
children b2978e820356
comparison
equal deleted inserted replaced
16:6be34793a3e2 17:9d5db297d154
9 PugsやParrotは現在は歴史的な実装となっており、 開発は行われていない。 9 PugsやParrotは現在は歴史的な実装となっており、 開発は行われていない。
10 現在の主要な実装であるRakudoは、 Parrotと入れ替わる形で実装が進んでいる。 10 現在の主要な実装であるRakudoは、 Parrotと入れ替わる形で実装が進んでいる。
11 RakudoはParrot時代に考案された、 NQP(NotQuitPerl)を用いてPerl6を実装し、 NQPはVMによって評価される。 11 RakudoはParrot時代に考案された、 NQP(NotQuitPerl)を用いてPerl6を実装し、 NQPはVMによって評価される。
12 RakudoのVMはPerl6専用のVMであるMoarVM、 Java実行環境であるJVM、 Javascriptが選択可能である。 12 RakudoのVMはPerl6専用のVMであるMoarVM、 Java実行環境であるJVM、 Javascriptが選択可能である。
13 JVM、 Javascriptの動作環境はMoarVMと比較して実装されていない処理などが多数あり、 現在はMoarVMが主流なVMとして利用されている。 13 JVM、 Javascriptの動作環境はMoarVMと比較して実装されていない処理などが多数あり、 現在はMoarVMが主流なVMとして利用されている。
14 MoarVMはC言語で実装されており、 NQPはNQP自身で記述されている。 14 MoarVMはC言語で実装されており、 NQPはNQP自身で実装されている。
15 15
16 16
17 \section{NQP} 17 \section{NQP}
18 NQPとはRakudoにおけるPerl6の実装に利用されているプログラミング言語である。 18 NQPとはRakudoにおけるPerl6の実装に利用されているプログラミング言語である。
19 NQP自体は、 Perl6のサブセットとして開発されている。 19 NQP自体は、 Perl6のサブセットとして開発されている。
20 基本文法などはPerl6に準拠しているが、 変数を束縛で宣言する。インクリメント演算子が一部利用できない。 20 基本文法などはPerl6に準拠しているが、 変数を束縛で宣言する。インクリメント演算子が一部利用できない。
21 Perl6に存在する関数などが一部利用できないなどの制約が存在する。 21 Perl6に存在する関数などが一部利用できないなどの制約が存在する。
22 22
23 実際にNQPで記述したコードを に示す。 23 NQPのコード例を示す。
24 \lstinputlisting[frame=lrbt, label=fib_nqp, caption=フィボナッチ数列を求めるNQPのソースコード]{./codes/fib.nqp}
24 25
25 Perl6はNQPで記述されている為、 Perl6におけるVMはNQPの実行を目標として開発されている。 26
26 NQP自体もNQPで記述されており、 NQPのビルドには予め用意されたMoarVMなどのVMバイトコードによるNQPインタプリタが必要となる。 27 Perl6はNQPで実装されている為、 Perl6におけるVMはNQPの実行を目標として開発されている。
28 NQP自体もNQPで実装されており、 NQPのビルドには予め用意されたMoarVMなどのVMバイトコードによるNQPインタプリタが必要となる。
27 MoarVMを利用する場合、 MoarVMの実行バイナリであるmoarに対して、 ライブラリパスなどを予め用意したNQPインタプリタのバイトコードに設定する。 29 MoarVMを利用する場合、 MoarVMの実行バイナリであるmoarに対して、 ライブラリパスなどを予め用意したNQPインタプリタのバイトコードに設定する。
28 設定はオプションで与える事が可能であり、 moarを実行することでNQPのインタプリタが起動する。 30 設定はオプションで与える事が可能であり、 moarを実行することでNQPのインタプリタが起動する。
29 NQPのビルドには、 このNQPインタプリタをまず利用し、 NQP自体のソースコードを入力して与え、 ターゲットとなるVMのバイトコードを生成する。 31 NQPのビルドには、 このNQPインタプリタをまず利用し、 NQP自体のソースコードを入力して与え、 ターゲットとなるVMのバイトコードを生成する。
30 このバイトコードはNQPソースコードから生成されたNQPインタプリタのバイトコードであり、 次にこのバイトコードをライブラリとしてmoarに与え、 再びNQPをビルドする。 32 このバイトコードはNQPソースコードから生成されたNQPインタプリタのバイトコードであり、 次にこのバイトコードをライブラリとしてmoarに与え、 再びNQPをビルドする。
31 2度ビルドする事により、 ソースコードからビルドされたVMバイトコードでNQP自身をビルドする事が出来たため、 処理系自身をその処理系でビルドするセルフビルドが達成出来たことになる。 33 2度ビルドする事により、 ソースコードからビルドされたVMバイトコードでNQP自身をビルドする事が出来たため、 処理系自身をその処理系でビルドするセルフビルドが達成出来たことになる。