view slides/2018/07/10/slide.md @ 49:49a9086fc7e9

auto-Update generated slides by script
author Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
date Tue, 31 Jul 2018 18:28:00 +0900
parents
children
line wrap: on
line source

title: CbCによるMoarVMの改良
author: Takahiro Shimizu
profile:
lang: Japanese


# 研究目的
- Perl5の後継言語として開発されているPerl6はMoarVMと呼ばれるVMを搭載している.
- Perl6はMoarVM,JVM,JavaScript上で動くRakudoと呼ばれる実装と,コンパイラ開発者用のサブセットであるNQPが主な実装となっている.
- 現在Perl6及びMoarVMは全体的な速度がPerl5と比較し低下しており,実務として利用できるレベルに達していない.
- さらにPerl6の実装自体巨大なcase-switch文など見通しが悪くなっている.
- この問題を解決するために現在当研究室で開発している継続を中心にしたContinuation based Cを用いて改良を行う
- CbCの設計理念からVMの実装と親和性が高い事も推測できる為,実際にCbCを用いてどのようにVMが実装できるかを検証する

# 今週の進捗
* 評価用のスクリプトを作成して計測していました

# 評価の例題
* 青空文庫のテキストファイルを1つ読み込んで,かなと漢字を正規表現でキャプチャ,総数をカウントする
* 例 `蜜蜂《みつばち》`
* 今回はPerl5,Perl6,Rubyで実装しベンチマークを計測した

# Perl5実装

```perl
#!/usr/bin/env perl
use strict;
use warnings;
use utf8;
use feature 'say';
use Encode;

my $filename = "./dogura_magura.txt";
open my $fh,'<:encoding(utf-8)',$filename or die qw/can't open/;

my @kana;

while (my $line = <$fh>) {
    chomp $line;
    while( $line =~ m![、。]?(\p{Han}+)《(\p{Hiragana}+)》!g){
        push @kana,[$1,$2];
    }
}

print scalar @kana;
```

# Ruby実装

```ruby
#!/usr/bin/env ruby

File.open("./dogura_magura.txt",'r') do |f|
    hoge = f.read.scan(/[、。]?(\p{Han}+)《(\p{Hiragana}+)》/)
    p hoge.count
end
```

# Perl6実装

```
#!/usr/bin/env perl6
use v6;

my $file = "./dogura_magura.txt";
my $fh = open $file, :r;
my $hoge;

for $fh.lines -> $line {
    if ($line ~~ m:g/<[、。]>?(<:Han>+)"《"(<:Hiragana>+)"》"/ ) {
        say $/[0];
        $hoge += $/.conj;
    }
}

say $hoge;

$fh.close;
```

# 測定結果

```
sh test.sh
perl
6726

real	0m0.209s
user	0m0.153s
sys	0m0.045s

ruby
6726

real	0m0.206s
user	0m0.147s
sys	0m0.048s

perl6
6726

real	0m3.052s
user	0m3.176s
sys	0m0.057s
```

# 測定結果

```
 zsh test.zsh
perl
6726
perl test.pl  0.15s user 0.04s system 95% cpu 0.196 total
ruby
6726
ruby test.rb  0.17s user 0.06s system 94% cpu 0.235 total
perl6
6726
/Users/anatofuz/workspace/cr/Basic/build_perl6/bin/perl6 test.p6  3.21s user 0.07s system 106% cpu 3.090 total
```

* Perl6ではuser timeが圧倒的にかかっているが,systemは他と同レベル
* 生成されたprofilerを見た所JITも吐いているらしい