comparison 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
comparison
equal deleted inserted replaced
48:bc8b0482c14f 49:49a9086fc7e9
1 title: CbCによるMoarVMの改良
2 author: Takahiro Shimizu
3 profile:
4 lang: Japanese
5
6
7 # 研究目的
8 - Perl5の後継言語として開発されているPerl6はMoarVMと呼ばれるVMを搭載している.
9 - Perl6はMoarVM,JVM,JavaScript上で動くRakudoと呼ばれる実装と,コンパイラ開発者用のサブセットであるNQPが主な実装となっている.
10 - 現在Perl6及びMoarVMは全体的な速度がPerl5と比較し低下しており,実務として利用できるレベルに達していない.
11 - さらにPerl6の実装自体巨大なcase-switch文など見通しが悪くなっている.
12 - この問題を解決するために現在当研究室で開発している継続を中心にしたContinuation based Cを用いて改良を行う
13 - CbCの設計理念からVMの実装と親和性が高い事も推測できる為,実際にCbCを用いてどのようにVMが実装できるかを検証する
14
15 # 今週の進捗
16 * 評価用のスクリプトを作成して計測していました
17
18 # 評価の例題
19 * 青空文庫のテキストファイルを1つ読み込んで,かなと漢字を正規表現でキャプチャ,総数をカウントする
20 * 例 `蜜蜂《みつばち》`
21 * 今回はPerl5,Perl6,Rubyで実装しベンチマークを計測した
22
23 # Perl5実装
24
25 ```perl
26 #!/usr/bin/env perl
27 use strict;
28 use warnings;
29 use utf8;
30 use feature 'say';
31 use Encode;
32
33 my $filename = "./dogura_magura.txt";
34 open my $fh,'<:encoding(utf-8)',$filename or die qw/can't open/;
35
36 my @kana;
37
38 while (my $line = <$fh>) {
39 chomp $line;
40 while( $line =~ m![、。]?(\p{Han}+)《(\p{Hiragana}+)》!g){
41 push @kana,[$1,$2];
42 }
43 }
44
45 print scalar @kana;
46 ```
47
48 # Ruby実装
49
50 ```ruby
51 #!/usr/bin/env ruby
52
53 File.open("./dogura_magura.txt",'r') do |f|
54 hoge = f.read.scan(/[、。]?(\p{Han}+)《(\p{Hiragana}+)》/)
55 p hoge.count
56 end
57 ```
58
59 # Perl6実装
60
61 ```
62 #!/usr/bin/env perl6
63 use v6;
64
65 my $file = "./dogura_magura.txt";
66 my $fh = open $file, :r;
67 my $hoge;
68
69 for $fh.lines -> $line {
70 if ($line ~~ m:g/<[、。]>?(<:Han>+)"《"(<:Hiragana>+)"》"/ ) {
71 say $/[0];
72 $hoge += $/.conj;
73 }
74 }
75
76 say $hoge;
77
78 $fh.close;
79 ```
80
81 # 測定結果
82
83 ```
84 sh test.sh
85 perl
86 6726
87
88 real 0m0.209s
89 user 0m0.153s
90 sys 0m0.045s
91
92 ruby
93 6726
94
95 real 0m0.206s
96 user 0m0.147s
97 sys 0m0.048s
98
99 perl6
100 6726
101
102 real 0m3.052s
103 user 0m3.176s
104 sys 0m0.057s
105 ```
106
107 # 測定結果
108
109 ```
110 zsh test.zsh
111 perl
112 6726
113 perl test.pl 0.15s user 0.04s system 95% cpu 0.196 total
114 ruby
115 6726
116 ruby test.rb 0.17s user 0.06s system 94% cpu 0.235 total
117 perl6
118 6726
119 /Users/anatofuz/workspace/cr/Basic/build_perl6/bin/perl6 test.p6 3.21s user 0.07s system 106% cpu 3.090 total
120 ```
121
122 * Perl6ではuser timeが圧倒的にかかっているが,systemは他と同レベル
123 * 生成されたprofilerを見た所JITも吐いているらしい