comparison slides/2018/05/29/slide.md @ 45:f5dac10540d7

auto-Update generated slides by script
author Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
date Tue, 29 May 2018 18:44:59 +0900
parents
children
comparison
equal deleted inserted replaced
44:8c7be076e6e6 45:f5dac10540d7
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の実装自体巨大なswitch-case文など見通しが悪くなっている.
12 - この問題を解決するために現在当研究室で開発している継続を中心にしたContinuation based Cを用いて改良を行う
13 - CbCの設計理念からVMの実装と親和性が高い事も推測できる為,実際にCbCを用いてどのようにVMが実装できるかを検証する
14
15 # 今週の進捗
16
17 * Perl6のnqpで遊んでいました
18 * いくつか記事を発見しました
19 * perl5の `perl-build` モジュールにPull Request送りました
20 * lldbでMoarVMを読んでいました
21
22 # Perl6の過去の研究
23
24 * ある程度高速化はされているらしい
25 * [助成金貰って高速化が検討されていた](http://news.perlfoundation.org/2017/11/perl-6-performance-and-reliabi-4.html)
26 * インライン展開周り
27 * インラインclosureが実装された
28 * dead codeを削除
29 * ...etc
30
31
32 # MoarVMのオペコード
33 * `src/core/ops.h` で定義されている
34 * `add_bb_facts` ではこのオペコードを使いswitch文を生成している
35 * トータル868個ほどのオペコードが設定されている
36
37 ```
38 4 #define MVM_OP_no_op 0
39 5 #define MVM_OP_const_i8 1
40 6 #define MVM_OP_const_i16 2
41 7 #define MVM_OP_const_i32 3
42 8 #define MVM_OP_const_i64 4
43 9 #define MVM_OP_const_n32 5
44 10 #define MVM_OP_const_n64 6
45 11 #define MVM_OP_const_s 7
46 12 #define MVM_OP_set 8
47 13 #define MVM_OP_extend_u8 9
48 14 #define MVM_OP_extend_u16 10
49 15 #define MVM_OP_extend_u32 11
50 ```
51
52 # debug用のMoarVM
53
54 * gccでデバッグしよとすると相変わらず死ぬ
55
56 ```
57 ...skipping...
58 from /System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Headers/IconsCore.h:23,
59 from /System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Headers/LaunchServices.h:22
60 from /System/Library/Frameworks/CoreServices.framework/Headers/CoreServices.h:39,
61 from /System/Library/Frameworks/ApplicationServices.framework/Headers/ApplicationServices.h:23,
62 from 3rdparty/libuv/src/unix/darwin-proctitle.c:33:
63 /System/Library/Frameworks/Security.framework/Headers/Authorization.h:193:7: error: variably modified 'bytes' at file scope
64 char bytes[kAuthorizationExternalFormLength];
65 ^~~~~
66 In file included from /System/Library/Frameworks/Security.framework/Headers/AuthSession.h:32,
67 from /System/Library/Frameworks/Security.framework/Headers/Security.h:43,
68 from /System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/CSIdentity.h:43,
69 from /System/Library/Frameworks/CoreServices.framework/Frameworks/OSServices.framework/Headers/OSServices.h:27,
70 from /System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Headers/IconsCore.h:23,
71 from /System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Headers/LaunchServices.h:22
72 from /System/Library/Frameworks/CoreServices.framework/Headers/CoreServices.h:39,
73 from 3rdparty/libuv/src/unix/fsevents.c:49:
74 /System/Library/Frameworks/Security.framework/Headers/Authorization.h:193:7: error: variably modified 'bytes' at file scope
75 char bytes[kAuthorizationExternalFormLength];
76 ^~~~~
77 In file included from /System/Library/Frameworks/CoreGraphics.framework/Headers/CGContext.h:21,
78 from /System/Library/Frameworks/CoreGraphics.framework/Headers/CGBitmapContext.h:9,
79 from /System/Library/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.h:11,
80 from /System/Library/Frameworks/ApplicationServices.framework/Headers/ApplicationServices.h:35,
81 from 3rdparty/libuv/src/unix/darwin-proctitle.c:33:
82 /System/Library/Frameworks/CoreGraphics.framework/Headers/CGPath.h:391:15: error: expected identifier or '(' before '^' token
83 typedef void (^CGPathApplyBlock)(const CGPathElement * element);
84 ^
85 /System/Library/Frameworks/CoreGraphics.framework/Headers/CGPath.h:393:53: error: unknown type name 'CGPathApplyBlock'
86 CG_EXTERN void CGPathApplyWithBlock(CGPathRef path, CGPathApplyBlock CF_NOESCAPE block)
87 ^~~~~~~~~~~~~~~~
88 make: *** [3rdparty/libuv/src/unix/fsevents.o] Error 1
89 make: *** Waiting for unfinished jobs....
90 make: *** [3rdparty/libuv/src/unix/darwin-proctitle.o] Error 1
91 ```
92
93 # やるべきこと
94
95 * 具体的に遅い箇所を計測した方がいい
96 * どうやって計測を図るか
97 * コンパイラ構成論の資料を読んでオブジェクトパターンを理解しておく
98
99
100 # perl6の小ネタ
101
102 * スマートマッチャー演算子 `~~`
103
104 ```
105 > 'hoge' ~~ Str
106 True
107 ```
108
109 * 継承一覧を取り出すには `.^mro`
110
111 ```
112 > 'hoge'.^mro
113 ((Str) (Cool) (Any) (Mu))
114 >
115 ```
116
117 * `^name` か `.WHAT` でクラスを取得できる
118
119 ```
120 > 'hoge'.^name
121 Str
122 ```
123
124 * `my @env_path = qx/echo $PATH/.split(':'); # Unix-based systems`
125 * `q:x` か `qq:x` でシェルを実行できる
126
127 ```
128 my @env_path = qx/echo $PATH/.split(':')
129 [/usr/local/opt/qt/bin /Users/anatofuz/src/google-cloud-sdk/bin /Users/anatofuz/.pyenv/versions/3.6.5/bin /Users/anatofuz/.pyenv/shims /Users/anatofuz/.pyenv/bin /Users/anatofuz/.nodebrew/current/bin /Users/anatofuz/.rbenv/shims /usr/local/opt/gpg-agent/bin /Users/anatofuz/.plenv/shims /Users/anatofuz/.plenv/bin /usr/local/bin /usr/local/sbin /usr/bin /bin /usr/sbin /sbin /Library/TeX/texbin /opt/X11/bin /usr/local/opt/qt/bin /Users/anatofuz/src/google-cloud-sdk/bin /Users/anatofuz/.pyenv/versions/3.6.5/bin /Users/anatofuz/.pyenv/shims /Users/anatofuz/.pyenv/bin /Users/anatofuz/.nodebrew/current/bin /Users/anatofuz/.rbenv/shims /usr/local/opt/gpg-agent/bin /Users/anatofuz/.plenv/shims /Users/anatofuz/.plenv/bin /Users/anatofuz/workspace/go/bin /Users/anatofuz/workspace/go/bin
130 ]
131 ```
132
133 # perl-build
134
135 * plenvで使用しているモジュール
136 * cpanからPerlの最新バージョンを取得する
137 * search.cpanがshut downするのでmeta.cpanに移行したがhttps通信になったのでtarが入手できなくなった
138 * その部分のパッチを書いて送りました
139
140
141 # 来週の予定
142
143 * 明日から仙台に行ってきます
144 * 日曜日には戻ってきます
145 * OSCのネタとスライドをそろそろ作成していきます
146 * cbc周りの情報がほしい!!