Mercurial > hg > Members > anatofuz > slides
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も吐いているらしい |