changeset 14:06fcc4caf38d

update Paper
author e165727 <e165727@ie.u-ryukyu.ac.jp>
date Sat, 15 Feb 2020 18:31:14 +0900
parents 521a4e1d5af6
children e2d2da777af0
files Paper/chapter2.tex Paper/chapter3.tex Paper/chapter5.tex Paper/main.pdf
diffstat 4 files changed, 40 insertions(+), 42 deletions(-) [+]
line wrap: on
line diff
--- a/Paper/chapter2.tex	Sat Feb 15 17:51:56 2020 +0900
+++ b/Paper/chapter2.tex	Sat Feb 15 18:31:14 2020 +0900
@@ -1,19 +1,17 @@
-\chapter{ Raku の概要}
-
-\section{ Raku }
-Raku は 2002 年に LarryWall が Perl を置き換える言語として設計を開始した. Perl5 の言語的な問題点であるオブジェクト指向機能の強力なサポートなどを取り入れた言語として設計された. Perl5 は設計と実装が同一であり, Larry らによって書かれた C 実装のみだった. Raku は設計と実装が分離している. 言語的な特徴としては, 独自に Raku の文法の拡張が可能な Grammar, Perl5 と比較した場合のオブジェクト指向言語としての進化も見られる. また Perl6 は漸進的型付け言語である. 従来の Perl の様に変数に代入する対象の型や, 文脈に応じて型を変更する動的型言語としての側面を持ちつつ, 独自に定義した型を始めとする様々な型に, 静的に変数の型を設定する事が可能である.
-Raku は元々は Perl6 という名称であったが, 言語仕様及び処理実装が Perl5 と大幅に異なっており, 言語的な互換性が存在しない. 従って現在では Perl6 と Perl5 は別言語としての開発方針になっている. Raku は現在有力な処理系である Rakudo から名前を取り Raku という別名がつけられている.
+\chapter{Raku の概要}
 
-Raku の現在の主流な実装は Rakudo である. Rakudo は MoarVM, と NQP と呼ばれる Raku のサブセット, NQPと Raku 自身で記述された Raku という構成である.
-MoarVM は NQP と Byte Code を解釈する. 
-
-NQP とは Not Quite Perl の略で Raku のサブセットである. その為基本的な文法などは Raku に準拠しているが, 変数を束縛で宣言するなどの違いが見られる.
-
-この NQP で記述された Raku の事を Rakudo と呼ぶ.
-Rakudo は MoarVM の他に JVM , Javascript を動作環境として選択可能である.
+\section{Raku}
+Raku は 2002 年に LarryWall が Perl を置き換える言語として設計を開始した. Perl5 の言語的な問題点であるオブジェクト指向機能の強力なサポートなどを取り入れた言語として設計された. Perl5 は設計と実装が同一であり, Larry らによって書かれた C 実装のみだった. 言語的な特徴としては, 独自に Raku の文法の拡張が可能な Grammar, Perl5 と比較した場合のオブジェクト指向言語としての進化も見られる. また Perl6 は漸進的型付け言語である. 従来の Perl の様に変数に代入する対象の型や, 文脈に応じて型を変更する動的型言語としての側面を持ちつつ, 独自に定義した型を始めとする様々な型に, 静的に変数の型を設定する事が可能である.
+Raku は元々は Perl6 という名称であったが, 言語仕様及び処理実装が Perl5 と大幅に異なっており, 言語的な互換性が存在しない. 従って現在では Raku と Perl5 は別言語としての開発方針になっている. Raku は現在有力な処理系である Rakudo から名前を取り Raku という別名がつけられている.
 
 Raku の起動は, MoarVM を起動, NQP をロード, Rakudo をロードもしくはコンパイルし, その後 JIT しながら実行する.
 
+\section{Rakudo}
+Rakudo とは Raku の現在の主流な実装である. (Raku は言語名, Rakudo はコンパイラ)
+Raku は仕様と実装が明確に区分されており, Rakudoは実装, roast という Raku の仕様(テストスイートがある)
+Rakudo は MoarVM, と NQP と呼ばれる Raku のサブセット, NQPと Raku 自身で記述された Raku という構成である.
+Rakudo は MoarVMの他に JVM やJava Script を動作環境として選択可能である.
+
 \begin{figure}[H]
      \begin{center}
      \includegraphics[width=70mm]{fig/Rakudo.pdf}
