comparison slides/2018/06/05/slide.md @ 47:32e35be2ce71

auto-Update generated slides by script
author Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
date Tue, 26 Jun 2018 22:41:26 +0900
parents
children
comparison
equal deleted inserted replaced
46:8972d59ad904 47:32e35be2ce71
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 * Perl6のプロファイラと巨大なcase文を発見しました
19
20
21 # RubyKaigi
22
23 * Rubyの言語自体の話が多かったです
24 * 型とJITと処理系のトークが多かったです
25 * ついにRubyもASTを操作出来る用になりました
26 * Ruby3ではGuildという実装でより簡単な並列化もサポートしていくそうです
27 * JITに関してはRubyのJITは一度Cに変換するらしいです
28 * Cコードで拡張を書いてJITするよりRubyをJITした方が現段階では早いらしい
29 * C language is dead
30 * ぱるすさんと宮國さん(gongo)さんとエンカウントしました
31 * Rubyのコードも比較で読んでいます
32
33
34 # プロファイラ
35
36 nqpで実行する際に `--prpfile` を指定するとhtmlでプロファイル結果が生成される
37
38 - `./nqp --profile examples/hello_world.nqp`
39 - 最適化
40 - `./nqp --profile-compile examples/hello_world.nqp`
41 - 最適化される
42
43 # MoarVMの処理
44
45 - MVMInstancとかいう構造体に全ての情報が入っている
46 - MoarVMが実際にインタプリタとして走っているのは`MVM_interp_run`という関数らしい.
47 - これはスレッド毎に用意されるらしい
48 - 定義自体は `src/core/interp.c`に書かれている
49 - `MVM_interp_run`の後DISPATCHというマクロで`NEXT_OP`というマクロに応じて処理を行っている
50 - これはオペランドリストとswitch文が同じオーダーで書かれているので最適化しやすいらしい
51 - これがMoarVMのバイトコードを一対一対応しているので5000行のcase文が生成されている
52 - 状態遷移自体はgotoで書かれているがかなりの量を動いており探しづらい
53
54 # OSC
55
56 * **特に何もしてない!!**