# HG changeset patch # User e165727 # Date 1578668829 -32400 # Node ID 3f4ba3dacff5d1f3cfc75f6c5ab8c1cf134a012e # Parent 4e34198dcd0541309b2ce3f4b1351ed63a5747f0 比較時間等の修正 diff -r 4e34198dcd05 -r 3f4ba3dacff5 Slide/Slide.html --- a/Slide/Slide.html Thu Jan 09 18:49:36 2020 +0900 +++ b/Slide/Slide.html Sat Jan 11 00:07:09 2020 +0900 @@ -128,8 +128,9 @@
macOS Mojave version 10.14.5
 メモリ8GB
 プロセッサ2.7GHz Intel Core i5
+
-ruby 2.3.7p456 +
ruby 2.3.7p456
 python 2.7.10
 raku 2019.03.1
 perl5 v5.18.4
@@ -143,29 +144,25 @@
   
 

Raku と他言語の起動時間の比較

    -
  • perl5,ruby,raku,pythonでhelloworldを出力するだけのプログラムを用いて行なった実行結果である.
  • +
  • perl5,ruby,raku,pythonでhelloworldを出力するプログラムを用いて行なった実行結果である.
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
 ====
@@ -181,7 +178,7 @@
   
 

Rakudo

    -
  • Rakudoとは現在のRakuの主力な実装である.
  • +
  • Rakudoとは現在のRakuの主力な実装である.(Raku は言語名, Rakudo はコンパイラ)
  • Rakudo は MoarVM, と NQP と呼ばれる Raku のサブセット, NQP と Raku 自身で記述された Raku という構成である.
@@ -224,8 +221,25 @@

Perl6 の名称変更

    -
  • Raku はPerlの次期メジャーバージョンとして設計が始められ, 元々Perl6という名称であったが, Perl6 は言語仕様及び処理実装が Perl5 と大幅に異なっており, 言語的な互換性が存在しない.
  • -
  • そのため現在有力な処理系である Rakudo から名前を取り Raku という別名がつけられた.
  • +
  • Raku はPerlの次期メジャーバージョンとして設計が始められ, 元々Perl6という名称であったが, Perl6 は言語仕様及び処理実装が Perl5 と大幅に異なっており, 言語的な互換性が存在しないため別名がつけられました.
  • +
  • 現在有力な処理系である Rakudo から名前を取り Raku という別名がつけられた.
  • +
+ + + + + +
+ +

Rakudoの語源

+
    +
  • ちなみに Rakudo の語源は, 楽土と駱駝道で
  • +
  • 楽土の方はLallyが楽に言語を作りたいという意味で Rakudo
  • +
  • 駱駝道の方は Perlのマスコットキャラクターが🐪だったからです +
      +
    • http://blogs.perl.org/users/zoffix_znet/2017/07/the-hot-new-language-named-rakudo.html
    • +
    +
