# HG changeset patch # User Kaito Okura # Date 1600107718 -32400 # Node ID 077fb40023baab0bd3d4c27b7aaec013ff9d9a54 # Parent aaa6445bf95dd89e3feb47efbdbee02e60cb9a58 Format text. diff -r aaa6445bf95d -r 077fb40023ba midterm.pdf Binary file midterm.pdf has changed diff -r aaa6445bf95d -r 077fb40023ba text/abyss.tex --- a/text/abyss.tex Tue Sep 15 03:14:29 2020 +0900 +++ b/text/abyss.tex Tue Sep 15 03:21:58 2020 +0900 @@ -1,10 +1,12 @@ \section{Abyssサーバー} 本研究で提案しているAbyssサーバーはクライアント側から投げられたRakuスクリプトを実行するためのサーバーである. -図\ref{fig:Abyss_execute}はAbyssサーバーを用いたRakuの実行手順である. AbyssサーバーはユーザーがRakuを直接立ち上げるのではなく, まず同一ホスト内でAbyssサーバーを起動し, ユーザーはAbyssサーバーにファイルパスをソケット通信で送り, Abyssサーバーがファイルを開き実行し, その実行結果をユーザーに返す. +図\ref{fig:Abyss_execute}はAbyssサーバーを用いたRakuの実行手順である. +AbyssサーバーはユーザーがRakuを直接立ち上げるのではなく, まず同一ホスト内でAbyssサーバーを起動し, ユーザーはAbyssサーバーにファイルパスをソケット通信で送り, Abyssサーバーがファイルを開き実行し, その実行結果をユーザーに返す. -表\ref{table:time_comparison}は, Abyssサーバーを用いた手法と通常との実行時間の比較である.実行したものはhelloworldを出力するだけのプログラムである. Abyssサーバーを用いた手法は通常実行に比べてRakudoの起動時間分実行時間を短縮できている. - +表\ref{table:time_comparison}は, Abyssサーバーを用いた手法と通常との実行時間の比較である. +実行したものはhelloworldを出力するだけのプログラムである. +Abyssサーバーを用いた手法は通常実行に比べてRakudoの起動時間分実行時間を短縮できている. \begin{center} \includegraphics[width=80mm]{images/abyss.pdf} diff -r aaa6445bf95d -r 077fb40023ba text/purpose.tex --- a/text/purpose.tex Tue Sep 15 03:14:29 2020 +0900 +++ b/text/purpose.tex Tue Sep 15 03:21:58 2020 +0900 @@ -1,2 +1,4 @@ \section{研究目的} -現在開発の進んでいる言語にスクリプト言語のRakuがある. Rakuは起動時間がPerl5やPython, Rubyなどの主要なスクリプト言語に比べて非常に低速である. この問題を解決するために, 当研究室にてAbyssサーバーを開発している. +現在開発の進んでいる言語にスクリプト言語のRakuがある. +Rakuは起動時間がPerl5やPython, Rubyなどの主要なスクリプト言語に比べて非常に低速である. +この問題を解決するために, 当研究室にてAbyssサーバーを開発している. diff -r aaa6445bf95d -r 077fb40023ba text/raku.tex --- a/text/raku.tex Tue Sep 15 03:14:29 2020 +0900 +++ b/text/raku.tex Tue Sep 15 03:21:58 2020 +0900 @@ -1,28 +1,40 @@ \section{プログラミング言語Raku} \subsection{Raku} -Rakuは元はPerl5の後継言語のPerl6として開発されていたが, 言語仕様及び処理実装がPerl5と大幅に異なっており, 言語的な互換性が存在しない. 従って現在ではRakuとPerl5は別言語としての開発方針になっている. Rakuという名称は, 現在有力な処理系であるRakudoが由来となっている. +Rakuは元はPerl5の後継言語のPerl6として開発されていたが, 言語仕様及び処理実装がPerl5と大幅に異なっており, 言語的な互換性が存在しない. +従って現在ではRakuとPerl5は別言語としての開発方針になっている. +Rakuという名称は, 現在有力な処理系であるRakudoが由来となっている. Rakuの起動は, MoarVMを起動, nqpをロード, Rakudoをロードもしくはコンパイルし, その後JITしながら実行する. \subsection{Rakudo} -RakudoとはRakuの現在の主流な実装である. (Rakuは言語名, Rakudoはコンパイラ) Rakuは仕様と実装が明確に区分されており, Rakudoという実装, roastというRakuの仕様 (テストスイートがある). +RakudoとはRakuの現在の主流な実装である. (Rakuは言語名, Rakudoはコンパイラ) +Rakuは仕様と実装が明確に区分されており, Rakudoという実装, roastというRakuの仕様 (テストスイートがある). -Rakudoの構成は, MoarVMと呼ばれるRakudoのために構築されたVM, NQPと呼ばれるRakuのサブセット, NQPとRaku自身で記述されたRakuである. RakudoはMoarVMの他にJVMやJavaScriptを動作環境として選択可能である. +Rakudoの構成は, MoarVMと呼ばれるRakudoのために構築されたVM, NQPと呼ばれるRakuのサブセット, NQPとRaku自身で記述されたRakuである. +RakudoはMoarVMの他にJVMやJavaScriptを動作環境として選択可能である. \subsection{MoarVM} -MoarVMはRakudo, NQPのために構築されたVMであり, C言語で実装されている. JITコンパイルなどが現在導入されているが, 起動時間が低速であるなどの問題がある. MoarVM独自のByteCodeがあり, NQPからこれを出力する機能などが存在している. +MoarVMはRakudo, NQPのために構築されたVMであり, C言語で実装されている. +JITコンパイルなどが現在導入されているが, 起動時間が低速であるなどの問題がある. +MoarVM独自のByteCodeがあり, NQPからこれを出力する機能などが存在している. MoarVMはNQPとByteCodeを解釈する. \subsection{NQP} -NQPとはNot Quite Perlの略でRakuのサブセットである. その為基本的な文法などはRakuに準拠しているが,変数を束縛で宣言するなどの違いが見られる. このNQPで記述されたRakuの事をRakudoと呼ぶ. +NQPとはNot Quite Perlの略でRakuのサブセットである. +その為基本的な文法などはRakuに準拠しているが,変数を束縛で宣言するなどの違いが見られる. +このNQPで記述されたRakuの事をRakudoと呼ぶ. -RakudoにおけるNQPは現在MoarVM, JVM上で動作する.NQPは最終的にはNQP自身でブートストラップする言語であるが, ビルドの最初にはすでに書かれたMoarVMのバイトコードを必要とする. Rakuの一部はNQPを拡張したもので書かれている為, Rakudoを動作させる為にはMoarVMなどのVM, VMに対応させる様にビルドしたNQPがそれぞれ必要となる. +RakudoにおけるNQPは現在MoarVM, JVM上で動作する. +NQPは最終的にはNQP自身でブートストラップする言語であるが, ビルドの最初にはすでに書かれたMoarVMのバイトコードを必要とする. +Rakuの一部はNQPを拡張したもので書かれている為, Rakudoを動作させる為にはMoarVMなどのVM, VMに対応させる様にビルドしたNQPがそれぞれ必要となる. \subsection{Rakuが遅い原因} 通常, Rubyのようなスクリプト言語ではまずVMが起動し, その後スクリプトをバイトコードに変換して実行という手順を踏む. 対してRakuは, コンパイラのRakudo自体がRakuとNQPで書かれているため, MoarVMを起動し, RakudoとNQPのバイトコードを読み取り, Rakudoを起動し, その後スクリプトをバイトコードに変換して実行という手順を踏む. + そのため, Rakudoはインタプリタの起動時間及び、全体的な処理時間が他のスクリプト言語と比較して非常に低速である. -また, Rakuは実行時の情報が必要であり, メソッドを実行する際にinvokeが走ることも遅い原因である. invokeはMoarVMのmethod呼び出しのバイトコードである. +また, Rakuは実行時の情報が必要であり, メソッドを実行する際にinvokeが走ることも遅い原因である. +invokeはMoarVMのmethod呼び出しのバイトコードである.