Mercurial > hg > Papers > 2020 > koo-thesis
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 のソースコード自身として評価できる