Perl6(Raku)のサーバーを使った高速実行

Kouki Fukuda, Shinji Kono 琉球大学

研究背景

研究概要

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

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
user	0m0.004s
sys	0m0.005s
=====

Raku
user	0m0.249s
sys	0m0.048s
====

ruby
user	0m0.083s
sys	0m0.038s
====

python
user	0m0.013s
sys	0m0.021s
====

Raku は 最も早いperl5 の約62.25倍起動速度が遅いことがわかる.

Rakudo

NQP

MoarVM

Perl6 の名称変更

Rakudoの語源

Rakuが遅い理由

Raku による Abyss Server の実装

Raku の Unix domain socket 実装

通常実行と提案手法の速度比較

予測

1回だけ呼び出した場合

10回呼び出した場合

Abyss Server側の実装

unit class Abyss::Server:ver<0.0.1>;
use MONKEY-SEE-NO-EVAL;
use IO::Socket::Unix;

method readeval {
  my $listen = IO::Socket::Unix.new( 
    :listen,
    :localhost<localhost>,
    :localport(3333) 
    );
  loop {
    my $conn = $listen.accept;
    while my $buf = $conn.read(1024) {
      EVALFILE $buf.decode;
    }
    $conn.close;
  }
}

Abyss Client側の実装

use IO::Socket::Unix;

my $conn = IO::Socket::Unix.new( :host<localhost>,
                                 :port(3333) );

$conn.print: 'FILEPASS';

Raku のEVAL

use MONKEY-SEE-NO-EVAL;

EVAL "say { 5 + 5 }";   # OUTPUT: 10

Abyss Serverの利点

Abyss Serverの欠点

まとめと今後の課題

Raku の実装に関わる様々な言語

Rakuの導入