@@ -25,9 +23,13 @@
 \section{MoarVM}
 MoarVM は Rakudo, NQPのために構築された VM である. C 言語で実装されている.  JIT コンパイルなどが現在導入されているが, 起動時間が低速であるなどの問題がある. MoarVM 独自の ByteCode があり, NQP からこれを出力する機能などが存在している.
 
+MoarVM は NQP と Byte Code を解釈する. 
+
 \section{NQP}
-NQP とは Raku のサブセットである.
+NQP とは Not Quite Perl の略で Raku のサブセットである
 その為基本的な文法などは Raku に準拠しているが,変数を束縛で宣言するなどの違いが見られる.
+
+この NQP で記述された Raku の事を Rakudo と呼ぶ.
 \begin{comment}
 %NQP は最終的には NQP 自身でブートストラップする言語であるが,ビルドの最初にはすでに書かれた MoarvM ByteCode を必要とする.
 %この MoarVMByteCode の状態を Stage0 と言う.
@@ -36,34 +38,10 @@
 \end{comment}
 
 Rakudo における NQP は現在 MoarVM, JVM 上で動作する.
-NQP は Perl6 のサブセットであるため, 主な文法などは Perl6 に準拠しているが幾つか異なる点が存在する.
 NQP は最終的には NQP 自身でブートストラップする言語であるが, ビルドの最初にはすでに書かれた MoarVM のバイトコードを必要とする.
 Raku の一部は NQP を拡張したもので書かれている為, Rakudo を動作させる為には MoarVM などの VM, VM に対応させる様にビルドした NQP がそれぞれ必要となる.
 現在の NQP では MoarVM, JVM に対応する Stage0 はそれぞれ MoarVM のバイトコード, jarファイルが用意されている.
-MoarVM の ModuleLoader は Stage0 にある MoarVM のバイトコードで書かれた一連のファイルが該当する.
-\\
-Stage0 にあるファイルを MoarVM に与えることで, NQP のインタプリタが実行される様になっている.
-これは Stage0 の一連のファイルは, MoarVM のバイトコードなどで記述された NQP コンパイラのモジュールである為である.
-NQP のインタプリタはセルフビルドが完了すると, nqp というシェルスクリプトとして提供される.
-このシェルスクリプトは, ライブラリパスなどを設定して MoarVM の実行バイナリである moar を起動するものである.
-%NQPは6modelと呼ばれるオブジェクトモデルを採用としている.%が, これを構築する為に必要なNQPCORE,正規表現系のQRegex,MoarVMのModuleLoaderなどがMoarVMBytecodeで記述されている.これらMoarVMBytecodeの拡張子は.MoarVMである.
-%MoarVMに対してStage0のディレクトリにライブラリパスを設定し, nqp.MoarVMを実行させることでnqpの対話型環境が起動する.
 
-\begin{figure*}[ht]
-     \begin{center}
-     \includegraphics[width=140mm]{fig/tgraph.pdf}
-     \end{center}
-     \caption{NQPのビルドフロー}
-    \label{fig:nqpbuild}
-\end{figure*}
-
-NQP のビルドフローを図\ref{fig:nqpbuild}に示す.
-Rakudo による Perl6 処理系は NQP における nqp と同様に, moar にライブラリパスなどを設定した perl6 というシェルスクリプトである.
-この perl6 を動かすためには self build した NQP コンパイラが必要となる.
-その為に Stage0 を利用して Stage1 をビルドし NQP コンパイラを作成する.
-Stage1 は中間的な出力であり, 生成された NQP ファイルは Stage2 と同一であるが, MoarVM のバイトコードが異なる.
-Perl6 では完全なセルフコンパイルを実行した NQP が要求される為, Stage1 を利用してもう一度ビルドを行い Stage2 を作成する.
-\\
 Perl6 のテストスイートであるRoastやドキュメントなどによって設計が定まっている Perl6 とは異なり NQP 自身の設計は今後も変更になる可能性が開発者から公表されている.
 現在の公表されている NQP のオペコードは NQP のリポジトリに記述されているものである.
 %\subsection{Rakudo Perl6}
