Mercurial > hg > Papers > 2020 > koo-thesis
changeset 20:0137c5074de4
update paper
author | e165727 <e165727@ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 16 Feb 2020 16:20:34 +0900 |
parents | 7d8aa97ff754 |
children | 32db366529dd |
files | Paper/chapter1.tex Paper/chapter3.tex Paper/chapter5.tex Paper/main.pdf |
diffstat | 4 files changed, 15 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/Paper/chapter1.tex Sun Feb 16 13:28:38 2020 +0900 +++ b/Paper/chapter1.tex Sun Feb 16 16:20:34 2020 +0900 @@ -1,10 +1,10 @@ -\chapter{序論} +\chapter{研究背景と目的} \pagenumbering{arabic} %序論の目安としては1枚半ぐらい. %英語発表者は,最終予稿の「はじめに」の英訳などを載せてもいいかも. -\section{背景と目的} +\section{Perl6 の起動時間の改善} %\section{ Perl6 の起動時間の改善} 現在多くのスクリプト言語はインタプリタ型言語であり, 実行時にインタプリタの立ち上げ, モジュールを読み込み, スクリプトの解釈, スクリプトの実行 といったような処理を担っている. これらの処理の中にはOS上で事前に行うことで, より起動時間, 及び処理時間の短縮が予想される.
--- a/Paper/chapter3.tex Sun Feb 16 13:28:38 2020 +0900 +++ b/Paper/chapter3.tex Sun Feb 16 16:20:34 2020 +0900 @@ -1,5 +1,6 @@ \chapter{Raku によるAbyss の実装} 提案手法で述べた, 同一ホスト内で終了せずに実行を続けるサーバープロセスを立ち上げ, このサーバープロセス上で立ち上げておいたコンパイラに実行するファイル名を転送し,サーバー上でコンパイルを行う手法に沿い『Abyss Server』を実装した. + \section{サーバーの構成} Abyss サーバーは クライアント側から投げられた Rakuスクリプト を実行するためのサーバーである. 図\ref{fig:AbyssExecute}は, Abyss サーバーを用いたスクリプト言語実行手順である. @@ -24,13 +25,15 @@ \section{Abyss Client側の実装} ユーザーは Abyss Server を起動後, Client側からファイルパスをサーバーに送信し, [\ref{Client}]のようにSocketに書き込まれた実行結果を読み取る. +Client側は Raku で実装されているが, Client側は Socketを生成し, filepathを送信するだけなので他の言語でも書くことが可能だ. + \lstinputlisting[label=Client, caption=Abyss Client側の source code ]{code/client.p6} \section{Raku の Unix domain socket 実装} -Unix domain socket でなくINET で実装した場合, 他者からスクリプトを送りつけられる可能性がある. \\ -そのため今回はUnix domain socket を用いて実装を行なった \\ +今回, 通信するSocketにはUnix domain socket を用いた. \\ +TCP socket や Async socket を用いた場合, 他者からスクリプトを送りつけられる可能性がある. そのため, 今回はUnix domain socket を用いて実装を行なった. Rakuには現在Unix domain socketの実装がないため, Unix domain socket の実装を行なった. \\ IO::Socketがroleとして定義されている \\ Raku での role は他の言語の interface に相当するものである \\ @@ -51,17 +54,18 @@ %通常、自分でプロセス立ち上げてPerl6を実行する際は, \section{NativeCall} -Rakuでは Native Call という標準ライブラリを用いて, Cのライブラリを扱うことが可能である. +Rakuでは Native Call という標準ライブラリを用いて, Cのライブラリを扱うことが可能である. \\ +指定がない場合はCの標準ライブラリが呼ばれる. [\ref{Server}]で利用したCのライブラリは以下のものである \begin{itemize} -\item dup(int fd) - dup() は引数で指定したファイルディスクリプタを複製して, 未使用のファイルディスクリプタから最小番号を割り当てます +\item dup(int fd) - dup() は引数で指定したファイルディスクリプタを複製して, 未使用のファイルディスクリプタから最小番号を割り当てる. またdupはシステムコールの一種である. \item dep2(int newfd, int oldfd) - dup2() は oldfd を newfd に関連づけます. \item close(int fd) - close() は指定されたfile descreptorを閉じます. \end{itemize} -\section{出力をSocketに書き込む際に起きた問題} +\section{出力をSocketに書き込む際にdup()している理由} Raku では標準出力をSocketに書き込む API が Raku 側からは提供されていない. そのため, 通常 Code \ref{Server} のようにEVALFILEを実行した際, 出力はそのまま Server 側の標準出力に返ってしまう.
--- a/Paper/chapter5.tex Sun Feb 16 13:28:38 2020 +0900 +++ b/Paper/chapter5.tex Sun Feb 16 16:20:34 2020 +0900 @@ -1,16 +1,15 @@ -\chapter{結論} -\section{まとめ} +\chapter{まとめ} 本稿では実行する Raku スクリプトのファイル名をサーバーに転送し,コンパイラサーバーでコンパイルを行い実行する手法の提案を行なった. また, 提案手法に沿って「Abyss Server」を実装した. \\ Raku の速度改善において, 同一ホスト内でサーバープロセスを生成し,サーバープロセス内であらかじめコンパイラを立ち上げて起き, 実行するファイル名を転送し,サーバープロセス上でコンパイルを行う手法は有効であると考えられる -今後Abyssサーバーでの開発をより深く行っていくにあたって以下のような改善点が見られた \\ +今後のAbyssサーバーの開発において期待される改善点には以下のようなものがある \\ \begin{itemize} \item コンパイラの起動が遅い言語だけでなく, モジュールの読み込みが遅い言語などを, あらかじめサーバーを側でモジュールを読み込んでおき, それを利用してプログラムを実行する手法も応用できるように改良を行う. -\item モジュールを送信する機能の追加 +\item スクリプトを送る際にモジュールも送信する機能の追加 \item プログラムの実行終了したらモジュールを削除する機能の追加 -\item リソース周りの実装 +\item 数回スクリプトが投げられたら, サーバーを落とすなどのリソース管理の実装 \end{itemize} %またscript言語をサーバー上で実行する場合の欠点については以下のようなものが見られる %\begin{itemize}