Mercurial > hg > Papers > 2019 > anatofuz-thesis
changeset 21:e6e66afc3a73
update
author | anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 11 Feb 2019 15:59:08 +0900 |
parents | bb510f08d601 |
children | faeaa82a4479 |
files | paper/chapter2.tex paper/main.pdf |
diffstat | 2 files changed, 23 insertions(+), 17 deletions(-) [+] |
line wrap: on
line diff
--- a/paper/chapter2.tex Mon Feb 11 15:24:45 2019 +0900 +++ b/paper/chapter2.tex Mon Feb 11 15:59:08 2019 +0900 @@ -8,11 +8,30 @@ 実装は歴史的に様々なものが開発されており、 Haskellで実装されたPugs、 Pythonとの共同実行環境を目指したParrotなどが存在する。 PugsやParrotは現在は歴史的な実装となっており、 開発は行われていない。 現在の主要な実装であるRakudoは、 Parrotと入れ替わる形で実装が進んでいる。 -RakudoはParrot時代に考案された、 NQP(NotQuitPerl)を用いてPerl6を実装し、 NQPはVMによって評価される。 -RakudoのVMはPerl6専用のVMであるMoarVM、 Java実行環境であるJVM、 Javascriptが選択可能である。 -JVM、 Javascriptの動作環境はMoarVMと比較して実装されていない処理などが多数あり、 現在はMoarVMが主流なVMとして利用されている。 -MoarVMはC言語で実装されており、 NQPはNQP自身で実装されている。 +Perl6そのものはスクリプト言語として実装されており、 漸進的型付け言語である。 +言語的な特徴としては、 独自にPerl6の文法を拡張可能なGrammer、 Perl5と比較してオブジェクト指向言語としての機能の強化などが見られる。 + +\section{Rakudo} + +RakudoとはNQPによって記述され、 MoarVM、 JVM、 Javascript上で動作するPerl6の実装である。 +Rakudo自体はNQPで実装されている箇所と、 Perl6で実装されている箇所が混在する。 +これらは拡張子によって区別され、 NQPは.nqp、 Perl6は .pm6が拡張として設定されている。 +実際にNQPで実装されている箇所の一部をCode\ref{nqp_on_rakud}に示す。 +\lstinputlisting[frame=lrbt, label=nqp_on_rakud, caption=Rakudoの実装の一部]{./codes/src_main.nqp} +Rakudoをソースコードからビルドする際は予めNQPインタプリタであるnqpをビルドする必要が存在する。 +Rakudoのビルド時にはこのnqpと、 nqpが動作するVMを設定として与える必要がある。 +この両者を指定しない場合、 ビルド時に動的にNQP、 MoarVMをソースコードをダウンロードし、 ビルドを行う。 + +\section{MoarVM} +MoarVMとはRakudo実装で主に使われる仮想機械である。 +RakudoではPerl6とNQPを実行する際に仮想機械上で実行する。 +この仮想機械はOSレベルの仮想化に使用するVirtualBoxやqemuと異なり、プロセスレベルの仮想機械である。 +Rakudoではこの仮想機械にMoarVM、 Javaの仮想機械であるJVM(JavaVirtualMachine)が選択可能である。 +MoarVMはこの中でRakudo独自に作成された仮想機械であり、 現在のRakudoプロジェクトの主流な実装となっている。 + +MoarVMはC言語で実装されており、 レジスタベースの仮想機械である。 +MoarVMはNQPやPerl6から与えられたMoarVMバイトコードを評価する。 \section{NQP} NQPとはRakudoにおけるPerl6の実装に利用されているプログラミング言語である。 @@ -44,19 +63,6 @@ 2度目のビルドの際に生成されたNQPインタプリタの事を小文字のnqpと呼び、これがNQPのインタプリタのコマンドとなる。 -\section{Rakudo} - -RakudoとはNQPによって記述され、 MoarVM、 JVM、 Javascript上で動作するPerl6の実装である。 -Rakudo自体はNQPで記述されている箇所と、 Rakudo自身で記述されている箇所が混在する。 -実際にNQPで記述されている箇所の一部をCode\ref{nqp_on_rakud}に示す。 -\lstinputlisting[frame=lrbt, label=nqp_on_rakud, caption=Rakudの実装の一部]{./codes/src_main.nqp} - - -NQPで記述されているプログラムは.nqpの拡張子であり、 Rakudo自身で記述されているものはpm6である。 - -Rakudoをソースコードからビルドする際は予めNQPインタプリタであるnqpをビルドする必要が存在する。 -Rakudoのビルド時にはこのnqpと、 nqpが動作するVMを設定として与える必要がある。 -この両者を指定しない場合、 ビルド時に動的にNQP、 MoarVMをソースコードをダウンロードし、 ビルドを行う。 %Data Gear はデータの単位であり、int や文字列などの Primitive Type を持っている。