@@ -83,13 +61,14 @@
 Raku と他言語の起動時間の比較行なった.
 題材として perl5, ruby, raku, python で helloworld を出力するプログラムを用いて行なった実行結果である.
 
-実行環境
+\subsection{実行環境}
 \begin{itemize}
 \item macOS Mojave version 10.14.5
 \item メモリ8GB
 \item プロセッサ2.7GHz Intel Core i5
 \end{itemize}
 
+\subsection{起動時間の比較}
 \begin{table}[H]
   \begin{center}
     \begin{tabular}{|l|l|} \hline
@@ -116,3 +95,4 @@
   \caption{起動時間の比較}
 \end{table}
 
+Raku は 最も早いperl5 の約62.25倍, pythonの約19倍, rubyの約3倍起動速度が遅いことがわかる.
\ No newline at end of file
--- a/Paper/chapter3.tex	Sat Feb 15 17:51:56 2020 +0900
+++ b/Paper/chapter3.tex	Sat Feb 15 18:31:14 2020 +0900
@@ -16,13 +16,13 @@
 \end{figure}
 
 \section{Abyss Server側の実装}
-\ref{Server}はAbyss サーバーのソースコードである.
+[\ref{Server}]はAbyss サーバーのソースコードである.
 Abyssサーバーは起動すると, まず自身にファイルパスを転送するためのソケットを生成し, その後ファイルパスを受け取り実行して . 出力結果をソケットに書き込む
 
 \lstinputlisting[label=Server,  caption= Abyss Server側の source code ]{code/abyss.p6}
 
 \section{Abyss Client側の実装}
-ユーザーは Abyss Server を起動後, Client側からファイルパスをサーバーに送信し, \ref{Client}のようにSocketに書き込まれた実行結果を読み取る.
+ユーザーは Abyss Server を起動後, Client側からファイルパスをサーバーに送信し, [\ref{Client}]のようにSocketに書き込まれた実行結果を読み取る.
 
 \lstinputlisting[label=Cient,  caption=Abyss Client側の source code ]{code/client.p6}
 
@@ -33,9 +33,27 @@
 Raku では, EVALは通常は使用できないようになっており, MONKEY-SEE-NO-EVAL という pragma を実行することで使うことができるようになる.
 EVALFILE はファイルパスを受け取るとファイル開き, バイト文字列に変換し読み込む, その後読み込んだバイト文字列にデコードし, ファイルパスの文字列を読み込み, ファイルの中身を EVAL と同様に解釈する.
 
-\ref{code1} の2行目にある MONKEY−SEE−NO−EVAL は Perl6 上で EVALFILE を使用可能にする pragma である.
+[\ref{Server}] の2行目にある MONKEY−SEE−NO−EVAL は Perl6 上で EVALFILE を使用可能にする pragma である.
 
 \lstinputlisting[label=code3,  caption=evalのサンプルコード]{code/eval.p6}
 %通常、自分でプロセス立ち上げてPerl6を実行する際は,
 
 \section{NativeCall}
+Rakuでは Native Call という標準ライブラリを用いて, Cのライブラリを扱うことが可能である.
+
+\section{通常実行との速度比較}
+今回は,提案手法での実行速度と通常実行での実行速度, この二つの速度の比較を行う
+題材として行うのはhelloworldを出力するだけのプログラムとフィボナッチ数列の例題である.
+
+実験結果
+\begin{table}[H]
+  \begin{center}
+    \begin{tabular}{|l|l|} \hline
+      Language& Time \\  \hline
+      通常実行 & 0.2695 sec \\
+      提案手法 & 0.0238 sec \\ \hline
+    \end{tabular}
+  \end{center}
+  \caption{通常実行と提案手法の速度比較}
+\end{table}
+提案手法は通常実行に比べて約10倍早い実行結果になった
--- a/Paper/chapter5.tex	Sat Feb 15 17:51:56 2020 +0900
+++ b/Paper/chapter5.tex	Sat Feb 15 18:31:14 2020 +0900
@@ -12,4 +12,4 @@
 %\begin{itemize}
 %\item
 %\end{itemize}
-今後の開発を行っていくにあたって, 他の Python のような script 言語にも応用できるように開発を行っていく.
+今後の開発を行っていくにあたって, 他の script 言語にも応用できるように開発を行っていく.
Binary file Paper/main.pdf has changed