Mercurial > hg > Papers > 2019 > koo-prosym
changeset 8:3343b5914245
add Slide
author | e165727 <e165727@ie.u-ryukyu.ac.jp> |
---|---|
date | Wed, 25 Dec 2019 16:10:22 +0900 |
parents | 126266fc2c30 |
children | 480229d0ea65 |
files | Paper/.DS_Store Paper/images/.DS_Store Slide/.DS_Store Slide/Slide.html Slide/Slide.md Slide/Slide.pdf.html Slide/fig/.DS_Store Slide/fig/Raku.pdf Slide/fig/Rakudo.pdf Slide/fig/abyss.pdf Slide/fig/emblem-bitmap.pdf |
diffstat | 11 files changed, 225 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/Slide/Slide.html Wed Dec 25 14:47:50 2019 +0900 +++ b/Slide/Slide.html Wed Dec 25 16:10:22 2019 +0900 @@ -111,6 +111,7 @@ <li>Perl6 の実装の一つであるRakudoは、Byte code である MoarVM と、それ上で動作する Perl6 のsubsetであるnqp (Not Quite Perl)上に構成されている。</li> <li>現状のPerl6の実行はPerl6で記述されたコンパイラをloadしてJITしながら実行すること自体に時間がかかっている。</li> <li>そこで、Perl6をサーバとして動作させ、実行するファイルをサーバに投げて実行する方法を検討する</li> + <li>同一ホスト内で終了せずに実行を続けるサーバープロセスを立ち上げ, このサーバープロセス上で立ち上げておいたコンパイラに実行するファイル名を転送し, サーバー上でコンパイルを行う手法を提案し実装する.</li> </ul> @@ -119,7 +120,58 @@ <div class='slide'> <!-- _S9SLIDE_ --> -<h2 id="perl6-による-abyss-の実装">Perl6 による Abyss の実装</h2> +<h2 id="perl6raku">Perl6(Raku)</h2> + + + +</div> + +<div class='slide'> + <!-- _S9SLIDE_ --> +<h2 id="rakudo">Rakudo</h2> +<ul> + <li>Rakudoとは現在のPerl6の主力な実装である.</li> + <li>Rakudo は MoarVM, と NQP と呼ばれる Perl6 のサブセット, NQP と Perl6 自身で記述された Perl6 という構成である.</li> +</ul> + +<p><img src="fig/Rakudo.pdf" alt="" /></p> +<ul> + <li>Rakudoの構成</li> +</ul> + + + +</div> + +<div class='slide'> + <!-- _S9SLIDE_ --> +<h2 id="nqp">NQP</h2> + + + +</div> + +<div class='slide'> + <!-- _S9SLIDE_ --> +<h2 id="perl6-による-abyssサーバーの実装">Perl6 による Abyssサーバーの実装</h2> +<ul> + <li>提案手法に沿い『Abyssサーバー』を実装した.</li> + <li>Abyssサーバーはクライアント側から投げられた Perl6 を実行するためのサーバーである.</li> + <li>下記の図は,Abyss サーバーを用いたスクリプト言語の実行手順である.</li> +</ul> + +<p><img src="fig/abyss.pdf" alt="" /></p> + + + +</div> + +<div class='slide'> + <!-- _S9SLIDE_ --> +<h2 id="abyss-server側の実装">Abyss Server側の実装</h2> +<ul> + <li>Abyss サーバーは起動すると, まず自身にファイル パスを転送するためのソケットを生成し, その後 ファイルを受け取るための待機ループに入る.</li> +</ul> <pre><code>unit class Abyss::Server:ver<0.0.1>; use MONKEY-SEE-NO-EVAL; @@ -146,7 +198,44 @@ <div class='slide'> <!-- _S9SLIDE_ --> -<h2 id="todo">Todo</h2> +<h2 id="abyss-client側の実装">Abyss Client側の実装</h2> +<ul> + <li>ユーザーはAbyssのサーバーを起動後,ファイルパスをサーバーに送信する.</li> +</ul> + +<pre><code>my $conn = IO::Socket::INET.new( :host<localhost>, + :port(3333) ); + +$conn.print: 'FILEPASS'; +</code></pre> + + + +</div> + +<div class='slide'> + <!-- _S9SLIDE_ --> +<h2 id="perl6のeval">Perl6のEVAL</h2> +<ul> + <li>Perl6 では EVAL 関数があり文字列を Perl6 のソースコード自身として評価できる</li> + <li>Perl6 では, EVAL は通常は使用できないようになっており, MONKEY-SEE-NO-EVAL という pragma を実行することで使うことができるようになる.</li> +</ul> + +<pre><code>use MONKEY-SEE-NO-EVAL; + +EVAL "say { 5 + 5 }"; # OUTPUT: 10 +</code></pre> + + + +</div> + +<div class='slide'> + <!-- _S9SLIDE_ --> +<h2 id="まとめと今後の課題">まとめと今後の課題</h2> +<ul> + <li>Perl6 の新たな実行方法の提案,及び実装を行なった.</li> +</ul> </div>
--- a/Slide/Slide.md Wed Dec 25 14:47:50 2019 +0900 +++ b/Slide/Slide.md Wed Dec 25 16:10:22 2019 +0900 @@ -13,8 +13,28 @@ - Perl6 の実装の一つであるRakudoは、Byte code である MoarVM と、それ上で動作する Perl6 のsubsetであるnqp (Not Quite Perl)上に構成されている。 - 現状のPerl6の実行はPerl6で記述されたコンパイラをloadしてJITしながら実行すること自体に時間がかかっている。 - そこで、Perl6をサーバとして動作させ、実行するファイルをサーバに投げて実行する方法を検討する +- 同一ホスト内で終了せずに実行を続けるサーバープロセスを立ち上げ, このサーバープロセス上で立ち上げておいたコンパイラに実行するファイル名を転送し, サーバー上でコンパイルを行う手法を提案し実装する. -## Perl6 による Abyss の実装 +## Perl6(Raku) + +## Rakudo +- Rakudoとは現在のPerl6の主力な実装である. +- Rakudo は MoarVM, と NQP と呼ばれる Perl6 のサブセット, NQP と Perl6 自身で記述された Perl6 という構成である. + +![](fig/Rakudo.pdf) +- Rakudoの構成 + +## NQP + +## Perl6 による Abyssサーバーの実装 +- 提案手法に沿い『Abyssサーバー』を実装した. +- Abyssサーバーはクライアント側から投げられた Perl6 を実行するためのサーバーである. +- 下記の図は,Abyss サーバーを用いたスクリプト言語の実行手順である. + +![](fig/abyss.pdf) + +## Abyss Server側の実装 +- Abyss サーバーは起動すると, まず自身にファイル パスを転送するためのソケットを生成し, その後 ファイルを受け取るための待機ループに入る. ``` unit class Abyss::Server:ver<0.0.1>; @@ -36,4 +56,25 @@ } ``` -## Todo +## Abyss Client側の実装 +- ユーザーはAbyssのサーバーを起動後,ファイルパスをサーバーに送信する. + +``` +my $conn = IO::Socket::INET.new( :host<localhost>, + :port(3333) ); + +$conn.print: 'FILEPASS'; +``` + +## Perl6のEVAL +- Perl6 では EVAL 関数があり文字列を Perl6 のソースコード自身として評価できる +- Perl6 では, EVAL は通常は使用できないようになっており, MONKEY-SEE-NO-EVAL という pragma を実行することで使うことができるようになる. + +``` +use MONKEY-SEE-NO-EVAL; + +EVAL "say { 5 + 5 }"; # OUTPUT: 10 +``` + +## まとめと今後の課題 +- Perl6 の新たな実行方法の提案,及び実装を行なった.
--- a/Slide/Slide.pdf.html Wed Dec 25 14:47:50 2019 +0900 +++ b/Slide/Slide.pdf.html Wed Dec 25 16:10:22 2019 +0900 @@ -95,6 +95,7 @@ <li>Perl6 の実装の一つであるRakudoは、Byte code である MoarVM と、それ上で動作する Perl6 のsubsetであるnqp (Not Quite Perl)上に構成されている。</li> <li>現状のPerl6の実行はPerl6で記述されたコンパイラをloadしてJITしながら実行すること自体に時間がかかっている。</li> <li>そこで、Perl6をサーバとして動作させ、実行するファイルをサーバに投げて実行する方法を検討する</li> + <li>同一ホスト内で終了せずに実行を続けるサーバープロセスを立ち上げ, このサーバープロセス上で立ち上げておいたコンパイラに実行するファイル名を転送し, サーバー上でコンパイルを行う手法を提案し実装する.</li> </ul> @@ -103,7 +104,58 @@ <div class='slide'> <!-- _S9SLIDE_ --> -<h2 id="perl6-による-abyss-の実装">Perl6 による Abyss の実装</h2> +<h2 id="perl6raku">Perl6(Raku)</h2> + + + +</div> + +<div class='slide'> + <!-- _S9SLIDE_ --> +<h2 id="rakudo">Rakudo</h2> +<ul> + <li>Rakudoとは現在のPerl6の主力な実装である.</li> + <li>Rakudo は MoarVM, と NQP と呼ばれる Perl6 のサブセット, NQP と Perl6 自身で記述された Perl6 という構成である.</li> +</ul> + +<p><img src="fig/Rakudo.pdf" alt="" /></p> +<ul> + <li>Rakudoの構成</li> +</ul> + + + +</div> + +<div class='slide'> + <!-- _S9SLIDE_ --> +<h2 id="nqp">NQP</h2> + + + +</div> + +<div class='slide'> + <!-- _S9SLIDE_ --> +<h2 id="perl6-による-abyssサーバーの実装">Perl6 による Abyssサーバーの実装</h2> +<ul> + <li>提案手法に沿い『Abyssサーバー』を実装した.</li> + <li>Abyssサーバーはクライアント側から投げられた Perl6 を実行するためのサーバーである.</li> + <li>下記の図は,Abyss サーバーを用いたスクリプト言語の実行手順である.</li> +</ul> + +<p><img src="fig/abyss.pdf" alt="" /></p> + + + +</div> + +<div class='slide'> + <!-- _S9SLIDE_ --> +<h2 id="abyss-server側の実装">Abyss Server側の実装</h2> +<ul> + <li>Abyss サーバーは起動すると, まず自身にファイル パスを転送するためのソケットを生成し, その後 ファイルを受け取るための待機ループに入る.</li> +</ul> <pre><code>unit class Abyss::Server:ver<0.0.1>; use MONKEY-SEE-NO-EVAL; @@ -130,7 +182,44 @@ <div class='slide'> <!-- _S9SLIDE_ --> -<h2 id="todo">Todo</h2> +<h2 id="abyss-client側の実装">Abyss Client側の実装</h2> +<ul> + <li>ユーザーはAbyssのサーバーを起動後,ファイルパスをサーバーに送信する.</li> +</ul> + +<pre><code>my $conn = IO::Socket::INET.new( :host<localhost>, + :port(3333) ); + +$conn.print: 'FILEPASS'; +</code></pre> + + + +</div> + +<div class='slide'> + <!-- _S9SLIDE_ --> +<h2 id="perl6のeval">Perl6のEVAL</h2> +<ul> + <li>Perl6 では EVAL 関数があり文字列を Perl6 のソースコード自身として評価できる</li> + <li>Perl6 では, EVAL は通常は使用できないようになっており, MONKEY-SEE-NO-EVAL という pragma を実行することで使うことができるようになる.</li> +</ul> + +<pre><code>use MONKEY-SEE-NO-EVAL; + +EVAL "say { 5 + 5 }"; # OUTPUT: 10 +</code></pre> + + + +</div> + +<div class='slide'> + <!-- _S9SLIDE_ --> +<h2 id="まとめと今後の課題">まとめと今後の課題</h2> +<ul> + <li>Perl6 の新たな実行方法の提案,及び実装を行なった.</li> +</ul> </div>