# HG changeset patch # User e165727 # Date 1577257822 -32400 # Node ID 3343b59142453d72f121c047f0d0cf91a0c7ff8e # Parent 126266fc2c30f482e1c050cea9c74c6671068b02 add Slide diff -r 126266fc2c30 -r 3343b5914245 Paper/.DS_Store Binary file Paper/.DS_Store has changed diff -r 126266fc2c30 -r 3343b5914245 Paper/images/.DS_Store Binary file Paper/images/.DS_Store has changed diff -r 126266fc2c30 -r 3343b5914245 Slide/.DS_Store Binary file Slide/.DS_Store has changed diff -r 126266fc2c30 -r 3343b5914245 Slide/Slide.html --- 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 @@
  • Perl6 の実装の一つであるRakudoは、Byte code である MoarVM と、それ上で動作する Perl6 のsubsetであるnqp (Not Quite Perl)上に構成されている。
  • 現状のPerl6の実行はPerl6で記述されたコンパイラをloadしてJITしながら実行すること自体に時間がかかっている。
  • そこで、Perl6をサーバとして動作させ、実行するファイルをサーバに投げて実行する方法を検討する
  • +
  • 同一ホスト内で終了せずに実行を続けるサーバープロセスを立ち上げ, このサーバープロセス上で立ち上げておいたコンパイラに実行するファイル名を転送し, サーバー上でコンパイルを行う手法を提案し実装する.
  • @@ -119,7 +120,58 @@
    -

    Perl6 による Abyss の実装

    +

    Perl6(Raku)

    + + + +
    + +
    + +

    Rakudo

    + + +

    + + + + +
    + +
    + +

    NQP

    + + + +
    + +
    + +

    Perl6 による Abyssサーバーの実装

    + + +

    + + + +
    + +
    + +

    Abyss Server側の実装

    +
    unit class Abyss::Server:ver<0.0.1>;
     use MONKEY-SEE-NO-EVAL;
    @@ -146,7 +198,44 @@
     
     
    -

    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 の新たな実行方法の提案,及び実装を行なった.
    • +
    diff -r 126266fc2c30 -r 3343b5914245 Slide/Slide.md --- 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, + :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 の新たな実行方法の提案,及び実装を行なった. diff -r 126266fc2c30 -r 3343b5914245 Slide/Slide.pdf.html --- 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 @@
  • Perl6 の実装の一つであるRakudoは、Byte code である MoarVM と、それ上で動作する Perl6 のsubsetであるnqp (Not Quite Perl)上に構成されている。
  • 現状のPerl6の実行はPerl6で記述されたコンパイラをloadしてJITしながら実行すること自体に時間がかかっている。
  • そこで、Perl6をサーバとして動作させ、実行するファイルをサーバに投げて実行する方法を検討する
  • +
  • 同一ホスト内で終了せずに実行を続けるサーバープロセスを立ち上げ, このサーバープロセス上で立ち上げておいたコンパイラに実行するファイル名を転送し, サーバー上でコンパイルを行う手法を提案し実装する.
  • @@ -103,7 +104,58 @@
    -

    Perl6 による Abyss の実装

    +

    Perl6(Raku)

    + + + +
    + +
    + +

    Rakudo

    +
      +
    • Rakudoとは現在のPerl6の主力な実装である.
    • +
    • Rakudo は MoarVM, と NQP と呼ばれる Perl6 のサブセット, NQP と Perl6 自身で記述された Perl6 という構成である.
    • +
    + +

    +
      +
    • Rakudoの構成
    • +
    + + + +
    + +
    + +

    NQP

    + + + +
    + +
    + +

    Perl6 による Abyssサーバーの実装

    +
      +
    • 提案手法に沿い『Abyssサーバー』を実装した.
    • +
    • Abyssサーバーはクライアント側から投げられた Perl6 を実行するためのサーバーである.
    • +
    • 下記の図は,Abyss サーバーを用いたスクリプト言語の実行手順である.
    • +
    + +

    + + + +
    + +
    + +

    Abyss Server側の実装

    +
      +
    • Abyss サーバーは起動すると, まず自身にファイル パスを転送するためのソケットを生成し, その後 ファイルを受け取るための待機ループに入る.
    • +
    unit class Abyss::Server:ver<0.0.1>;
     use MONKEY-SEE-NO-EVAL;
    @@ -130,7 +182,44 @@
     
     
    -

    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 の新たな実行方法の提案,及び実装を行なった.
    • +
    diff -r 126266fc2c30 -r 3343b5914245 Slide/fig/.DS_Store Binary file Slide/fig/.DS_Store has changed diff -r 126266fc2c30 -r 3343b5914245 Slide/fig/Raku.pdf Binary file Slide/fig/Raku.pdf has changed diff -r 126266fc2c30 -r 3343b5914245 Slide/fig/Rakudo.pdf Binary file Slide/fig/Rakudo.pdf has changed diff -r 126266fc2c30 -r 3343b5914245 Slide/fig/abyss.pdf Binary file Slide/fig/abyss.pdf has changed diff -r 126266fc2c30 -r 3343b5914245 Slide/fig/emblem-bitmap.pdf Binary file Slide/fig/emblem-bitmap.pdf has changed