Mercurial > hg > Papers > 2019 > koo-prosym
changeset 11:607ada55055a
通常実行と提案手法の比較入れてる途中
author | e165727 <e165727@ie.u-ryukyu.ac.jp> |
---|---|
date | Wed, 08 Jan 2020 22:40:16 +0900 |
parents | 4627ec7c3d1b |
children | 172524516d06 |
files | Slide/Slide.html Slide/Slide.md Slide/Slide.pdf.html |
diffstat | 3 files changed, 303 insertions(+), 148 deletions(-) [+] |
line wrap: on
line diff
--- a/Slide/Slide.html Wed Jan 08 10:10:13 2020 +0900 +++ b/Slide/Slide.html Wed Jan 08 22:40:16 2020 +0900 @@ -110,10 +110,69 @@ <ul> <li>Raku の実装の一つであるRakudoは、Byte code である MoarVM と、それ上で動作する Raku のsubsetであるnqp (Not Quite Perl)上に構成されている。</li> <li>現状のRakuの実行はRakuで記述されたコンパイラをloadしてJITしながら実行すること自体に時間がかかっている。</li> - <li>そこで、Rakuをサーバとして動作させ、実行するファイルをサーバに投げて実行する方法を検討する</li> - <li>同一ホスト内で終了せずに実行を続けるサーバープロセスを立ち上げ, このサーバープロセス上で立ち上げておいたコンパイラに実行するファイル名を転送し, サーバー上でコンパイルを行う手法を提案し実装する.</li> + <li>そこで, 同一ホスト内で終了せずに実行を続けるサーバープロセスを立ち上げ, このサーバープロセス上で立ち上げておいたコンパイラに実行するファイル名を転送し, サーバー上でコンパイルを行う手法を提案し実装する.</li> +</ul> + + + +</div> + +<div class='slide'> + <!-- _S9SLIDE_ --> +<h2 id="raku-と他言語の起動時間の比較">Raku と他言語の起動時間の比較</h2> +<ul> + <li>perl6と他言語の起動時間の比較行なった.</li> + <li>実行環境</li> </ul> +<pre><code>macOS Mojave version 10.14.5 +メモリ8GB +プロセッサ2.7GHz Intel Core i5 + +ruby 2.3.7p456 +python 2.7.10 +raku 2019.03.1 +perl5 v5.18.4 +</code></pre> + + + +</div> + +<div class='slide'> + <!-- _S9SLIDE_ --> +<h2 id="raku-と他言語の起動時間の比較-1">Raku と他言語の起動時間の比較</h2> +<ul> + <li>perl5,ruby,perl6,pythonでhelloworldを出力するだけのプログラムを用いて行なった実行結果である.</li> +</ul> + +<pre><code>perl5 +real 0m0.011s +user 0m0.004s +sys 0m0.005s +===== + +Raku +real 0m0.209s +user 0m0.249s +sys 0m0.048s +==== + +ruby +real 0m0.131s +user 0m0.083s +sys 0m0.038s +==== + +python +real 0m0.036s +user 0m0.013s +sys 0m0.021s +==== +</code></pre> + +<p>Raku は 最も早いperl5 の約62.25倍起動速度が遅いことがわかる.</p> + </div> @@ -175,48 +234,20 @@ <div class='slide'> <!-- _S9SLIDE_ --> -<h2 id="raku-と他言語の起動時間の比較">Raku と他言語の起動時間の比較</h2> +<h2 id="rakuが遅い理由">Rakuが遅い理由</h2> <ul> - <li>以下はperl5,ruby,perl6,pythonでhelloworldを出力するだけのプログラムを用いた起動時間の比較である.</li> - <li>実行結果</li> + <li>後で書く</li> </ul> -<pre><code>perl5 -real 0m0.011s -user 0m0.004s -sys 0m0.005s -===== - -Raku -real 0m0.209s -user 0m0.249s -sys 0m0.048s -==== - -ruby -real 0m0.131s -user 0m0.083s -sys 0m0.038s -==== - -python -real 0m0.036s -user 0m0.013s -sys 0m0.021s -==== -</code></pre> - -<p>Raku は perl5 の62.25倍と非常に遅いことがわかる.</p> - </div> <div class='slide'> <!-- _S9SLIDE_ --> -<h2 id="rakuが遅い理由">Rakuが遅い理由</h2> +<h2 id="予測">予測</h2> <ul> - <li></li> + <li>前述した通り,Rakuは起動に時間がかかっているため</li> </ul> @@ -228,7 +259,7 @@ <h2 id="raku-による-abyssサーバーの実装">Raku による Abyssサーバーの実装</h2> <ul> <li>提案手法に沿い『Abyssサーバー』を実装した.</li> - <li>Abyssサーバーはクライアント側から投げられた Raku を実行するためのサーバーである.</li> + <li>AbyssサーバーはUnix domain socketを用いて送信した Raku スクリプトを実行するためのサーバーである.</li> <li>下記の図は,Abyss サーバーを用いたスクリプト言語の実行手順である.</li> </ul> @@ -240,9 +271,9 @@ <div class='slide'> <!-- _S9SLIDE_ --> -<h2 id="abyss-serverの利点">Abyss Serverの利点</h2> +<h2 id="raku-の-unix-domain-socket-実装">Raku の Unix domain socket 実装</h2> <ul> - <li>Abyss Serverを用いて実行することで, サーバー上で事前に起動した Rakudo を再利用し, 投げられた Perl6 スクリプトの実行を行うため, Rakudo の全体的な処理時間を短縮できる.</li> + <li>後で書く</li> </ul> @@ -251,9 +282,9 @@ <div class='slide'> <!-- _S9SLIDE_ --> -<h2 id="abyss-serverの欠点">Abyss Serverの欠点</h2> +<h2 id="予測-1">予測</h2> <ul> - <li></li> + <li>前述した通り, Raku はコンパイラの起動に時間がかかっているため,提案手法を用いることで起動時間分早く実行することができると予測する.</li> </ul> @@ -262,6 +293,26 @@ <div class='slide'> <!-- _S9SLIDE_ --> +<h2 id="通常実行と提案手法の速度比較">通常実行と提案手法の速度比較</h2> +<ul> + <li>今回は,提案手法での実行速度と通常実行での実行速度, この二つの速度の比較を行う</li> + <li>題材として行うのはhelloworldを出力するだけのプログラムです.</li> +</ul> + + + +</div> + +<div class='slide'> + <!-- _S9SLIDE_ --> +<h2 id="実行結果">実行結果</h2> + + + +</div> + +<div class='slide'> + <!-- _S9SLIDE_ --> <h2 id="abyss-server側の実装">Abyss Server側の実装</h2> <ul> <li>Abyss サーバーは起動すると, まず自身にファイルパスを転送するためのソケットを生成し, その後 ファイルを受け取るための待機ループに入る.</li> @@ -270,9 +321,10 @@ <pre><code>unit class Abyss::Server:ver<0.0.1>; use MONKEY-SEE-NO-EVAL; +use IO::Socket::Unix; method readeval { - my $listen = IO::Socket::INET.new( + my $listen = IO::Socket::Unix.new( :listen, :localhost<localhost>, :localport(3333) @@ -298,7 +350,9 @@ <li>ユーザーはAbyssのサーバーを起動後,ファイルパスをサーバーに送信する.</li> </ul> -<pre><code>my $conn = IO::Socket::INET.new( :host<localhost>, +<pre><code>use IO::Socket::Unix; + +my $conn = IO::Socket::Unix.new( :host<localhost>, :port(3333) ); $conn.print: 'FILEPASS'; @@ -316,8 +370,8 @@ <li>Raku では, EVAL は通常は使用できないようになっており, MONKEY-SEE-NO-EVAL という pragma を実行することで使うことができるようになる.</li> </ul> -<pre><code>use MONKEY-SEE-NO-EVAL; - +<pre><code>use MONKEY-SEE-NO-EVAL; + EVAL "say { 5 + 5 }"; # OUTPUT: 10 </code></pre> @@ -327,6 +381,26 @@ <div class='slide'> <!-- _S9SLIDE_ --> +<h2 id="abyss-serverの利点">Abyss Serverの利点</h2> +<ul> + <li>Abyss Serverを用いて実行することで, サーバー上で事前に起動した Rakudo を再利用し, 投げられた Perl6 スクリプトの実行を行うため, Rakudo の全体的な処理時間を短縮できる.</li> +</ul> + + + +</div> + +<div class='slide'> + <!-- _S9SLIDE_ --> +<h2 id="abyss-serverの欠点">Abyss Serverの欠点</h2> +<p>-</p> + + + +</div> + +<div class='slide'> + <!-- _S9SLIDE_ --> <h2 id="まとめと今後の課題">まとめと今後の課題</h2> <ul> <li>Raku の新たな実行方法の提案,及び実装を行なった.</li> @@ -348,17 +422,6 @@ <p><img src="fig/Raku.svg" alt="" /></p> - -</div> - -<div class='slide'> - <!-- _S9SLIDE_ --> -<h2 id="raku-の-unix-domain-socket-実装">Raku の Unix domain socket 実装</h2> -<ul> - <li>後で書く</li> -</ul> - - </div>
--- a/Slide/Slide.md Wed Jan 08 10:10:13 2020 +0900 +++ b/Slide/Slide.md Wed Jan 08 22:40:16 2020 +0900 @@ -12,33 +12,25 @@ ## 研究概要 - Raku の実装の一つであるRakudoは、Byte code である MoarVM と、それ上で動作する Raku のsubsetであるnqp (Not Quite Perl)上に構成されている。 - 現状のRakuの実行はRakuで記述されたコンパイラをloadしてJITしながら実行すること自体に時間がかかっている。 -- そこで、Rakuをサーバとして動作させ、実行するファイルをサーバに投げて実行する方法を検討する -- 同一ホスト内で終了せずに実行を続けるサーバープロセスを立ち上げ, このサーバープロセス上で立ち上げておいたコンパイラに実行するファイル名を転送し, サーバー上でコンパイルを行う手法を提案し実装する. - -## Rakudo -- Rakudoとは現在のRakuの主力な実装である. -- Rakudo は MoarVM, と NQP と呼ばれる Raku のサブセット, NQP と Raku 自身で記述された Raku という構成である. - -![](fig/Rakudo.svg) -- Rakudoの構成 - -## NQP -- NQPとはNot Quite Perl の略で Raku の機能を制限したプログラミング言語である. -- 基本的な文法などは Raku に準拠しているが, 変数を束縛で宣言するなどの違いがある. -- NQPコンパイラ自身もNQPで記述されている - -## MoarVM -- MoarVM は Perl6 に特化した VM -- C 言語で実装されている -- JIT コンパイルなどが現在導入されているが, 起動時間などが低速である問題がある - -## Perl6の名称変更 -- Raku はPerlの次期メジャーバージョンとして設計が始められ, 元々Perl6という名称であったが, Perl6 は言語仕様及び処理実装が Perl5 と大幅に異なっており, 言語的な互換性が存在しない. -- そのため現在有力な処理系である Rakudo から名前を取り Raku という別名がつけられた. +- そこで, 同一ホスト内で終了せずに実行を続けるサーバープロセスを立ち上げ, このサーバープロセス上で立ち上げておいたコンパイラに実行するファイル名を転送し, サーバー上でコンパイルを行う手法を提案し実装する. ## Raku と他言語の起動時間の比較 -- 以下はperl5,ruby,perl6,pythonでhelloworldを出力するだけのプログラムを用いた起動時間の比較である. -- 実行結果 +- perl6と他言語の起動時間の比較行なった. +- 実行環境 + +``` +macOS Mojave version 10.14.5 +メモリ8GB +プロセッサ2.7GHz Intel Core i5 + +ruby 2.3.7p456 +python 2.7.10 +raku 2019.03.1 +perl5 v5.18.4 +``` + +## Raku と他言語の起動時間の比較 +- perl5,ruby,perl6,pythonでhelloworldを出力するだけのプログラムを用いて行なった実行結果である. ``` perl5 @@ -66,34 +58,66 @@ ==== ``` -Raku は perl5 の62.25倍と非常に遅いことがわかる. +Raku は 最も早いperl5 の約62.25倍起動速度が遅いことがわかる. + +## Rakudo +- Rakudoとは現在のRakuの主力な実装である. +- Rakudo は MoarVM, と NQP と呼ばれる Raku のサブセット, NQP と Raku 自身で記述された Raku という構成である. + +![](fig/Rakudo.svg) +- Rakudoの構成 + +## NQP +- NQPとはNot Quite Perl の略で Raku の機能を制限したプログラミング言語である. +- 基本的な文法などは Raku に準拠しているが, 変数を束縛で宣言するなどの違いがある. +- NQPコンパイラ自身もNQPで記述されている + +## MoarVM +- MoarVM は Perl6 に特化した VM +- C 言語で実装されている +- JIT コンパイルなどが現在導入されているが, 起動時間などが低速である問題がある + +## Perl6の名称変更 +- Raku はPerlの次期メジャーバージョンとして設計が始められ, 元々Perl6という名称であったが, Perl6 は言語仕様及び処理実装が Perl5 と大幅に異なっており, 言語的な互換性が存在しない. +- そのため現在有力な処理系である Rakudo から名前を取り Raku という別名がつけられた. ## Rakuが遅い理由 -- +- 後で書く + +## 予測 +- 前述した通り,Rakuは起動に時間がかかっているため ## Raku による Abyssサーバーの実装 - 提案手法に沿い『Abyssサーバー』を実装した. -- Abyssサーバーはクライアント側から投げられた Raku を実行するためのサーバーである. +- AbyssサーバーはUnix domain socketを用いて送信した Raku スクリプトを実行するためのサーバーである. - 下記の図は,Abyss サーバーを用いたスクリプト言語の実行手順である. ![](fig/abyss.svg) -## Abyss Serverの利点 -- Abyss Serverを用いて実行することで, サーバー上で事前に起動した Rakudo を再利用し, 投げられた Perl6 スクリプトの実行を行うため, Rakudo の全体的な処理時間を短縮できる. +## Raku の Unix domain socket 実装 +- 後で書く + +## 予測 +- 前述した通り, Raku はコンパイラの起動に時間がかかっているため,提案手法を用いることで起動時間分早く実行することができると予測する. -## Abyss Serverの欠点 -- +## 通常実行と提案手法の速度比較 +- 今回は,提案手法での実行速度と通常実行での実行速度, この二つの速度の比較を行う +- 題材として行うのはhelloworldを出力するだけのプログラムです. + +## 実行結果 + ## Abyss Server側の実装 - Abyss サーバーは起動すると, まず自身にファイルパスを転送するためのソケットを生成し, その後 ファイルを受け取るための待機ループに入る. -- ファイルパスを受け取ると,ファイルを開き実行する. +- ファイルパスを受け取ると,ファイルを開き実行する. ``` unit class Abyss::Server:ver<0.0.1>; use MONKEY-SEE-NO-EVAL; +use IO::Socket::Unix; method readeval { - my $listen = IO::Socket::INET.new( + my $listen = IO::Socket::Unix.new( :listen, :localhost<localhost>, :localport(3333) @@ -112,7 +136,9 @@ - ユーザーはAbyssのサーバーを起動後,ファイルパスをサーバーに送信する. ``` -my $conn = IO::Socket::INET.new( :host<localhost>, +use IO::Socket::Unix; + +my $conn = IO::Socket::Unix.new( :host<localhost>, :port(3333) ); $conn.print: 'FILEPASS'; @@ -123,11 +149,17 @@ - Raku では, EVAL は通常は使用できないようになっており, MONKEY-SEE-NO-EVAL という pragma を実行することで使うことができるようになる. ``` -use MONKEY-SEE-NO-EVAL; - +use MONKEY-SEE-NO-EVAL; + EVAL "say { 5 + 5 }"; # OUTPUT: 10 ``` +## Abyss Serverの利点 +- Abyss Serverを用いて実行することで, サーバー上で事前に起動した Rakudo を再利用し, 投げられた Perl6 スクリプトの実行を行うため, Rakudo の全体的な処理時間を短縮できる. + +## Abyss Serverの欠点 +- + ## まとめと今後の課題 - Raku の新たな実行方法の提案,及び実装を行なった. - Raku にUnix domain socket の実装を行なった. @@ -138,6 +170,3 @@ ![](fig/Raku.svg) -## Raku の Unix domain socket 実装 -- 後で書く -
--- a/Slide/Slide.pdf.html Wed Jan 08 10:10:13 2020 +0900 +++ b/Slide/Slide.pdf.html Wed Jan 08 22:40:16 2020 +0900 @@ -94,10 +94,69 @@ <ul> <li>Raku の実装の一つであるRakudoは、Byte code である MoarVM と、それ上で動作する Raku のsubsetであるnqp (Not Quite Perl)上に構成されている。</li> <li>現状のRakuの実行はRakuで記述されたコンパイラをloadしてJITしながら実行すること自体に時間がかかっている。</li> - <li>そこで、Rakuをサーバとして動作させ、実行するファイルをサーバに投げて実行する方法を検討する</li> - <li>同一ホスト内で終了せずに実行を続けるサーバープロセスを立ち上げ, このサーバープロセス上で立ち上げておいたコンパイラに実行するファイル名を転送し, サーバー上でコンパイルを行う手法を提案し実装する.</li> + <li>そこで, 同一ホスト内で終了せずに実行を続けるサーバープロセスを立ち上げ, このサーバープロセス上で立ち上げておいたコンパイラに実行するファイル名を転送し, サーバー上でコンパイルを行う手法を提案し実装する.</li> +</ul> + + + +</div> + +<div class='slide'> + <!-- _S9SLIDE_ --> +<h2 id="raku-と他言語の起動時間の比較">Raku と他言語の起動時間の比較</h2> +<ul> + <li>perl6と他言語の起動時間の比較行なった.</li> + <li>実行環境</li> </ul> +<pre><code>macOS Mojave version 10.14.5 +メモリ8GB +プロセッサ2.7GHz Intel Core i5 + +ruby 2.3.7p456 +python 2.7.10 +raku 2019.03.1 +perl5 v5.18.4 +</code></pre> + + + +</div> + +<div class='slide'> + <!-- _S9SLIDE_ --> +<h2 id="raku-と他言語の起動時間の比較-1">Raku と他言語の起動時間の比較</h2> +<ul> + <li>perl5,ruby,perl6,pythonでhelloworldを出力するだけのプログラムを用いて行なった実行結果である.</li> +</ul> + +<pre><code>perl5 +real 0m0.011s +user 0m0.004s +sys 0m0.005s +===== + +Raku +real 0m0.209s +user 0m0.249s +sys 0m0.048s +==== + +ruby +real 0m0.131s +user 0m0.083s +sys 0m0.038s +==== + +python +real 0m0.036s +user 0m0.013s +sys 0m0.021s +==== +</code></pre> + +<p>Raku は 最も早いperl5 の約62.25倍起動速度が遅いことがわかる.</p> + </div> @@ -159,48 +218,20 @@ <div class='slide'> <!-- _S9SLIDE_ --> -<h2 id="raku-と他言語の起動時間の比較">Raku と他言語の起動時間の比較</h2> +<h2 id="rakuが遅い理由">Rakuが遅い理由</h2> <ul> - <li>以下はperl5,ruby,perl6,pythonでhelloworldを出力するだけのプログラムを用いた起動時間の比較である.</li> - <li>実行結果</li> + <li>後で書く</li> </ul> -<pre><code>perl5 -real 0m0.011s -user 0m0.004s -sys 0m0.005s -===== - -Raku -real 0m0.209s -user 0m0.249s -sys 0m0.048s -==== - -ruby -real 0m0.131s -user 0m0.083s -sys 0m0.038s -==== - -python -real 0m0.036s -user 0m0.013s -sys 0m0.021s -==== -</code></pre> - -<p>Raku は perl5 の62.25倍と非常に遅いことがわかる.</p> - </div> <div class='slide'> <!-- _S9SLIDE_ --> -<h2 id="rakuが遅い理由">Rakuが遅い理由</h2> +<h2 id="予測">予測</h2> <ul> - <li></li> + <li>前述した通り,Rakuは起動に時間がかかっているため</li> </ul> @@ -212,7 +243,7 @@ <h2 id="raku-による-abyssサーバーの実装">Raku による Abyssサーバーの実装</h2> <ul> <li>提案手法に沿い『Abyssサーバー』を実装した.</li> - <li>Abyssサーバーはクライアント側から投げられた Raku を実行するためのサーバーである.</li> + <li>AbyssサーバーはUnix domain socketを用いて送信した Raku スクリプトを実行するためのサーバーである.</li> <li>下記の図は,Abyss サーバーを用いたスクリプト言語の実行手順である.</li> </ul> @@ -224,9 +255,9 @@ <div class='slide'> <!-- _S9SLIDE_ --> -<h2 id="abyss-serverの利点">Abyss Serverの利点</h2> +<h2 id="raku-の-unix-domain-socket-実装">Raku の Unix domain socket 実装</h2> <ul> - <li>Abyss Serverを用いて実行することで, サーバー上で事前に起動した Rakudo を再利用し, 投げられた Perl6 スクリプトの実行を行うため, Rakudo の全体的な処理時間を短縮できる.</li> + <li>後で書く</li> </ul> @@ -235,9 +266,9 @@ <div class='slide'> <!-- _S9SLIDE_ --> -<h2 id="abyss-serverの欠点">Abyss Serverの欠点</h2> +<h2 id="予測-1">予測</h2> <ul> - <li></li> + <li>前述した通り, Raku はコンパイラの起動に時間がかかっているため,提案手法を用いることで起動時間分早く実行することができると予測する.</li> </ul> @@ -246,6 +277,26 @@ <div class='slide'> <!-- _S9SLIDE_ --> +<h2 id="通常実行と提案手法の速度比較">通常実行と提案手法の速度比較</h2> +<ul> + <li>今回は,提案手法での実行速度と通常実行での実行速度, この二つの速度の比較を行う</li> + <li>題材として行うのはhelloworldを出力するだけのプログラムです.</li> +</ul> + + + +</div> + +<div class='slide'> + <!-- _S9SLIDE_ --> +<h2 id="実行結果">実行結果</h2> + + + +</div> + +<div class='slide'> + <!-- _S9SLIDE_ --> <h2 id="abyss-server側の実装">Abyss Server側の実装</h2> <ul> <li>Abyss サーバーは起動すると, まず自身にファイルパスを転送するためのソケットを生成し, その後 ファイルを受け取るための待機ループに入る.</li> @@ -254,9 +305,10 @@ <pre><code>unit class Abyss::Server:ver<0.0.1>; use MONKEY-SEE-NO-EVAL; +use IO::Socket::Unix; method readeval { - my $listen = IO::Socket::INET.new( + my $listen = IO::Socket::Unix.new( :listen, :localhost<localhost>, :localport(3333) @@ -282,7 +334,9 @@ <li>ユーザーはAbyssのサーバーを起動後,ファイルパスをサーバーに送信する.</li> </ul> -<pre><code>my $conn = IO::Socket::INET.new( :host<localhost>, +<pre><code>use IO::Socket::Unix; + +my $conn = IO::Socket::Unix.new( :host<localhost>, :port(3333) ); $conn.print: 'FILEPASS'; @@ -300,8 +354,8 @@ <li>Raku では, EVAL は通常は使用できないようになっており, MONKEY-SEE-NO-EVAL という pragma を実行することで使うことができるようになる.</li> </ul> -<pre><code>use MONKEY-SEE-NO-EVAL; - +<pre><code>use MONKEY-SEE-NO-EVAL; + EVAL "say { 5 + 5 }"; # OUTPUT: 10 </code></pre> @@ -311,6 +365,26 @@ <div class='slide'> <!-- _S9SLIDE_ --> +<h2 id="abyss-serverの利点">Abyss Serverの利点</h2> +<ul> + <li>Abyss Serverを用いて実行することで, サーバー上で事前に起動した Rakudo を再利用し, 投げられた Perl6 スクリプトの実行を行うため, Rakudo の全体的な処理時間を短縮できる.</li> +</ul> + + + +</div> + +<div class='slide'> + <!-- _S9SLIDE_ --> +<h2 id="abyss-serverの欠点">Abyss Serverの欠点</h2> +<p>-</p> + + + +</div> + +<div class='slide'> + <!-- _S9SLIDE_ --> <h2 id="まとめと今後の課題">まとめと今後の課題</h2> <ul> <li>Raku の新たな実行方法の提案,及び実装を行なった.</li> @@ -332,17 +406,6 @@ <p><img src="fig/Raku.svg" alt="" /></p> - -</div> - -<div class='slide'> - <!-- _S9SLIDE_ --> -<h2 id="raku-の-unix-domain-socket-実装">Raku の Unix domain socket 実装</h2> -<ul> - <li>後で書く</li> -</ul> - - </div>