# HG changeset patch # User e165727 # Date 1573216773 -32400 # Node ID d33d89b2dce49e1bcd480cdee5e9e1115eee5b91 # Parent 3926216e699f99130efc0352ce841f069360f507 コメント用原稿提出 diff -r 3926216e699f -r d33d89b2dce4 Paper/koo.aux --- a/Paper/koo.aux Fri Nov 08 21:08:33 2019 +0900 +++ b/Paper/koo.aux Fri Nov 08 21:39:33 2019 +0900 @@ -14,17 +14,16 @@ \@writefile{lol}{\contentsline {lstlisting}{\numberline {1}Abyssサーバーの実装のsource code}{4}} \newlabel{codeseg}{{2}{4}} \@writefile{lol}{\contentsline {lstlisting}{\numberline {2}クライアント側のsource code}{4}} -\newlabel{codeseg}{{3}{4}} +\newlabel{eval}{{3}{4}} \@writefile{lol}{\contentsline {lstlisting}{\numberline {3}evalのサンプルコード}{4}} \@writefile{toc}{\contentsline {section}{\numberline {6}\hskip 1zw{比較}}{4}} \@writefile{toc}{\contentsline {section}{\numberline {7}\hskip 1zw{まとめ}}{4}} \bibcite{キー1}{1} \bibcite{キー2}{2} \bibcite{キー3}{3} -\bibcite{latex}{4} -\bibcite{roast}{5} -\bibcite{nqp}{6} -\bibcite{designdoc}{7} +\bibcite{roast}{4} +\bibcite{nqp}{5} +\bibcite{designdoc}{6} \citation{*} \bibstyle{ipsjsort} \bibdata{reference} diff -r 3926216e699f -r d33d89b2dce4 Paper/koo.log --- a/Paper/koo.log Fri Nov 08 21:08:33 2019 +0900 +++ b/Paper/koo.log Fri Nov 08 21:39:33 2019 +0900 @@ -1,4 +1,4 @@ -This is e-pTeX, Version 3.14159265-p3.6-141210-2.6 (utf8.euc) (TeX Live 2015) (preloaded format=platex 2016.4.14) 8 NOV 2019 21:07 +This is e-pTeX, Version 3.14159265-p3.6-141210-2.6 (utf8.euc) (TeX Live 2015) (preloaded format=platex 2016.4.14) 8 NOV 2019 21:34 entering extended mode restricted \write18 enabled. file:line:error style messages enabled. @@ -216,9 +216,6 @@ LaTeX Warning: Label `codeseg' multiply defined. - -LaTeX Warning: Label `codeseg' multiply defined. - ) \openout1 = `koo.aux'. @@ -296,10 +293,10 @@ [] ) (./code/client.p6) (./code/eval.p6) [4] -LaTeX Font Info: Calculating math sizes for size <8.8711> on input line 229. +LaTeX Font Info: Calculating math sizes for size <8.8711> on input line 237. -Underfull \hbox (badness 5260) in paragraph at lines 236--237 +Underfull \hbox (badness 5260) in paragraph at lines 243--244 []\OT1/cmr/m/n/8.8711 ThePerlFoundation: Perl 6 De-sign Docu- [] @@ -313,11 +310,11 @@ ) Here is how much of TeX's memory you used: 4110 strings out of 493777 - 61875 string characters out of 6151334 + 61874 string characters out of 6151334 250664 words of memory out of 5000000 7566 multiletter control sequences out of 15000+600000 28364 words of font info for 125 fonts, out of 8000000 for 9000 929 hyphenation exceptions out of 8191 36i,7n,49p,639b,1118s stack positions out of 5000i,500n,10000p,200000b,80000s -Output written on koo.dvi (5 pages, 27372 bytes). +Output written on koo.dvi (5 pages, 28088 bytes). diff -r 3926216e699f -r d33d89b2dce4 Paper/koo.pdf Binary file Paper/koo.pdf has changed diff -r 3926216e699f -r d33d89b2dce4 Paper/koo.synctex.gz Binary file Paper/koo.synctex.gz has changed diff -r 3926216e699f -r d33d89b2dce4 Paper/koo.tex --- a/Paper/koo.tex Fri Nov 08 21:08:33 2019 +0900 +++ b/Paper/koo.tex Fri Nov 08 21:39:33 2019 +0900 @@ -179,12 +179,12 @@ \end{center} \caption{Abyssサーバーを用いたスクリプト言語実行手順} \label{fig:perl6cbcinter} -\end{figure} +\end{figure}ccc Code1はAbyss サーバーのソースコードである. Abyssサーバーは起動すると,まず自身にファイルパスを転送するためのソケットを生成し,その後ファイルを受け取るための待機ループに入る. -Perl6ではEVAL関数があり文字列をPerl6のソースコード自身として評価できる +Perl6ではEVAL関数[\ref{eval}]があり文字列をPerl6のソースコード自身として評価できる Perl6では, EVALは通常は使用できないようになっており, MONKEY-SEE-NO-EVALというpragmaを実行することで使うことができるようになる. EVALFILEはファイルパスを受け取るとファイル開き, バイト文字列に変換し読み込む,その後読み込んだバイト文字列にデコードし,ファイルパスの文字列を読み込み,ファイルの中身をEVALと同様に解釈する. @@ -193,7 +193,7 @@ \lstinputlisting[label=codeseg, caption=Abyssサーバーの実装のsource code]{code/abyss.p6} \lstinputlisting[label=codeseg, caption=クライアント側のsource code]{code/client.p6} -\lstinputlisting[label=codeseg, caption=evalのサンプルコード]{code/eval.p6} +\lstinputlisting[label=eval, caption=evalのサンプルコード]{code/eval.p6} %通常、自分でプロセス立ち上げてPerl6を実行する際は, %\section{問題点} @@ -212,25 +212,32 @@ PyPy は JIT コンパイル を採用しており, 実行時にコードを機械語にコンパイルして効率的に実行させることができる. PyPy は Cpython より実行速度が速いが起動速度は Cpython と比較して約3倍遅い. - +Perl6 と同様, PyPyは Cpython と比較して起動時間が遅いため今回提案した手法を応用できると予測できる. \end{itemize} \section{まとめ} 本稿では実行する Perl6 ファイル名をサーバーに転送し,コンパイラサーバーでコンパイルを行い実行することで全体的に処理時間が早くなることを示した. -\\ -他の Python のようなscript 言語にも応用できる見込みが立った. -コンパイラの起動だけでなく, モジュールの読み込みが遅い言語などを, あらかじめサーバーを側でモジュールを読み込んでおき, それを利用してプログラムを実行する手法で解決できる見込みが立った. -今回の実装ではTCPソケットを用いたがTCPソケットを用いるとサーバーを立ち上げた際に外部からファイルを転送される可能性があるので,Unix domain socketの実装を行い,それを用いたクライアント・サーバーを作成することで安全性が高まると考えた. + +今後Abyssサーバーでの開発をより深く行っていくにあたって以下のような改善点が見られた \\ +\begin{itemize} + +\item コンパイラの起動が遅い言語だけでなく, モジュールの読み込みが遅い言語などを, あらかじめサーバーを側でモジュールを読み込んでおき, それを利用してプログラムを実行する手法も応用できるように改良を行う. +\item 今回の実装ではTCPソケットを用いたがTCPソケットを用いるとサーバーを立ち上げた際に外部からファイルを転送される可能性があるので,Unix domain socketの実装を行い,それを用いたクライアント・サーバーを作成することで安全性が高まると考えた. Rakuには現状Unix domainソケットの実装がないので、Unix domainソケットを実装し、自分以外が実行できないようにすることが今後の課題に挙げられる. -現状のRakuのEVALFILEでは,出力がサーバー側に返っているので,クライアント側から出力を見るためにクライアント側に返す必要がある. -今回用いた Perl6 の EVALFILE 自体にクライアント側に出力を返す実装追加することも今後の課題に挙げられる. +\item 今回用いた Perl6 の EVALFILE 自体にクライアント側に出力を返す実装追加することも今後の課題に挙げられる. +\item 現状のRakuのEVALFILEでは,出力がサーバー側に返っているので,クライアント側から出力を見るためにクライアント側に返す必要がある. +\item モジュールを送信する機能の追加 +\item プログラムの実行終了したらモジュールを削除する機能の追加\\ +\end{itemize} + + +今後の開発を行っていくにあたって, 他の Python のような script 言語にも応用できるように開発を行っていく. \begin{thebibliography}{9} \bibitem{キー1} Andrew Shitov. Perl6 Deep Dive \bibitem{キー2} 清水隆博, 河野真治. CbC を用いた Perl6 処理系. プログラミングシンポジウム論文, 2019. \bibitem{キー3} Perl6 Documentation\\({https://docs.perl6.org}) (2019/10/22 アクセス) - \bibitem{latex} 奥村晴彦, 黒木裕介: \textbf{LaTeX2e美文書作成入門}. 技術評論社, 2013. \bibitem{roast}The Official Raku Test Suite \\({https://github.com/perl6/roast/}) \bibitem{nqp}NQP - Not Quite Perl \\({https://github.com/perl6/nqp}) \bibitem{designdoc}ThePerlFoundation: Perl 6 Design Docu- ments, ThePerlFoundation (online), available from ({https://design.raku.org})