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

Kouki Fukuda, Shinji Kono 琉球大学

研究背景

研究概要

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

macOS Mojave version 10.14.5
メモリ8GB
プロセッサ2.7GHz Intel Core i5
Language Version
raku 2019.03.1
perl5 v5.18.4
python 2.7.10
ruby 2.3.7p456

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

Language Time
raku 0.249 sec
perl5 0.004 sec
python 0.013 sec
ruby 0.083 sec

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

Rakudo

NQP

MoarVM

Perl6 の名称変更

Rakudoの語源

Rakuが遅い理由

Raku による Abyss Server の実装

Raku の Unix domain socket 実装

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

予測

実行結果

フィボナッチ数列の例題

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の欠点

まとめと今後の課題