@@ -239,8 +253,11 @@
  • 通常 Ruby のようなスクリプト言語ではまず YARV などのプロセスVM が起動し,その後スクリプトを Byte code に変換して実行という手順を踏む.
  • Rakudo はインタプリタの起動時間及び, 全体的な処理時間が他のスクリプト言語と比較して低速である.
  • これは Rakudo 自体が Raku と NQP で書かれているため, MoarVMを起動し, Rakudo と NQP のByte codeを読み取り, Rakudoを起動し, その後スクリプトを読み取り, スクリプトの Byte code 変換というような手順で進むためである.
  • -
  • また Raku は実行時の情報が必要であり, メソッドを実行する際に invoke が走ることも遅い原因である.
  • -
  • (incokeとは何か書く)
  • +
  • また Raku は実行時の情報が必要であり, メソッドを実行する際に invoke が走ることも遅い原因である. +
      +
    • invoke はMoarVM の method 呼び出しのbyte codeです.
    • +
    +
  • @@ -249,14 +266,14 @@
    -

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

    +

    Raku による Abyss Server の実装

      -
    • 提案手法に沿い『Abyssサーバー』を実装した.
    • -
    • AbyssサーバーはUnix domain socketを用いて送信した Raku スクリプトを実行するためのサーバーである.
    • -
    • 下記の図は,Abyss サーバーを用いたスクリプト言語の実行手順である.
    • +
    • 提案手法に沿い『Abyss Server』を実装した.
    • +
    • Abyss Server はUnix domain socketを用いて送信した Raku スクリプトを実行するための Server である.
    • +
    • 下記の図は, Abyss Server を用いたスクリプト言語の実行手順です.
    -

    +

    @@ -266,8 +283,19 @@

    Raku の Unix domain socket 実装

      -
    • Rakuには現在Unix domain socketの実装がないため,Unix domain socket の実装を行なった.
    • -
    • +
    • Unix domain socket でなくINET で実装した場合, 他者からスクリプトを送りつけられる可能性がある. +
        +
      • そのため今回はUnix domain socket を用いて実装しました.
      • +
      +
    • +
    • Rakuには現在Unix domain socketの実装がないため, Unix domain socket の実装を行なった.
    • +
    • IO::Socketがroleとして定義されている
    • +
    • 現状 Raku にはIO::Socket::INETとIO::Socket::Asyncの実装がある
    • +
    • IO::Socketを実装した IO::Socket::Unix を実装しました +
        +
      • IO::Socket::Unixの中ではnqpの機能を使う必要がある
      • +
      +
    @@ -299,7 +327,7 @@
    -

    実行結果

    +

    1回だけ呼び出した場合

    • 通常実行 @@ -316,6 +344,33 @@
    • 0.0275 sec
    +
  • 提案手法は通常実行に比べて約10倍早い実行結果になった
  • + + + + +
    + +
    + +

    10回呼び出した場合

    + +
      +
    • 通常実行 +
        +
      • 2.187491 sec
      • +
      • 2.242387 sec
      • +
      • 2.198792 sec
      • +
      +
    • +
    • 提案手法 +
        +
      • 0.2552448 sec
      • +
      • 0.2340882 sec
      • +
      • 0.2795233 sec
      • +
      +
    • +
    • 提案手法は通常実行に比べて約10倍早い実行結果になった
    @@ -326,7 +381,7 @@

    Abyss Server側の実装

      -
    • Abyss Server は起動すると, まず自身にファイルパスを転送するためのソケットを生成し, その後 ファイルを受け取るための待機ループに入る.
    • +
    • Abyss Server は起動すると, まず自身にファイルパスを転送するためのソケットを生成し, その後ファイルを受け取るための待機ループに入る.
    • ファイルパスを受け取ると, ファイルを開き実行する.
    @@ -377,7 +432,7 @@

    Raku のEVAL

      -
    • Raku では EVAL 関数があり文字列を Perl6 のソースコード自身として評価できる
    • +
    • Raku では EVAL 関数があり文字列を Raku のソースコード自身として評価できる
    • Raku では, EVAL は通常は使用できないようになっており, MONKEY-SEE-NO-EVAL という pragma を実行することで使うことができるようになる.
    @@ -394,7 +449,11 @@

    Abyss Serverの利点

      -
    • Abyss Serverを用いて実行することで, サーバー上で事前に起動した Rakudo を再利用し, 投げられた Raku スクリプトの実行を行うため, Rakudo の起動時間を短縮できる.
    • +
    • Abyss Serverを用いて実行することで, サーバー上で事前に起動した Rakudo を再利用し, 投げられた Raku スクリプトの実行を行うため, Rakudo の起動時間を短縮できる. +
        +
      • 約10分の1
      • +
      +
    @@ -406,7 +465,14 @@

    Abyss Serverの欠点

    • 現在 Abyss Server には 一度スクリプトを実行した後にサーバー内の環境をリセットする機能が存在しないため,スクリプトがサーバー内の環境に影響を及ぼした場合,通常実行と違う挙動をする危険性がある
    • -
    • Raku に eval の出力を socket に切り替える機能が存在しないので出力がサーバー側に返ってしまう
    • +
    • Raku に eval の出力を socket に切り替える機能が存在しないので出力が Server 側に返ってしまい,ユーザー側に返ってこない
    • +
    • 同時に二つ以上のタスクを与えられると実行順のスケジューリングができない +
        +
      • 与えられた順番に処理していく
      • +
      +
    • +
    • 異常に長いタスクが投げられた場合, 次のタスクが前のタスクが終わるまで実行ができない
    • +
    • 起動時のオプションが選択出来ない
    @@ -419,8 +485,8 @@
    • Raku の新たな実行方法の提案,及び実装を行なった.
    • Raku にUnix domain socket の実装を行なった.
    • -
    • Raku の速度改善において, 同一ホスト内でサーバープロセスを立ち上げて,サーバープロセス内であらかじめ立ち上げておいたコンパイラを立ち上げて起き, 実行するファイル名を転送し,サーバープロセス上でコンパイルを行う手法は有効であると考えられる
    • -
    • 今後は
    • +
    • Raku の速度改善において, 同一ホスト内でサーバープロセスを生成し,サーバープロセス内であらかじめコンパイラを立ち上げて起き, 実行するファイル名を転送し,サーバープロセス上でコンパイルを行う手法は有効であると考えられる
    • +
    • 今後は一度投げられたスクリプトをキャッシュで保存しておき,再度実行する際に,そのキャッシュを用いてコンパイル時間を省くような仕組みを入れて開発を進めたいです.
    @@ -438,6 +504,14 @@

    + +
    + +
    + +

    Rakuの導入

    + +
    diff -r 4e34198dcd05 -r 3f4ba3dacff5 Slide/Slide.md --- a/Slide/Slide.md Thu Jan 09 18:49:36 2020 +0900 +++ b/Slide/Slide.md Sat Jan 11 00:07:09 2020 +0900 @@ -22,7 +22,9 @@ macOS Mojave version 10.14.5 メモリ8GB プロセッサ2.7GHz Intel Core i5 +``` +``` ruby 2.3.7p456 python 2.7.10 raku 2019.03.1 @@ -30,29 +32,25 @@ ``` ## Raku と他言語の起動時間の比較 -- perl5,ruby,raku,pythonでhelloworldを出力するだけのプログラムを用いて行なった実行結果である. +- perl5,ruby,raku,pythonでhelloworldを出力するプログラムを用いて行なった実行結果である. ``` 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 ==== @@ -61,7 +59,7 @@ Raku は 最も早いperl5 の約62.25倍起動速度が遅いことがわかる. ## Rakudo -- Rakudoとは現在のRakuの主力な実装である. +- Rakudoとは現在のRakuの主力な実装である.(Raku は言語名, Rakudo はコンパイラ) - Rakudo は MoarVM, と NQP と呼ばれる Raku のサブセット, NQP と Raku 自身で記述された Raku という構成である. ![](fig/Rakudo.svg) @@ -78,26 +76,37 @@ - JIT コンパイルなどが現在導入されているが, 起動時間などが低速である問題がある ## Perl6 の名称変更 -- Raku はPerlの次期メジャーバージョンとして設計が始められ, 元々Perl6という名称であったが, Perl6 は言語仕様及び処理実装が Perl5 と大幅に異なっており, 言語的な互換性が存在しない. -- そのため現在有力な処理系である Rakudo から名前を取り Raku という別名がつけられた. +- Raku はPerlの次期メジャーバージョンとして設計が始められ, 元々Perl6という名称であったが, Perl6 は言語仕様及び処理実装が Perl5 と大幅に異なっており, 言語的な互換性が存在しないため別名がつけられました. +- 現在有力な処理系である Rakudo から名前を取り Raku という別名がつけられた. + +## Rakudoの語源 +- ちなみに Rakudo の語源は, 楽土と駱駝道で +- 楽土の方はLallyが楽に言語を作りたいという意味で Rakudo +- 駱駝道の方は Perlのマスコットキャラクターが🐪だったからです + - http://blogs.perl.org/users/zoffix_znet/2017/07/the-hot-new-language-named-rakudo.html ## Rakuが遅い理由 - 通常 Ruby のようなスクリプト言語ではまず YARV などのプロセスVM が起動し,その後スクリプトを Byte code に変換して実行という手順を踏む. - Rakudo はインタプリタの起動時間及び, 全体的な処理時間が他のスクリプト言語と比較して低速である. - これは Rakudo 自体が Raku と NQP で書かれているため, MoarVMを起動し, Rakudo と NQP のByte codeを読み取り, Rakudoを起動し, その後スクリプトを読み取り, スクリプトの Byte code 変換というような手順で進むためである. - また Raku は実行時の情報が必要であり, メソッドを実行する際に invoke が走ることも遅い原因である. -- (incokeとは何か書く) + - invoke はMoarVM の method 呼び出しのbyte codeです. -## Raku による Abyssサーバーの実装 -- 提案手法に沿い『Abyssサーバー』を実装した. -- AbyssサーバーはUnix domain socketを用いて送信した Raku スクリプトを実行するためのサーバーである. -- 下記の図は,Abyss サーバーを用いたスクリプト言語の実行手順である. +## Raku による Abyss Server の実装 +- 提案手法に沿い『Abyss Server』を実装した. +- Abyss Server はUnix domain socketを用いて送信した Raku スクリプトを実行するための Server である. +- 下記の図は, Abyss Server を用いたスクリプト言語の実行手順です. -![](fig/abyss.svg) +![](fig/Abyss.svg) ## Raku の Unix domain socket 実装 -- Rakuには現在Unix domain socketの実装がないため,Unix domain socket の実装を行なった. -- +- Unix domain socket でなくINET で実装した場合, 他者からスクリプトを送りつけられる可能性がある. + - そのため今回はUnix domain socket を用いて実装しました. +- Rakuには現在Unix domain socketの実装がないため, Unix domain socket の実装を行なった. +- IO::Socketがroleとして定義されている +- 現状 Raku にはIO::Socket::INETとIO::Socket::Asyncの実装がある +- IO::Socketを実装した IO::Socket::Unix を実装しました + - IO::Socket::Unixの中ではnqpの機能を使う必要がある ## 通常実行と提案手法の速度比較 - 今回は,提案手法での実行速度と通常実行での実行速度, この二つの速度の比較を行う @@ -108,7 +117,7 @@ ## 予測 - 前述した通り, Raku はコンパイラの起動に時間がかかっているため, 提案手法を用いることで起動時間分早く実行することができると予測する. -## 実行結果 +## 1回だけ呼び出した場合 - 通常実行 - 0.2695 sec @@ -120,8 +129,24 @@ - 0.0219 sec - 0.0275 sec +- 提案手法は通常実行に比べて約10倍早い実行結果になった + +## 10回呼び出した場合 + +- 通常実行 + - 2.187491 sec + - 2.242387 sec + - 2.198792 sec + +- 提案手法 + - 0.2552448 sec + - 0.2340882 sec + - 0.2795233 sec + +- 提案手法は通常実行に比べて約10倍早い実行結果になった + ## Abyss Server側の実装 -- Abyss Server は起動すると, まず自身にファイルパスを転送するためのソケットを生成し, その後 ファイルを受け取るための待機ループに入る. +- Abyss Server は起動すると, まず自身にファイルパスを転送するためのソケットを生成し, その後ファイルを受け取るための待機ループに入る. - ファイルパスを受け取ると, ファイルを開き実行する. ``` @@ -158,7 +183,7 @@ ``` ## Raku のEVAL -- Raku では EVAL 関数があり文字列を Perl6 のソースコード自身として評価できる +- Raku では EVAL 関数があり文字列を Raku のソースコード自身として評価できる - Raku では, EVAL は通常は使用できないようになっており, MONKEY-SEE-NO-EVAL という pragma を実行することで使うことができるようになる. ``` @@ -169,17 +194,22 @@ ## Abyss Serverの利点 - Abyss Serverを用いて実行することで, サーバー上で事前に起動した Rakudo を再利用し, 投げられた Raku スクリプトの実行を行うため, Rakudo の起動時間を短縮できる. + - 約10分の1 ## Abyss Serverの欠点 - 現在 Abyss Server には 一度スクリプトを実行した後にサーバー内の環境をリセットする機能が存在しないため,スクリプトがサーバー内の環境に影響を及ぼした場合,通常実行と違う挙動をする危険性がある -- Raku に eval の出力を socket に切り替える機能が存在しないので出力がサーバー側に返ってしまう - +- Raku に eval の出力を socket に切り替える機能が存在しないので出力が Server 側に返ってしまい,ユーザー側に返ってこない +- 同時に二つ以上のタスクを与えられると実行順のスケジューリングができない + - 与えられた順番に処理していく +- 異常に長いタスクが投げられた場合, 次のタスクが前のタスクが終わるまで実行ができない +- 起動時のオプションが選択出来ない ## まとめと今後の課題 - Raku の新たな実行方法の提案,及び実装を行なった. - Raku にUnix domain socket の実装を行なった. -- Raku の速度改善において, 同一ホスト内でサーバープロセスを立ち上げて,サーバープロセス内であらかじめ立ち上げておいたコンパイラを立ち上げて起き, 実行するファイル名を転送し,サーバープロセス上でコンパイルを行う手法は有効であると考えられる -- 今後は +- Raku の速度改善において, 同一ホスト内でサーバープロセスを生成し,サーバープロセス内であらかじめコンパイラを立ち上げて起き, 実行するファイル名を転送し,サーバープロセス上でコンパイルを行う手法は有効であると考えられる +- 今後は一度投げられたスクリプトをキャッシュで保存しておき,再度実行する際に,そのキャッシュを用いてコンパイル時間を省くような仕組みを入れて開発を進めたいです. + ## Raku の実装に関わる様々な言語 - Raku は, Larry wall により設計されたオブジェクト指向スクリプト言語である. @@ -187,3 +217,5 @@ ![](fig/Raku.svg) +## Rakuの導入 + diff -r 4e34198dcd05 -r 3f4ba3dacff5 Slide/Slide.pdf.html --- a/Slide/Slide.pdf.html Thu Jan 09 18:49:36 2020 +0900 +++ b/Slide/Slide.pdf.html Sat Jan 11 00:07:09 2020 +0900 @@ -112,8 +112,9 @@
    macOS Mojave version 10.14.5
     メモリ8GB
     プロセッサ2.7GHz Intel Core i5
    +
    -ruby 2.3.7p456 +
    ruby 2.3.7p456
     python 2.7.10
     raku 2019.03.1
     perl5 v5.18.4
    @@ -127,29 +128,25 @@
       
     

    Raku と他言語の起動時間の比較

      -
    • perl5,ruby,raku,pythonでhelloworldを出力するだけのプログラムを用いて行なった実行結果である.
    • +
    • perl5,ruby,raku,pythonでhelloworldを出力するプログラムを用いて行なった実行結果である.
    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
     ====
    @@ -165,7 +162,7 @@
       
     

    Rakudo

      -
    • Rakudoとは現在のRakuの主力な実装である.
    • +
    • Rakudoとは現在のRakuの主力な実装である.(Raku は言語名, Rakudo はコンパイラ)
    • Rakudo は MoarVM, と NQP と呼ばれる Raku のサブセット, NQP と Raku 自身で記述された Raku という構成である.
    @@ -208,8 +205,25 @@

    Perl6 の名称変更

      -
    • Raku はPerlの次期メジャーバージョンとして設計が始められ, 元々Perl6という名称であったが, Perl6 は言語仕様及び処理実装が Perl5 と大幅に異なっており, 言語的な互換性が存在しない.
    • -
    • そのため現在有力な処理系である Rakudo から名前を取り Raku という別名がつけられた.
    • +
    • Raku はPerlの次期メジャーバージョンとして設計が始められ, 元々Perl6という名称であったが, Perl6 は言語仕様及び処理実装が Perl5 と大幅に異なっており, 言語的な互換性が存在しないため別名がつけられました.
    • +
    • 現在有力な処理系である Rakudo から名前を取り Raku という別名がつけられた.
    • +
    + + + +
    + +
    + +

    Rakudoの語源

    +
      +
    • ちなみに Rakudo の語源は, 楽土と駱駝道で
    • +
    • 楽土の方はLallyが楽に言語を作りたいという意味で Rakudo
    • +
    • 駱駝道の方は Perlのマスコットキャラクターが🐪だったからです +
        +
      • http://blogs.perl.org/users/zoffix_znet/2017/07/the-hot-new-language-named-rakudo.html
      • +
      +
    @@ -223,8 +237,11 @@
  • 通常 Ruby のようなスクリプト言語ではまず YARV などのプロセスVM が起動し,その後スクリプトを Byte code に変換して実行という手順を踏む.
  • Rakudo はインタプリタの起動時間及び, 全体的な処理時間が他のスクリプト言語と比較して低速である.
  • これは Rakudo 自体が Raku と NQP で書かれているため, MoarVMを起動し, Rakudo と NQP のByte codeを読み取り, Rakudoを起動し, その後スクリプトを読み取り, スクリプトの Byte code 変換というような手順で進むためである.
  • -
  • また Raku は実行時の情報が必要であり, メソッドを実行する際に invoke が走ることも遅い原因である.
  • -
  • (incokeとは何か書く)
  • +
  • また Raku は実行時の情報が必要であり, メソッドを実行する際に invoke が走ることも遅い原因である. +
      +
    • invoke はMoarVM の method 呼び出しのbyte codeです.
    • +
    +
  • @@ -233,14 +250,14 @@
    -

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

    +

    Raku による Abyss Server の実装

      -
    • 提案手法に沿い『Abyssサーバー』を実装した.
    • -
    • AbyssサーバーはUnix domain socketを用いて送信した Raku スクリプトを実行するためのサーバーである.
    • -
    • 下記の図は,Abyss サーバーを用いたスクリプト言語の実行手順である.
    • +
    • 提案手法に沿い『Abyss Server』を実装した.
    • +
    • Abyss Server はUnix domain socketを用いて送信した Raku スクリプトを実行するための Server である.
    • +
    • 下記の図は, Abyss Server を用いたスクリプト言語の実行手順です.
    -

    +

    @@ -250,8 +267,19 @@

    Raku の Unix domain socket 実装

      -
    • Rakuには現在Unix domain socketの実装がないため,Unix domain socket の実装を行なった.
    • -
    • +
    • Unix domain socket でなくINET で実装した場合, 他者からスクリプトを送りつけられる可能性がある. +
        +
      • そのため今回はUnix domain socket を用いて実装しました.
      • +
      +
    • +
    • Rakuには現在Unix domain socketの実装がないため, Unix domain socket の実装を行なった.
    • +
    • IO::Socketがroleとして定義されている
    • +
    • 現状 Raku にはIO::Socket::INETとIO::Socket::Asyncの実装がある
    • +
    • IO::Socketを実装した IO::Socket::Unix を実装しました +
        +
      • IO::Socket::Unixの中ではnqpの機能を使う必要がある
      • +
      +
    @@ -283,7 +311,7 @@
    -

    実行結果

    +

    1回だけ呼び出した場合

    • 通常実行 @@ -300,6 +328,33 @@
    • 0.0275 sec
    +
  • 提案手法は通常実行に比べて約10倍早い実行結果になった
  • + + + + +
    + +
    + +

    10回呼び出した場合

    + +
      +
    • 通常実行 +
        +
      • 2.187491 sec
      • +
      • 2.242387 sec
      • +
      • 2.198792 sec
      • +
      +
    • +
    • 提案手法 +
        +
      • 0.2552448 sec
      • +
      • 0.2340882 sec
      • +
      • 0.2795233 sec
      • +
      +
    • +
    • 提案手法は通常実行に比べて約10倍早い実行結果になった
    @@ -310,7 +365,7 @@

    Abyss Server側の実装

      -
    • Abyss Server は起動すると, まず自身にファイルパスを転送するためのソケットを生成し, その後 ファイルを受け取るための待機ループに入る.
    • +
    • Abyss Server は起動すると, まず自身にファイルパスを転送するためのソケットを生成し, その後ファイルを受け取るための待機ループに入る.
    • ファイルパスを受け取ると, ファイルを開き実行する.
    @@ -361,7 +416,7 @@

    Raku のEVAL

      -
    • Raku では EVAL 関数があり文字列を Perl6 のソースコード自身として評価できる
    • +
    • Raku では EVAL 関数があり文字列を Raku のソースコード自身として評価できる
    • Raku では, EVAL は通常は使用できないようになっており, MONKEY-SEE-NO-EVAL という pragma を実行することで使うことができるようになる.
    @@ -378,7 +433,11 @@

    Abyss Serverの利点

      -
    • Abyss Serverを用いて実行することで, サーバー上で事前に起動した Rakudo を再利用し, 投げられた Raku スクリプトの実行を行うため, Rakudo の起動時間を短縮できる.
    • +
    • Abyss Serverを用いて実行することで, サーバー上で事前に起動した Rakudo を再利用し, 投げられた Raku スクリプトの実行を行うため, Rakudo の起動時間を短縮できる. +
        +
      • 約10分の1
      • +
      +
    @@ -390,7 +449,14 @@

    Abyss Serverの欠点

    • 現在 Abyss Server には 一度スクリプトを実行した後にサーバー内の環境をリセットする機能が存在しないため,スクリプトがサーバー内の環境に影響を及ぼした場合,通常実行と違う挙動をする危険性がある
    • -
    • Raku に eval の出力を socket に切り替える機能が存在しないので出力がサーバー側に返ってしまう
    • +
    • Raku に eval の出力を socket に切り替える機能が存在しないので出力が Server 側に返ってしまい,ユーザー側に返ってこない
    • +
    • 同時に二つ以上のタスクを与えられると実行順のスケジューリングができない +
        +
      • 与えられた順番に処理していく
      • +
      +
    • +
    • 異常に長いタスクが投げられた場合, 次のタスクが前のタスクが終わるまで実行ができない
    • +
    • 起動時のオプションが選択出来ない
    @@ -403,8 +469,8 @@
    • Raku の新たな実行方法の提案,及び実装を行なった.
    • Raku にUnix domain socket の実装を行なった.
    • -
    • Raku の速度改善において, 同一ホスト内でサーバープロセスを立ち上げて,サーバープロセス内であらかじめ立ち上げておいたコンパイラを立ち上げて起き, 実行するファイル名を転送し,サーバープロセス上でコンパイルを行う手法は有効であると考えられる
    • -
    • 今後は
    • +
    • Raku の速度改善において, 同一ホスト内でサーバープロセスを生成し,サーバープロセス内であらかじめコンパイラを立ち上げて起き, 実行するファイル名を転送し,サーバープロセス上でコンパイルを行う手法は有効であると考えられる
    • +
    • 今後は一度投げられたスクリプトをキャッシュで保存しておき,再度実行する際に,そのキャッシュを用いてコンパイル時間を省くような仕組みを入れて開発を進めたいです.
    @@ -422,6 +488,14 @@

    + +
    + +
    + +

    Rakuの導入

    + +
    diff -r 4e34198dcd05 -r 3f4ba3dacff5 Slide/fig/abyss.pdf Binary file Slide/fig/abyss.pdf has changed diff -r 4e34198dcd05 -r 3f4ba3dacff5 Slide/fig/abyss.svg --- a/Slide/fig/abyss.svg Thu Jan 09 18:49:36 2020 +0900 +++ b/Slide/fig/abyss.svg Sat Jan 11 00:07:09 2020 +0900 @@ -1,5 +1,5 @@ - + @@ -50,24 +50,6 @@ - - - - - - - - - - - - - - - - - - @@ -89,42 +71,25 @@ - - - - + + - - - - - - - - - - - - - - + + + + + + + + + + - - - - - - - - - - - - - - - + + + +