Mercurial > hg > Events > OSC2019
annotate slide.html @ 17:a176ea5c0264
update
author | anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 19 Apr 2019 23:22:02 +0900 |
parents | d3036d998236 |
children | 1fc9d0bd924f |
rev | line source |
---|---|
6
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
1 |
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
2 |
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
3 |
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
4 |
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
5 |
0
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
6 <!DOCTYPE html> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
7 <html> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
8 <head> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
9 <meta http-equiv="content-type" content="text/html;charset=utf-8"> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
10 <title>Perl6の内部表現</title> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
11 |
6
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
12 <meta name="generator" content="Slide Show (S9) v4.1.0 on Ruby 2.6.3 (2019-04-16) [x86_64-darwin17]"> |
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
13 <meta name="author" content="Takahiro Shimizu" > |
0
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
14 |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
15 <!-- style sheet links --> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
16 <link rel="stylesheet" href="s6/themes/projection.css" media="screen,projection"> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
17 <link rel="stylesheet" href="s6/themes/screen.css" media="screen"> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
18 <link rel="stylesheet" href="s6/themes/print.css" media="print"> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
19 <link rel="stylesheet" href="s6/themes/blank.css" media="screen,projection"> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
20 |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
21 <!-- JS --> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
22 <script src="s6/js/jquery-1.11.3.min.js"></script> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
23 <script src="s6/js/jquery.slideshow.js"></script> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
24 <script src="s6/js/jquery.slideshow.counter.js"></script> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
25 <script src="s6/js/jquery.slideshow.controls.js"></script> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
26 <script src="s6/js/jquery.slideshow.footer.js"></script> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
27 <script src="s6/js/jquery.slideshow.autoplay.js"></script> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
28 |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
29 <!-- prettify --> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
30 <link rel="stylesheet" href="scripts/prettify.css"> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
31 <script src="scripts/prettify.js"></script> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
32 |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
33 <script> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
34 $(document).ready( function() { |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
35 Slideshow.init(); |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
36 |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
37 $('code').each(function(_, el) { |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
38 if (!el.classList.contains('noprettyprint')) { |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
39 el.classList.add('prettyprint'); |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
40 } |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
41 }); |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
42 prettyPrint(); |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
43 } ); |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
44 |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
45 </script> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
46 |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
47 <!-- Better Browser Banner for Microsoft Internet Explorer (IE) --> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
48 <!--[if IE]> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
49 <script src="s6/js/jquery.microsoft.js"></script> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
50 <![endif]--> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
51 |
6
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
52 |
0
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
53 |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
54 </head> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
55 <body> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
56 |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
57 <div class="layout"> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
58 <div id="header"></div> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
59 <div id="footer"> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
60 <div align="right"> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
61 <img src="s6/images/logo.svg" width="200px"> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
62 </div> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
63 </div> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
64 </div> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
65 |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
66 <div class="presentation"> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
67 |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
68 <div class='slide cover'> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
69 <table width="90%" height="90%" border="0" align="center"> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
70 <tr> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
71 <td> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
72 <div align="center"> |
6
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
73 <h1><font color="#808db5">Perl6の内部表現</font></h1> |
0
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
74 </div> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
75 </td> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
76 </tr> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
77 <tr> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
78 <td> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
79 <div align="left"> |
6
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
80 Takahiro Shimizu |
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
81 |
0
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
82 <hr style="color:#ffcc00;background-color:#ffcc00;text-align:left;border:none;width:100%;height:0.2em;"> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
83 </div> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
84 </td> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
85 </tr> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
86 </table> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
87 </div> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
88 |
6
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
89 |
0
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
90 |
6
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
91 <div class='slide'> |
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
92 |
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
93 <!-- _S9SLIDE_ --> |
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
94 <h2 id="このセッションの内容">このセッションの内容</h2> |
1 | 95 |
96 <ul> | |
97 <li>Perl6の主要な実装であるRakudoの内部構造を探ります</li> | |
98 <li>Rakudoの内部で利用されているVMや, Perl6のサブセットなどについて探索します</li> | |
3 | 99 <li>スクリプト言語で主に使われているバイトコードインタプリタの気持ちになります</li> |
1 | 100 </ul> |
0
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
101 |
6
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
102 |
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
103 |
1 | 104 </div> |
105 | |
6
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
106 <div class='slide'> |
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
107 <!-- _S9SLIDE_ --> |
9 | 108 <h2 id="内容">内容</h2> |
109 <ul> | |
110 <li>Perl6とは?</li> | |
111 <li>スクリプト言語処理系の動き</li> | |
112 <li>Perl6の内部構造 | |
113 <ul> | |
114 <li>NQP</li> | |
14 | 115 <li>MoarVM |
116 <ul> | |
117 <li>NQPとMoarVMのバイトコード対応</li> | |
118 <li>バイトコードインタプリタのC言語実装</li> | |
119 <li>MoarVMの詳細</li> | |
120 </ul> | |
121 </li> | |
9 | 122 </ul> |
123 </li> | |
124 <li>MoarVMのバイトコード実行</li> | |
125 <li>まとめ</li> | |
126 </ul> | |
127 | |
128 | |
129 | |
130 </div> | |
131 | |
132 <div class='slide'> | |
133 <!-- _S9SLIDE_ --> | |
6
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
134 <h2 id="perl6とは">Perl6とは</h2> |
1 | 135 <ul> |
9 | 136 <li>当初Perl5の時期バージョンとして開発されていたプログラミング言語 |
137 <ul> | |
138 <li>現在は別の言語として開発がそれぞれ進んでいる</li> | |
139 </ul> | |
140 </li> | |
1 | 141 <li>仕様と実装が分離しており, 現在はテストが仕様となっている</li> |
9 | 142 <li>実装は歴史上複数存在しているが,主流な実装はRakudo</li> |
143 <li>言語的にはスクリプト言語であり, 漸進的型付き言語</li> | |
144 <li>動作環境は、独自のVMのMoarVM, JVM、一部JavaScript上で動作する</li> | |
1 | 145 </ul> |
146 | |
14 | 147 <p><img src="fig/2000px-Camelia.svg.png" alt="" style="width: 31%; height: auto;" /></p> |
2 | 148 |
6
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
149 |
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
150 |
1 | 151 </div> |
152 | |
6
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
153 <div class='slide'> |
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
154 <!-- _S9SLIDE_ --> |
9 | 155 <h2 id="現在のperl6">現在のPerl6</h2> |
156 | |
157 <ul> | |
158 <li>現在のバージョンは <code>6.d</code></li> | |
159 <li><a href="https://perl6.github.io/6pad/">ブラウザ上で実行可能な環境</a>が存在する</li> | |
160 <li><a href="https://commaide.com/">IDE</a>が開発されている</li> | |
161 <li>WebApplicationFrameworkなども開発されており、 Perl5のモジュールを移行したものがいくつか存在する</li> | |
162 <li>日本では趣味のプロダクト以外社会では使用されていない | |
163 <ul> | |
164 <li>海外では実際に使われているケースも存在する</li> | |
165 </ul> | |
166 </li> | |
167 <li>処理速度では一部Perl5に勝っているが、それでも大分遅い</li> | |
168 </ul> | |
169 | |
170 | |
171 | |
172 </div> | |
173 | |
174 <div class='slide'> | |
175 <!-- _S9SLIDE_ --> | |
176 <h2 id="参考perl5のソースコード">[参考]Perl5のソースコード</h2> | |
177 | |
178 <ul> | |
179 <li>Perl5時代 | |
180 <ul> | |
181 <li>スカラ、配列、ハッシュの3種類</li> | |
182 <li>それぞれの変数への参照であるリファレンスが使用可能</li> | |
183 </ul> | |
184 </li> | |
185 </ul> | |
186 | |
187 <pre><code class="language-perl">use ustrict; | |
188 use warnings; | |
189 | |
190 my $scalar_value = "hello!"; | |
191 print "$scalar_value\n"; | |
192 | |
193 my @array = (1..10); | |
194 print "$array[0]\n"; | |
195 | |
196 my %hash = ( this_is_key => "this_is_value"); | |
197 print "$hash{this_is_key}\n"; | |
198 | |
199 my $hash_ref = \%hash; | |
200 print "$hash_ref->{this_is_key}\n"; | |
201 </code></pre> | |
202 | |
203 | |
204 | |
205 </div> | |
206 | |
207 <div class='slide'> | |
208 <!-- _S9SLIDE_ --> | |
6
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
209 <h2 id="perl6のソースコード概要">Perl6のソースコード概要</h2> |
0
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
210 |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
211 <ul> |
9 | 212 <li>Perl5の文法とは比較的変更が多い |
213 <ul> | |
214 <li>雰囲気は似ている</li> | |
215 </ul> | |
216 </li> | |
1 | 217 <li>変数がオブジェクトと化した事により, 変数からsayメソッドを呼ぶことが可能</li> |
218 </ul> | |
219 | |
220 <pre><code>my $str_value = 'hello world!'; | |
221 $str_value.say; # hello world! | |
222 </code></pre> | |
223 | |
224 <ul> | |
225 <li>Perl5と同様に,変数にはデフォルトでは型がないような振る舞いをする</li> | |
0
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
226 </ul> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
227 |
1 | 228 <pre><code>my $sample_value = 'hello world!'; |
229 $sample_value.say; # hello world! | |
0
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
230 |
1 | 231 $sample_value = '31'; |
232 $sample_value.say; # 31 | |
233 | |
234 say($sample_value * 3); | |
235 </code></pre> | |
236 | |
6
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
237 |
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
238 |
1 | 239 </div> |
240 | |
6
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
241 <div class='slide'> |
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
242 <!-- _S9SLIDE_ --> |
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
243 <h2 id="perl6の言語的な特徴">Perl6の言語的な特徴</h2> |
1 | 244 |
245 <ul> | |
246 <li>漸進的型付き言語である為, 型を強制することも可能となる</li> | |
247 </ul> | |
248 | |
249 <pre><code>my Int $int_value = 31; | |
250 $int_value = "hello"; # Compile error! | |
251 </code></pre> | |
2 | 252 |
7 | 253 <pre><code>$ perl6 type_invalid.p6 |
254 Type check failed in assignment to $int_value; expected Int but got Str ("hello") | |
255 in block <unit> at type_invalid.p6 line 4 | |
256 </code></pre> | |
257 | |
6
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
258 |
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
259 |
2 | 260 </div> |
261 | |
6
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
262 <div class='slide'> |
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
263 <!-- _S9SLIDE_ --> |
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
264 <h2 id="perl6の言語的な特徴-1">Perl6の言語的な特徴</h2> |
4 | 265 |
266 <ul> | |
267 <li>型を独自に定義することも可能</li> | |
268 <li>入力の型によって実行する関数を変える事などができる</li> | |
269 </ul> | |
270 | |
6
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
271 <pre><code class="language-perl6">my subset Fizz of Int where * %% 3; |
4 | 272 my subset Buzz of Int where * %% 5; |
273 my subset FizzBuzz of Int where Fizz&Buzz; | |
274 my subset Number of Int where none Fizz|Buzz; | |
275 | |
276 proto sub fizzbuzz ($) { * } | |
277 multi sub fizzbuzz (FizzBuzz) { "FuzzBuzz" } | |
278 multi sub fizzbuzz (Fizz) { "Fizz" } | |
279 multi sub fizzbuzz (Buzz) { "Buzz" } | |
280 multi sub fizzbuzz (Number $number) { $number } | |
281 | |
282 fizzbuzz($_).say for 1..15; | |
283 </code></pre> | |
284 | |
9 | 285 <ul> |
286 <li>型を利用したFizzBuzz</li> | |
287 </ul> | |
288 | |
289 | |
290 | |
291 </div> | |
292 | |
293 <div class='slide'> | |
294 <!-- _S9SLIDE_ --> | |
295 <h2 id="スクリプト言語">スクリプト言語</h2> | |
296 <ul> | |
297 <li>Perl6は現状コンパイルすることはできない | |
298 <ul> | |
299 <li>スクリプト言語の分類</li> | |
300 </ul> | |
301 </li> | |
302 <li>現在広く使われているスクリプト言語(Perl,Python,Ruby…)などとPerl6の構成は類似している</li> | |
303 <li>今回はPerl6の実装を追いながら、最近のスクリプト言語処理系の大まかな実装を理解する</li> | |
304 </ul> | |
305 | |
306 | |
6
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
307 |
7 | 308 </div> |
309 | |
310 <div class='slide'> | |
311 <!-- _S9SLIDE_ --> | |
312 <h2 id="スクリプト言語処理系">スクリプト言語処理系</h2> | |
313 <ul> | |
314 <li>スクリプト言語は入力として与えられたソースコードを、 直接評価せずにバイトコードにコンパイルする形式が主流となっている</li> | |
315 <li>その為スクリプト言語の実装は大きく2つで構成されている | |
316 <ul> | |
317 <li>バイトコードに変換するフロントエンド部分</li> | |
318 <li>バイトコードを解釈する仮想機械</li> | |
319 </ul> | |
320 </li> | |
321 </ul> | |
322 | |
323 <p><img src="fig/bytecode_sample_generally_lang.svg" width="80%" /></p> | |
324 | |
325 | |
6
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
326 |
4 | 327 </div> |
328 | |
6
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
329 <div class='slide'> |
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
330 <!-- _S9SLIDE_ --> |
9 | 331 <h2 id="perl6以外のスクリプト言語">Perl6以外のスクリプト言語</h2> |
332 | |
333 <ul> | |
334 <li>現在使われているプロセスVMは言語に組み込まれているものが多い</li> | |
335 <li>JVMやElixirなどのVMは複数の言語で使用されている</li> | |
336 <li>Java | |
337 <ul> | |
338 <li>JVM</li> | |
339 </ul> | |
340 </li> | |
341 <li>Ruby | |
342 <ul> | |
343 <li>YARV</li> | |
344 </ul> | |
345 </li> | |
346 <li>Python | |
347 <ul> | |
348 <li>PythonVM</li> | |
349 </ul> | |
350 </li> | |
12 | 351 <li>Erlang</li> |
9 | 352 <li>Elixir |
353 <ul> | |
354 <li>BEAM</li> | |
355 </ul> | |
356 </li> | |
357 </ul> | |
358 | |
359 | |
360 | |
361 </div> | |
362 | |
363 <div class='slide'> | |
364 <!-- _S9SLIDE_ --> | |
6
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
365 <h2 id="perl6の処理系の構成">Perl6の処理系の構成</h2> |
2 | 366 |
367 <ul> | |
9 | 368 <li>Perl6の処理系で現在主流なものはRakudoと呼ばれる実装である(歴史上複数存在する)</li> |
2 | 369 <li>Rakudoは3つのレイヤーから構成されている |
370 <ul> | |
371 <li>Perl6インタプリタ</li> | |
372 <li>Perl6インタプリタを記述するPerl6のサブセットNQP</li> | |
373 <li>Perl6のバイトコードを解釈するMoarVM</li> | |
374 </ul> | |
375 </li> | |
9 | 376 <li>Perl6/NQPがフロントエンドに相当し、MoarVMがバックエンドに相当する</li> |
2 | 377 </ul> |
378 | |
6
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
379 |
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
380 |
2 | 381 </div> |
382 | |
6
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
383 <div class='slide'> |
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
384 <!-- _S9SLIDE_ --> |
9 | 385 <h2 id="rakudoの構成図">Rakudoの構成図</h2> |
386 | |
387 <p><img src="fig/Rakudo_System_overview.png" alt="" /></p> | |
388 | |
389 <p>(http://brrt-to-the-future.blogspot.com/2015/03/advancing-jit-compiler.html)</p> | |
390 | |
391 | |
392 | |
393 </div> | |
394 | |
395 <div class='slide'> | |
396 <!-- _S9SLIDE_ --> | |
6
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
397 <h2 id="perl6とnqp">Perl6とNQP</h2> |
2 | 398 |
399 <ul> | |
9 | 400 <li>NQP(NotQuitPerl Perl) |
401 <ul> | |
402 <li>Perl6のサブセット。Perl6っぽい言語</li> | |
403 </ul> | |
404 </li> | |
405 <li>Perl6、 NQP自体がNQPで記述されている</li> | |
2 | 406 <li>NQPもNQPで記述されている為、 セルフビルド(自分自身で自分自身をコンパイルする)を行う</li> |
407 <li>NQPはPerl6の文法をベースにしているが、 制約がいくつか存在する</li> | |
9 | 408 <li>元々はPerl6の主力実装がParrotだった時代に登場 |
409 <ul> | |
410 <li>文法がアップデートされており、当時の資料は古くなっている</li> | |
411 </ul> | |
412 </li> | |
413 </ul> | |
414 | |
415 <pre><code>my $value := "hello!"; | |
416 say($value); | |
417 </code></pre> | |
418 | |
419 | |
420 | |
421 </div> | |
422 | |
423 <div class='slide'> | |
424 <!-- _S9SLIDE_ --> | |
425 <h2 id="nqpスクリプト">NQPスクリプト</h2> | |
426 | |
427 <ul> | |
428 <li>変数は束縛 <code>:=</code> を使う</li> | |
429 <li>関数の間に空白を入れてはいけない</li> | |
430 <li>再帰呼び出しを使うフィボナッチ数列</li> | |
2 | 431 </ul> |
432 | |
4 | 433 <pre><code>#! nqp |
434 sub fib($n) { | |
435 $n < 2 ?? $n !! fib($n-1) + fib($n - 2); | |
436 } | |
437 | |
438 my $N := 29; | |
439 | |
440 my $z := fib($N); | |
441 | |
442 nqp::say("fib($N) = " ~ fib($N)); | |
443 </code></pre> | |
444 | |
6
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
445 |
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
446 |
2 | 447 </div> |
448 | |
6
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
449 <div class='slide'> |
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
450 <!-- _S9SLIDE_ --> |
9 | 451 <h2 id="nqpスクリプトnまでの整数の和">NQPスクリプト(nまでの整数の和)</h2> |
452 | |
453 <pre><code class="language-perl6">sub add_test($n){ | |
10 | 454 my $sum := 0; |
9 | 455 while ( $n > 1) { |
456 $sum := $sum + $n; | |
457 --$n; | |
458 } | |
459 return $sum; | |
460 } | |
461 | |
462 say(add_test(10000)); | |
463 </code></pre> | |
464 | |
465 | |
466 | |
467 </div> | |
468 | |
469 <div class='slide'> | |
470 <!-- _S9SLIDE_ --> | |
10 | 471 <h2 id="nqp">NQP</h2> |
9 | 472 |
2 | 473 <ul> |
9 | 474 <li>NQPはPerl6の中で一番レイヤーが低い言語</li> |
475 <li>その為、 実行するVMのオペコード(処理単位)を使用することができる</li> | |
10 | 476 <li>NQPオペコードは、 Perl6の内部の抽象構文木でも使用されている</li> |
477 <li>また、 Perl6と同様に型を指定することが可能</li> | |
9 | 478 </ul> |
479 | |
10 | 480 <pre><code class="language-perl6">sub add_test(int $n){ |
481 mu $sum := 0; | |
482 while nqp::isgt_i($n,1) { | |
483 $sum := nqp::add_i($sum,$n); | |
484 $n := nqp::sub_i($n,1); | |
485 } | |
486 return $sum; | |
487 } | |
488 </code></pre> | |
489 | |
9 | 490 |
491 | |
492 </div> | |
493 | |
494 <div class='slide'> | |
495 <!-- _S9SLIDE_ --> | |
496 <h2 id="nqpとmoarvm">NQPとMoarVM</h2> | |
497 <ul> | |
14 | 498 <li>NQPは実行する際にMoarVM/JVMが必要となる |
5 | 499 <ul> |
9 | 500 <li>NQPコンパイラが各VMに対応したバイトコードに変換する</li> |
3 | 501 </ul> |
502 </li> | |
14 | 503 <li>MoarVMの場合は、MoarVMのバイナリ moar に、 NQPのインタプリタのバイトコードをライブラリや入力として与える</li> |
7 | 504 </ul> |
505 | |
506 | |
507 | |
508 </div> | |
509 | |
510 <div class='slide'> | |
511 <!-- _S9SLIDE_ --> | |
9 | 512 <h2 id="perl6のvm">Perl6のVM</h2> |
7 | 513 <ul> |
9 | 514 <li>MoarVM, JVM , JavaScriptが選択可能 |
515 <ul> | |
516 <li>メインで開発されているのはMoarVMであり、 他のVMは機能が実装されていないものが存在する</li> | |
517 </ul> | |
518 </li> | |
519 <li><code>rakudo-star</code> というPerl6のパッケージ環境では、 MoarVMがデフォルトでインストールされる</li> | |
520 </ul> | |
521 | |
522 | |
523 | |
524 </div> | |
525 | |
526 <div class='slide'> | |
527 <!-- _S9SLIDE_ --> | |
528 <h2 id="moarvm">MoarVM</h2> | |
529 <ul> | |
14 | 530 <li>Metamodel On A Runtime</li> |
9 | 531 <li>C言語で記述されているPerl6専用の仮想機械</li> |
7 | 532 <li>レジスタマシン |
533 <ul> | |
534 <li>型情報を持つレジスタに対しての演算として処理される</li> | |
9 | 535 <li>Rubyなどはスタックマシンとして実装されている</li> |
7 | 536 </ul> |
537 </li> | |
14 | 538 <li>Unicodeのサポートや、LuaJITなどを利用したJITコンパイルなども可能</li> |
7 | 539 <li>Perl6やNQPは、MoarVMに対してライブラリなどを設定して起動する</li> |
540 </ul> | |
541 | |
542 | |
543 | |
544 </div> | |
545 | |
546 <div class='slide'> | |
547 <!-- _S9SLIDE_ --> | |
548 <h2 id="バイトコード">バイトコード</h2> | |
549 <ul> | |
3 | 550 <li>Perl6も、Rakudo/NQPはバイトコードに変換され、 バイトコードをVMが実行する</li> |
10 | 551 <li>Perl6/NQPはバイトコードにコンパイルすることが可能 |
552 <ul> | |
553 <li>直接実行することはできない</li> | |
554 </ul> | |
555 </li> | |
556 </ul> | |
557 | |
558 <pre><code>$nqp --target=mbc --output=fib.moarvm fib.nqp | |
559 </code></pre> | |
560 | |
561 | |
562 | |
563 </div> | |
564 | |
565 <div class='slide'> | |
566 <!-- _S9SLIDE_ --> | |
12 | 567 <h2 id="バイトコード-1">バイトコード</h2> |
568 <ul> | |
569 <li>バイナリ形式で表現される為、 VMがどのように読み取るかでバイトコードの意味が異なる</li> | |
14 | 570 <li>スクリプト言語系のVMは、 VMという名前の通り、 計算機をエミュレートしている |
571 <ul> | |
572 <li>その為、通常のCPUのストア命令などに相当する命令が実装されている</li> | |
573 <li>スクリプト言語は、その命令の実行を繰り返すことでプログラムを評価する</li> | |
574 </ul> | |
575 </li> | |
12 | 576 <li>スクリプト言語で重要なバイトコード表現は、「仮想機械がどの命令を実行するか」のバイトコード |
577 <ul> | |
14 | 578 <li>CPUに対するアセンブラの数値に対応する</li> |
12 | 579 </ul> |
580 </li> | |
581 <li>どういった構成なのかは仮想機械によって異なる</li> | |
582 </ul> | |
583 | |
584 | |
585 | |
586 </div> | |
587 | |
588 <div class='slide'> | |
589 <!-- _S9SLIDE_ --> | |
10 | 590 <h2 id="バイトコードとmoarvm">バイトコードとMoarVM</h2> |
591 | |
592 <ul> | |
593 <li>MoarVMバイトコードはMoarVMの実行バイナリ <code>moar</code> でディスアセンブルすることが可能</li> | |
2 | 594 </ul> |
595 | |
10 | 596 <pre><code> annotation: add_test.nqp:1 |
597 00003 const_i64_16 loc_2_int, 0 | |
598 00004 hllboxtype_i loc_3_obj | |
599 00005 box_i loc_3_obj, loc_2_int, loc_3_obj | |
600 00006 set loc_1_obj, loc_3_obj | |
601 label_1: | |
602 00007 decont loc_3_obj, loc_0_obj | |
603 00008 smrt_numify loc_4_num, loc_3_obj | |
604 00009 const_i64_16 loc_2_int, 1 | |
605 00010 coerce_in loc_5_num, loc_2_int | |
606 00011 gt_n loc_2_int, loc_4_num, loc_5_num | |
607 00012 unless_i loc_2_int, label_2(00031) | |
608 00013 osrpoint | |
609 annotation: add_test.nqp:3 | |
610 00014 decont loc_3_obj, loc_1_obj | |
611 00015 smrt_numify loc_5_num, loc_3_obj | |
612 00016 decont loc_3_obj, loc_0_obj | |
613 00017 smrt_numify loc_4_num, loc_3_obj | |
614 00018 add_n loc_4_num, loc_5_num, loc_4_num | |
615 00019 hllboxtype_n loc_3_obj | |
616 00020 box_n loc_3_obj, loc_4_num, loc_3_obj | |
617 00021 set loc_1_obj, loc_3_obj | |
618 00022 decont loc_3_obj, loc_0_obj | |
619 00023 smrt_numify loc_4_num, loc_3_obj | |
620 00024 coerce_ni loc_6_int, loc_4_num | |
621 00025 const_i64_16 loc_7_int, 1 | |
622 00026 sub_i loc_7_int, loc_6_int, loc_7_int | |
623 00027 hllboxtype_i loc_3_obj | |
624 00028 box_i loc_3_obj, loc_7_int, loc_3_obj | |
625 00029 set loc_0_obj, loc_3_obj | |
626 00030 goto label_1(00007) | |
627 </code></pre> | |
628 | |
629 | |
630 | |
631 </div> | |
632 | |
633 <div class='slide'> | |
634 <!-- _S9SLIDE_ --> | |
635 <h2 id="nqpとバイトコードの対応">NQPとバイトコードの対応</h2> | |
636 | |
637 <pre><code>say(add_test(10000)); | |
638 </code></pre> | |
639 | |
640 <pre><code> annotation: add_test.nqp:1 | |
641 label_1: | |
642 00020 getlex_no loc_7_obj, '&say' | |
643 00021 decont loc_7_obj, loc_7_obj | |
644 00022 const_s loc_3_str, '&add_test' | |
645 00023 getlexstatic_o loc_8_obj, loc_3_str | |
646 00024 decont loc_8_obj, loc_8_obj | |
647 00025 const_i64_16 loc_5_int, 10000 | |
648 00026 prepargs Callsite_1 | |
649 00027 arg_i 0, loc_5_int | |
650 00028 invoke_o loc_8_obj, loc_8_obj | |
651 00029 prepargs Callsite_0 | |
652 00030 arg_o 0, loc_8_obj | |
653 00031 invoke_v loc_7_obj | |
654 00032 null loc_7_obj | |
655 00033 return_o loc_7_obj | |
656 </code></pre> | |
657 | |
658 <ul> | |
659 <li>Perl6の変数は直接実態を参照せず、中身が入っているコンテナを参照するようになっている。</li> | |
660 <li>その為 <code>decont</code> 命令で、コンテナの中身をレジスタに設定する必要がある</li> | |
661 <li><code>const_i64_16</code> などは64bitの数という意味で、 <code>int</code> 型としてレジスタに登録している</li> | |
662 <li><code>prepargs</code> で引数の確認を行い, <code>invoke_o</code> で実際にサブルーチンに移行する</li> | |
663 </ul> | |
664 | |
665 | |
666 | |
667 </div> | |
668 | |
669 <div class='slide'> | |
670 <!-- _S9SLIDE_ --> | |
671 <h2 id="nqpとバイトコードの対応-1">NQPとバイトコードの対応</h2> | |
672 | |
673 <pre><code>my $sum := 0; | |
674 </code></pre> | |
675 | |
676 <pre><code> annotation: add_test.nqp:1 | |
677 00003 const_i64_16 loc_2_int, 0 | |
678 00004 hllboxtype_i loc_3_obj | |
679 00005 box_i loc_3_obj, loc_2_int, loc_3_obj | |
680 00006 set loc_1_obj, loc_3_obj | |
681 </code></pre> | |
682 | |
683 <ul> | |
684 <li>まず <code>loc_2</code> レジスタをint型の整数0で初期化する</li> | |
685 <li>変数 <code>$sum</code> はint型の指定がないので、 obj型で登録しなければならない</li> | |
686 <li>その為, 整数として登録された <code>loc_2</code> から、 obj型に一旦キャストし、 <code>loc_3</code> レジスタに設定したものを、 <code>loc_1</code> レジスタに設定する</li> | |
687 </ul> | |
688 | |
689 | |
690 | |
691 </div> | |
692 | |
693 <div class='slide'> | |
694 <!-- _S9SLIDE_ --> | |
695 <h2 id="nqpとバイトコードの対応-2">NQPとバイトコードの対応</h2> | |
696 | |
697 <pre><code> while ( $n > 1) { | |
698 </code></pre> | |
699 | |
700 <pre><code> label_1: | |
701 00007 decont loc_3_obj, loc_0_obj | |
702 00008 smrt_numify loc_4_num, loc_3_obj | |
703 00009 const_i64_16 loc_2_int, 1 | |
704 00010 coerce_in loc_5_num, loc_2_int | |
705 00011 gt_n loc_2_int, loc_4_num, loc_5_num | |
706 00012 unless_i loc_2_int, label_2(00031) | |
707 00013 osrpoint | |
708 </code></pre> | |
709 | |
710 <ul> | |
711 <li>比較にもint型の指定がない為、 <code>num</code> 型にキャストし、 <code>num</code> 型のレジスタでの大小を比較する</li> | |
712 <li>比較命令は <code>gt_n</code> であり、 結果により <code>unless_i</code> 命令で、別のラベルにジャンプする</li> | |
713 </ul> | |
6
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
714 |
14 | 715 |
716 | |
717 </div> | |
718 | |
719 <div class='slide'> | |
720 <!-- _S9SLIDE_ --> | |
721 <h2 id="decode命令">decode命令</h2> | |
722 | |
723 <pre><code> while ( $n > 1) { | |
724 </code></pre> | |
725 | |
726 <pre><code>00007 decont loc_3_obj, loc_0_obj | |
727 </code></pre> | |
728 | |
729 <p><img src="fig/decont_perl6_loc3.svg" alt="" /></p> | |
730 | |
731 <ul> | |
732 <li>変数 <code>$n</code> と 整数 <code>1</code> を大小比較する為、 まず <code>$n</code> から値を取り出す</li> | |
733 <li>とりだした時点では、何の型で使うかは決定していない為、 obj型として判定する</li> | |
734 </ul> | |
735 | |
736 | |
737 | |
738 </div> | |
739 | |
740 <div class='slide'> | |
741 <!-- _S9SLIDE_ --> | |
742 <h2 id="smrt_nomify">smrt_nomify</h2> | |
743 | |
744 <pre><code> while ( $n > 1) { | |
745 </code></pre> | |
746 | |
747 <pre><code>00008 smrt_numify loc_4_num, loc_3_obj | |
748 </code></pre> | |
749 | |
17 | 750 <ul> |
751 <li><code>smrt_numify</code> はレジスタ上のオブジェクトを、 num型に変換し、 別のレジスタに登録する命令</li> | |
752 <li>今回の整数の比較では、 int型の強制がない為、 数値として比較するためにnum型にキャストしている</li> | |
753 </ul> | |
754 | |
755 <p><img src="fig/perl6_num_convert.svg" alt="" /></p> | |
756 | |
757 | |
758 | |
759 </div> | |
760 | |
761 <div class='slide'> | |
762 <!-- _S9SLIDE_ --> | |
763 <h2 id="moarvmのバイトコードインタプリタ部分">MoarVMのバイトコードインタプリタ部分</h2> | |
764 <p>MoarVMなどの言語処理系のバイトコードインタプリタは次のことを繰り返している</p> | |
765 <ol> | |
766 <li>入力されたバイトコード列から命令に対応する部分を読み取る</li> | |
767 <li>読み込んだ数値から、 対応する命令を取得する</li> | |
768 <li>命令部分を実行する</li> | |
769 <li>バイトコード列を次に進め、繰り返す</li> | |
770 </ol> | |
771 | |
772 <ul> | |
773 <li>この部分の実装は大体次のような処理をしている</li> | |
774 </ul> | |
775 | |
776 | |
777 | |
778 </div> | |
779 | |
780 <div class='slide'> | |
781 <!-- _S9SLIDE_ --> | |
782 <h2 id="巨大なswitch文を使うケース">巨大なswitch文を使うケース</h2> | |
783 | |
784 <ul> | |
785 <li>命令に対応するバイトコードを数値に変換できるようにし、 switch-case文で分岐させる</li> | |
786 <li>実行のたびにループで先頭に戻り、次の命令を計算する必要があるので低速</li> | |
787 </ul> | |
788 | |
789 <pre><code> | |
790 </code></pre> | |
791 | |
792 | |
793 | |
794 </div> | |
795 | |
796 <div class='slide'> | |
797 <!-- _S9SLIDE_ --> | |
798 <h2 id="cコンパイラのラベルgotoを使うケース">Cコンパイラのラベルgotoを使うケース</h2> | |
799 | |
800 <ul> | |
801 <li>巨大なcase文とループではなく、 次の命令の実行場所に直接jmpで移動する</li> | |
802 <li>次の命令に対応するラベルを取得する必要があるが、 ループする必要がなく高速</li> | |
803 <li>ラベルgotoであり、 Cコンパイラの拡張機能として搭載されている | |
804 <ul> | |
805 <li>gccおよびLLVM/clangには実装されている</li> | |
806 </ul> | |
807 </li> | |
808 </ul> | |
809 | |
810 <pre><code> | |
811 </code></pre> | |
812 | |
813 | |
814 | |
815 </div> | |
816 | |
817 <div class='slide'> | |
818 <!-- _S9SLIDE_ --> | |
819 <h2 id="moarvmでは">MoarVMでは</h2> | |
820 <ul> | |
821 <li>ラベルgotoが利用できる場合は利用する</li> | |
822 <li>使えないコンパイラの場合は、 switch文を利用する | |
823 <ul> | |
824 <li>この判断はマクロで処理をしている</li> | |
825 </ul> | |
826 </li> | |
827 <li>一般的にはラベルgotoの方が高速である為、他のスクリプト言語でもラベルgotoが使われている</li> | |
828 </ul> | |
14 | 829 |
0
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
830 </div> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
831 |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
832 |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
833 </div><!-- presentation --> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
834 </body> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
835 </html> |