diff 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 diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/slides/2018/07/10/slide.md	Tue Jul 31 18:28:00 2018 +0900
@@ -0,0 +1,123 @@
+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も吐いているらしい