changeset 18:4c121d8b0354

update chapter2 & 3
author e165727 <e165727@ie.u-ryukyu.ac.jp>
date Sun, 16 Feb 2020 03:06:41 +0900
parents ce4e57fe652c
children 7d8aa97ff754
files Paper/chapter2.tex Paper/chapter3.tex Paper/main.pdf
diffstat 3 files changed, 21 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/Paper/chapter2.tex	Sun Feb 16 01:20:18 2020 +0900
+++ b/Paper/chapter2.tex	Sun Feb 16 03:06:41 2020 +0900
@@ -6,6 +6,7 @@
 
 Raku の起動は, MoarVM を起動, NQP をロード, Rakudo をロードもしくはコンパイルし, その後 JIT しながら実行する.
 
+\newpage
 \section{Rakudo}
 Rakudo とは Raku の現在の主流な実装である. (Raku は言語名, Rakudo はコンパイラ)
 Raku は仕様と実装が明確に区分されており, Rakudoは実装, roast という Raku の仕様(テストスイートがある)
@@ -20,6 +21,12 @@
     \label{fig:perl6cbcinter}
 \end{figure}
 
+\section{Rakudoの語源}
+ちなみに Rakudo の語源は, 楽土と駱駝道で \\
+楽土の方はLallyが楽に言語を作りたいという意味で Rakudo \\
+駱駝道の方は Perlのマスコットキャラクターがラクダだったからである \\
+ (\url{http://blogs.perl.org/users/zoffix_znet/2017/07/the-hot-new-language-named-rakudo.html})
+
 \section{MoarVM}
 MoarVM は Rakudo, NQPのために構築された VM である. C 言語で実装されている.  JIT コンパイルなどが現在導入されているが, 起動時間が低速であるなどの問題がある. MoarVM 独自の ByteCode があり, NQP からこれを出力する機能などが存在している.
 
@@ -57,6 +64,7 @@
 また Perl6 は実行時の情報が必要であり, メソッドを実行する際に invoke が走ることも遅い原因である.
 invoke はMoarVM の method 呼び出しの Byte code である.
 
+\newpage
 \section{Raku と他言語との起動時間の比較}
 Raku と他言語の起動時間の比較行なった.
 題材として perl5, ruby, raku, python で helloworld を出力するプログラムを用いて行なった実行結果である.
--- a/Paper/chapter3.tex	Sun Feb 16 01:20:18 2020 +0900
+++ b/Paper/chapter3.tex	Sun Feb 16 03:06:41 2020 +0900
@@ -15,6 +15,7 @@
     \label{fig:AbyssExecute}
 \end{figure}
 
+\newpage
 \section{Abyss Server側の実装}
 [\ref{Server}]はAbyss サーバーのソースコードである.
 Abyssサーバーは起動すると, まず自身にファイルパスを転送するためのソケットを生成し, その後ファイルパスを受け取り実行して . 出力結果をソケットに書き込む
@@ -24,8 +25,19 @@
 \section{Abyss Client側の実装}
 ユーザーは Abyss Server を起動後, Client側からファイルパスをサーバーに送信し, [\ref{Client}]のようにSocketに書き込まれた実行結果を読み取る.
 
-\lstinputlisting[label=Cient,  caption=Abyss Client側の source code ]{code/client.p6}
+\lstinputlisting[label=Client,  caption=Abyss Client側の source code ]{code/client.p6}
+
 
+\section{Raku の Unix domain socket 実装}
+Unix domain socket でなくINET で実装した場合, 他者からスクリプトを送りつけられる可能性がある. \\
+そのため今回はUnix domain socket を用いて実装しました. \\
+Rakuには現在Unix domain socketの実装がないため, Unix domain socket の実装を行なった. \\
+IO::Socketがroleとして定義されている \\
+Raku での role は他の言語の interface に相当するものである \\
+現状 Raku にはIO::Socket::INETとIO::Socket::Asyncの実装がある \\
+先ほど上で説明したようにINETとAsyncはセキュリティの問題で使えない \\
+IO::Socketを実装した IO::Socket::Unix を実装した \\
+ IO::Socket::Unixの中ではnqpの機能を使う必要がある \\
 
 \section{Raku の EVAL}
 Raku ではEVAL関数[\ref{code3}]があり文字列を Raku のソースコード自身として評価できる
Binary file Paper/main.pdf has changed