# HG changeset patch # User e165727 # Date 1581827318 -32400 # Node ID 7d8aa97ff75482734980b67d35825408e3fe7a5f # Parent 4c121d8b0354fe51deeba3bacaf5326202a63804 update Paper diff -r 4c121d8b0354 -r 7d8aa97ff754 Paper/bibliography.tex --- a/Paper/bibliography.tex Sun Feb 16 03:06:41 2020 +0900 +++ b/Paper/bibliography.tex Sun Feb 16 13:28:38 2020 +0900 @@ -17,4 +17,7 @@ \bibitem{MoarVM} MoarVM\\({https://github.com/MoarVM/MoarVM}) (2020/2/14 access) \bibitem{designdoc}ThePerlFoundation: Perl 6 Design Docu- ments, ThePerlFoundation (online), available from ({https://design.raku.org}) \bibitem{C-doc}C Documentation\\({https://devdocs.io/c/}) (2020/2/14 access) +\bibitem{Perl6-rename}The Hot New Language Named Rakudo \\{http://blogs.perl.org/users/zoffix\_znet/2017/07/the-hot-new-language-named-rakudo.html} +%URL修正する必要あり + \end{thebibliography} diff -r 4c121d8b0354 -r 7d8aa97ff754 Paper/chapter1.tex --- a/Paper/chapter1.tex Sun Feb 16 03:06:41 2020 +0900 +++ b/Paper/chapter1.tex Sun Feb 16 13:28:38 2020 +0900 @@ -14,7 +14,7 @@ MoarVM は JIT コンパイルなどをサポートしているが, 全体的な起動時間及び処理速度が Perl5 や Python , Ruby などの他のスクリプト言語と比較し非常に低速である. %Raku は MoarVM に基づくJIT コンパイラを持っており,コンパイルされた結果はプロセッサが実行可能な機械語に相当する. -Raku のような言語に JITコンパイラを持ち, 起動時間が遅い PyPy などの言語がある. +%Raku のような言語に JITコンパイラを持ち, 起動時間が遅い PyPy などの言語がある. 本研究では, スクリプト言語 Raku の起動時間及び, 処理速度の改善を図り, 研究をするにあたり得られた, OS上でscript言語を実行する場合の利点と欠点について述べ, 今後の展望について記載する. また, その手法として同一ホスト内で終了せずに実行を続けるサーバープロセスを立ち上げ, このサーバープロセス上で立ち上げておいたコンパイラに実行するファイル名を転送し,サーバー上でコンパイルを行う手法を提案する. diff -r 4c121d8b0354 -r 7d8aa97ff754 Paper/chapter2.tex --- a/Paper/chapter2.tex Sun Feb 16 03:06:41 2020 +0900 +++ b/Paper/chapter2.tex Sun Feb 16 13:28:38 2020 +0900 @@ -2,15 +2,15 @@ \section{Raku} Raku は 2002 年に LarryWall が Perl を置き換える言語として設計を開始した. Perl5 の言語的な問題点であるオブジェクト指向機能の強力なサポートなどを取り入れた言語として設計された. Perl5 は設計と実装が同一であり, Larry らによって書かれた C 実装のみだった. 言語的な特徴としては, 独自に Raku の文法の拡張が可能な Grammar, Perl5 と比較した場合のオブジェクト指向言語としての進化も見られる. また Perl6 は漸進的型付け言語である. 従来の Perl の様に変数に代入する対象の型や, 文脈に応じて型を変更する動的型言語としての側面を持ちつつ, 独自に定義した型を始めとする様々な型に, 静的に変数の型を設定する事が可能である. -Raku は元々は Perl6 という名称であったが, 言語仕様及び処理実装が Perl5 と大幅に異なっており, 言語的な互換性が存在しない. 従って現在では Raku と Perl5 は別言語としての開発方針になっている. Raku は現在有力な処理系である Rakudo から名前を取り Raku という別名がつけられている. +Raku は元々は Perl6 という名称であったが, 言語仕様及び処理実装が Perl5 と大幅に異なっており, 言語的な互換性が存在しない. 従って現在では Raku と Perl5 は別言語としての開発方針になっている. Raku は現在有力な処理系である Rakudo から名前を取り Raku という名前がつけられている. Raku の起動は, MoarVM を起動, NQP をロード, Rakudo をロードもしくはコンパイルし, その後 JIT しながら実行する. \newpage \section{Rakudo} -Rakudo とは Raku の現在の主流な実装である. (Raku は言語名, Rakudo はコンパイラ) -Raku は仕様と実装が明確に区分されており, Rakudoは実装, roast という Raku の仕様(テストスイートがある) -Rakudo は MoarVM, と NQP と呼ばれる Raku のサブセット, NQPと Raku 自身で記述された Raku という構成である. +Rakudo とは Raku の現在の主流な実装である. (Raku は言語名, Rakudo はコンパイラ) \\ +Raku は仕様と実装が明確に区分されており, Rakudo という実装, roast という Raku の仕様(テストスイートがある). \\ +Rakudo は MoarVM, NQP と呼ばれる Raku のサブセット, NQPと Raku 自身で記述された Raku という構成である. \\ Rakudo は MoarVMの他に JVM やJava Script を動作環境として選択可能である. \begin{figure}[H] @@ -23,9 +23,9 @@ \section{Rakudoの語源} ちなみに Rakudo の語源は, 楽土と駱駝道で \\ -楽土の方はLallyが楽に言語を作りたいという意味で Rakudo \\ +楽土の方は日本語で「楽園」という意味で \\ 駱駝道の方は Perlのマスコットキャラクターがラクダだったからである \\ - (\url{http://blogs.perl.org/users/zoffix_znet/2017/07/the-hot-new-language-named-rakudo.html}) +%\ref{Perl6-rename} \section{MoarVM} MoarVM は Rakudo, NQPのために構築された VM である. C 言語で実装されている. JIT コンパイルなどが現在導入されているが, 起動時間が低速であるなどの問題がある. MoarVM 独自の ByteCode があり, NQP からこれを出力する機能などが存在している. diff -r 4c121d8b0354 -r 7d8aa97ff754 Paper/chapter3.tex --- a/Paper/chapter3.tex Sun Feb 16 03:06:41 2020 +0900 +++ b/Paper/chapter3.tex Sun Feb 16 13:28:38 2020 +0900 @@ -1,5 +1,5 @@ \chapter{Raku によるAbyss の実装} -提案手法に沿い『Abyss Server』を実装した. +提案手法で述べた, 同一ホスト内で終了せずに実行を続けるサーバープロセスを立ち上げ, このサーバープロセス上で立ち上げておいたコンパイラに実行するファイル名を転送し,サーバー上でコンパイルを行う手法に沿い『Abyss Server』を実装した. \section{サーバーの構成} Abyss サーバーは クライアント側から投げられた Rakuスクリプト を実行するためのサーバーである. 図\ref{fig:AbyssExecute}は, Abyss サーバーを用いたスクリプト言語実行手順である. @@ -30,12 +30,12 @@ \section{Raku の Unix domain socket 実装} Unix domain socket でなくINET で実装した場合, 他者からスクリプトを送りつけられる可能性がある. \\ -そのため今回はUnix domain socket を用いて実装しました. \\ +そのため今回は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はセキュリティの問題で使えない \\ +前述したように, INETとAsyncはセキュリティの問題で使えない \\ IO::Socketを実装した IO::Socket::Unix を実装した \\ IO::Socket::Unixの中ではnqpの機能を使う必要がある \\ @@ -53,7 +53,7 @@ \section{NativeCall} Rakuでは Native Call という標準ライブラリを用いて, Cのライブラリを扱うことが可能である. -以下に[\ref{Server}]で使用されているCのライブラリの解説を記す +[\ref{Server}]で利用したCのライブラリは以下のものである \begin{itemize} \item dup(int fd) - dup() は引数で指定したファイルディスクリプタを複製して, 未使用のファイルディスクリプタから最小番号を割り当てます \item dep2(int newfd, int oldfd) - dup2() は oldfd を newfd に関連づけます. diff -r 4c121d8b0354 -r 7d8aa97ff754 Paper/main.pdf Binary file Paper/main.pdf has changed