Mercurial > hg > Events > OSC2019
annotate slide.html @ 9:642787982a80
update
author | anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 19 Apr 2019 18:24:04 +0900 |
parents | d8feb607c44e |
children | 4b1eb4d69695 |
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> | |
115 <li>MoarVM</li> | |
116 </ul> | |
117 </li> | |
118 <li>MoarVMのバイトコード実行</li> | |
119 <li>まとめ</li> | |
120 </ul> | |
121 | |
122 | |
123 | |
124 </div> | |
125 | |
126 <div class='slide'> | |
127 <!-- _S9SLIDE_ --> | |
6
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
128 <h2 id="perl6とは">Perl6とは</h2> |
1 | 129 <ul> |
9 | 130 <li>当初Perl5の時期バージョンとして開発されていたプログラミング言語 |
131 <ul> | |
132 <li>現在は別の言語として開発がそれぞれ進んでいる</li> | |
133 </ul> | |
134 </li> | |
1 | 135 <li>仕様と実装が分離しており, 現在はテストが仕様となっている</li> |
9 | 136 <li>実装は歴史上複数存在しているが,主流な実装はRakudo</li> |
137 <li>言語的にはスクリプト言語であり, 漸進的型付き言語</li> | |
138 <li>動作環境は、独自のVMのMoarVM, JVM、一部JavaScript上で動作する</li> | |
1 | 139 </ul> |
140 | |
2 | 141 <p><img src="2000px-Camelia.svg.png" alt="" style="width: 31%; height: auto;" /></p> |
142 | |
6
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
143 |
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
144 |
1 | 145 </div> |
146 | |
6
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
147 <div class='slide'> |
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
148 <!-- _S9SLIDE_ --> |
9 | 149 <h2 id="現在のperl6">現在のPerl6</h2> |
150 | |
151 <ul> | |
152 <li>現在のバージョンは <code>6.d</code></li> | |
153 <li><a href="https://perl6.github.io/6pad/">ブラウザ上で実行可能な環境</a>が存在する</li> | |
154 <li><a href="https://commaide.com/">IDE</a>が開発されている</li> | |
155 <li>WebApplicationFrameworkなども開発されており、 Perl5のモジュールを移行したものがいくつか存在する</li> | |
156 <li>日本では趣味のプロダクト以外社会では使用されていない | |
157 <ul> | |
158 <li>海外では実際に使われているケースも存在する</li> | |
159 </ul> | |
160 </li> | |
161 <li>処理速度では一部Perl5に勝っているが、それでも大分遅い</li> | |
162 </ul> | |
163 | |
164 | |
165 | |
166 </div> | |
167 | |
168 <div class='slide'> | |
169 <!-- _S9SLIDE_ --> | |
170 <h2 id="参考perl5のソースコード">[参考]Perl5のソースコード</h2> | |
171 | |
172 <ul> | |
173 <li>Perl5時代 | |
174 <ul> | |
175 <li>スカラ、配列、ハッシュの3種類</li> | |
176 <li>それぞれの変数への参照であるリファレンスが使用可能</li> | |
177 </ul> | |
178 </li> | |
179 </ul> | |
180 | |
181 <pre><code class="language-perl">use ustrict; | |
182 use warnings; | |
183 | |
184 my $scalar_value = "hello!"; | |
185 print "$scalar_value\n"; | |
186 | |
187 my @array = (1..10); | |
188 print "$array[0]\n"; | |
189 | |
190 my %hash = ( this_is_key => "this_is_value"); | |
191 print "$hash{this_is_key}\n"; | |
192 | |
193 my $hash_ref = \%hash; | |
194 print "$hash_ref->{this_is_key}\n"; | |
195 </code></pre> | |
196 | |
197 | |
198 | |
199 </div> | |
200 | |
201 <div class='slide'> | |
202 <!-- _S9SLIDE_ --> | |
6
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
203 <h2 id="perl6のソースコード概要">Perl6のソースコード概要</h2> |
0
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
204 |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
205 <ul> |
9 | 206 <li>Perl5の文法とは比較的変更が多い |
207 <ul> | |
208 <li>雰囲気は似ている</li> | |
209 </ul> | |
210 </li> | |
1 | 211 <li>変数がオブジェクトと化した事により, 変数からsayメソッドを呼ぶことが可能</li> |
212 </ul> | |
213 | |
214 <pre><code>my $str_value = 'hello world!'; | |
215 $str_value.say; # hello world! | |
216 </code></pre> | |
217 | |
218 <ul> | |
219 <li>Perl5と同様に,変数にはデフォルトでは型がないような振る舞いをする</li> | |
0
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
220 </ul> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
221 |
1 | 222 <pre><code>my $sample_value = 'hello world!'; |
223 $sample_value.say; # hello world! | |
0
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
224 |
1 | 225 $sample_value = '31'; |
226 $sample_value.say; # 31 | |
227 | |
228 say($sample_value * 3); | |
229 </code></pre> | |
230 | |
6
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
231 |
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
232 |
1 | 233 </div> |
234 | |
6
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
235 <div class='slide'> |
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
236 <!-- _S9SLIDE_ --> |
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
237 <h2 id="perl6の言語的な特徴">Perl6の言語的な特徴</h2> |
1 | 238 |
239 <ul> | |
240 <li>漸進的型付き言語である為, 型を強制することも可能となる</li> | |
241 </ul> | |
242 | |
243 <pre><code>my Int $int_value = 31; | |
244 $int_value = "hello"; # Compile error! | |
245 </code></pre> | |
2 | 246 |
7 | 247 <pre><code>$ perl6 type_invalid.p6 |
248 Type check failed in assignment to $int_value; expected Int but got Str ("hello") | |
249 in block <unit> at type_invalid.p6 line 4 | |
250 </code></pre> | |
251 | |
6
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
252 |
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
253 |
2 | 254 </div> |
255 | |
6
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
256 <div class='slide'> |
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
257 <!-- _S9SLIDE_ --> |
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
258 <h2 id="perl6の言語的な特徴-1">Perl6の言語的な特徴</h2> |
4 | 259 |
260 <ul> | |
261 <li>型を独自に定義することも可能</li> | |
262 <li>入力の型によって実行する関数を変える事などができる</li> | |
263 </ul> | |
264 | |
6
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
265 <pre><code class="language-perl6">my subset Fizz of Int where * %% 3; |
4 | 266 my subset Buzz of Int where * %% 5; |
267 my subset FizzBuzz of Int where Fizz&Buzz; | |
268 my subset Number of Int where none Fizz|Buzz; | |
269 | |
270 proto sub fizzbuzz ($) { * } | |
271 multi sub fizzbuzz (FizzBuzz) { "FuzzBuzz" } | |
272 multi sub fizzbuzz (Fizz) { "Fizz" } | |
273 multi sub fizzbuzz (Buzz) { "Buzz" } | |
274 multi sub fizzbuzz (Number $number) { $number } | |
275 | |
276 fizzbuzz($_).say for 1..15; | |
277 </code></pre> | |
278 | |
9 | 279 <ul> |
280 <li>型を利用したFizzBuzz</li> | |
281 </ul> | |
282 | |
283 | |
284 | |
285 </div> | |
286 | |
287 <div class='slide'> | |
288 <!-- _S9SLIDE_ --> | |
289 <h2 id="スクリプト言語">スクリプト言語</h2> | |
290 <ul> | |
291 <li>Perl6は現状コンパイルすることはできない | |
292 <ul> | |
293 <li>スクリプト言語の分類</li> | |
294 </ul> | |
295 </li> | |
296 <li>現在広く使われているスクリプト言語(Perl,Python,Ruby…)などとPerl6の構成は類似している</li> | |
297 <li>今回はPerl6の実装を追いながら、最近のスクリプト言語処理系の大まかな実装を理解する</li> | |
298 </ul> | |
299 | |
300 | |
6
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
301 |
7 | 302 </div> |
303 | |
304 <div class='slide'> | |
305 <!-- _S9SLIDE_ --> | |
306 <h2 id="スクリプト言語処理系">スクリプト言語処理系</h2> | |
307 <ul> | |
308 <li>スクリプト言語は入力として与えられたソースコードを、 直接評価せずにバイトコードにコンパイルする形式が主流となっている</li> | |
309 <li>その為スクリプト言語の実装は大きく2つで構成されている | |
310 <ul> | |
311 <li>バイトコードに変換するフロントエンド部分</li> | |
312 <li>バイトコードを解釈する仮想機械</li> | |
313 </ul> | |
314 </li> | |
315 </ul> | |
316 | |
317 <p><img src="fig/bytecode_sample_generally_lang.svg" width="80%" /></p> | |
318 | |
319 | |
6
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
320 |
4 | 321 </div> |
322 | |
6
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
323 <div class='slide'> |
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
324 <!-- _S9SLIDE_ --> |
9 | 325 <h2 id="perl6以外のスクリプト言語">Perl6以外のスクリプト言語</h2> |
326 | |
327 <ul> | |
328 <li>現在使われているプロセスVMは言語に組み込まれているものが多い</li> | |
329 <li>JVMやElixirなどのVMは複数の言語で使用されている</li> | |
330 <li>Java | |
331 <ul> | |
332 <li>JVM</li> | |
333 </ul> | |
334 </li> | |
335 <li>Ruby | |
336 <ul> | |
337 <li>YARV</li> | |
338 </ul> | |
339 </li> | |
340 <li>Python | |
341 <ul> | |
342 <li>PythonVM</li> | |
343 </ul> | |
344 </li> | |
345 <li>Elixir | |
346 <ul> | |
347 <li>BEAM</li> | |
348 </ul> | |
349 </li> | |
350 </ul> | |
351 | |
352 | |
353 | |
354 </div> | |
355 | |
356 <div class='slide'> | |
357 <!-- _S9SLIDE_ --> | |
6
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
358 <h2 id="perl6の処理系の構成">Perl6の処理系の構成</h2> |
2 | 359 |
360 <ul> | |
9 | 361 <li>Perl6の処理系で現在主流なものはRakudoと呼ばれる実装である(歴史上複数存在する)</li> |
2 | 362 <li>Rakudoは3つのレイヤーから構成されている |
363 <ul> | |
364 <li>Perl6インタプリタ</li> | |
365 <li>Perl6インタプリタを記述するPerl6のサブセットNQP</li> | |
366 <li>Perl6のバイトコードを解釈するMoarVM</li> | |
367 </ul> | |
368 </li> | |
9 | 369 <li>Perl6/NQPがフロントエンドに相当し、MoarVMがバックエンドに相当する</li> |
2 | 370 </ul> |
371 | |
6
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
372 |
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
373 |
2 | 374 </div> |
375 | |
6
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
376 <div class='slide'> |
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
377 <!-- _S9SLIDE_ --> |
9 | 378 <h2 id="rakudoの構成図">Rakudoの構成図</h2> |
379 | |
380 <p><img src="fig/Rakudo_System_overview.png" alt="" /></p> | |
381 | |
382 <p>(http://brrt-to-the-future.blogspot.com/2015/03/advancing-jit-compiler.html)</p> | |
383 | |
384 | |
385 | |
386 </div> | |
387 | |
388 <div class='slide'> | |
389 <!-- _S9SLIDE_ --> | |
6
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
390 <h2 id="perl6とnqp">Perl6とNQP</h2> |
2 | 391 |
392 <ul> | |
9 | 393 <li>NQP(NotQuitPerl Perl) |
394 <ul> | |
395 <li>Perl6のサブセット。Perl6っぽい言語</li> | |
396 </ul> | |
397 </li> | |
398 <li>Perl6、 NQP自体がNQPで記述されている</li> | |
2 | 399 <li>NQPもNQPで記述されている為、 セルフビルド(自分自身で自分自身をコンパイルする)を行う</li> |
400 <li>NQPはPerl6の文法をベースにしているが、 制約がいくつか存在する</li> | |
9 | 401 <li>元々はPerl6の主力実装がParrotだった時代に登場 |
402 <ul> | |
403 <li>文法がアップデートされており、当時の資料は古くなっている</li> | |
404 </ul> | |
405 </li> | |
406 </ul> | |
407 | |
408 <pre><code>my $value := "hello!"; | |
409 say($value); | |
410 </code></pre> | |
411 | |
412 | |
413 | |
414 </div> | |
415 | |
416 <div class='slide'> | |
417 <!-- _S9SLIDE_ --> | |
418 <h2 id="nqpスクリプト">NQPスクリプト</h2> | |
419 | |
420 <ul> | |
421 <li>変数は束縛 <code>:=</code> を使う</li> | |
422 <li>関数の間に空白を入れてはいけない</li> | |
423 <li>再帰呼び出しを使うフィボナッチ数列</li> | |
2 | 424 </ul> |
425 | |
4 | 426 <pre><code>#! nqp |
427 sub fib($n) { | |
428 $n < 2 ?? $n !! fib($n-1) + fib($n - 2); | |
429 } | |
430 | |
431 my $N := 29; | |
432 | |
433 my $z := fib($N); | |
434 | |
435 nqp::say("fib($N) = " ~ fib($N)); | |
436 </code></pre> | |
437 | |
6
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
438 |
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
439 |
2 | 440 </div> |
441 | |
6
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
442 <div class='slide'> |
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
443 <!-- _S9SLIDE_ --> |
9 | 444 <h2 id="nqpスクリプトnまでの整数の和">NQPスクリプト(nまでの整数の和)</h2> |
445 | |
446 <pre><code class="language-perl6">sub add_test($n){ | |
447 mu $sum := 0; | |
448 while ( $n > 1) { | |
449 $sum := $sum + $n; | |
450 --$n; | |
451 } | |
452 return $sum; | |
453 } | |
454 | |
455 say(add_test(10000)); | |
456 </code></pre> | |
457 | |
458 | |
459 | |
460 </div> | |
461 | |
462 <div class='slide'> | |
463 <!-- _S9SLIDE_ --> | |
464 <h2 id="nqpとオペコード">NQPとオペコード</h2> | |
465 | |
2 | 466 <ul> |
9 | 467 <li>NQPはPerl6の中で一番レイヤーが低い言語</li> |
468 <li>その為、 実行するVMのオペコード(処理単位)を使用することができる</li> | |
469 </ul> | |
470 | |
471 | |
472 | |
473 </div> | |
474 | |
475 <div class='slide'> | |
476 <!-- _S9SLIDE_ --> | |
477 <h2 id="nqpとmoarvm">NQPとMoarVM</h2> | |
478 <ul> | |
479 <li>NQPそのものは実行することはできない</li> | |
480 <li>NQPの実行にはMoarVM/JVMが必要となる | |
5 | 481 <ul> |
9 | 482 <li>NQPコンパイラが各VMに対応したバイトコードに変換する</li> |
3 | 483 </ul> |
484 </li> | |
7 | 485 </ul> |
486 | |
487 | |
488 | |
489 </div> | |
490 | |
491 <div class='slide'> | |
492 <!-- _S9SLIDE_ --> | |
9 | 493 <h2 id="perl6のvm">Perl6のVM</h2> |
7 | 494 <ul> |
9 | 495 <li>MoarVM, JVM , JavaScriptが選択可能 |
496 <ul> | |
497 <li>メインで開発されているのはMoarVMであり、 他のVMは機能が実装されていないものが存在する</li> | |
498 </ul> | |
499 </li> | |
500 <li><code>rakudo-star</code> というPerl6のパッケージ環境では、 MoarVMがデフォルトでインストールされる</li> | |
501 </ul> | |
502 | |
503 | |
504 | |
505 </div> | |
506 | |
507 <div class='slide'> | |
508 <!-- _S9SLIDE_ --> | |
509 <h2 id="moarvm">MoarVM</h2> | |
510 <ul> | |
511 <li>C言語で記述されているPerl6専用の仮想機械</li> | |
7 | 512 <li>レジスタマシン |
513 <ul> | |
514 <li>型情報を持つレジスタに対しての演算として処理される</li> | |
9 | 515 <li>Rubyなどはスタックマシンとして実装されている</li> |
7 | 516 </ul> |
517 </li> | |
518 <li>LuaJITなどを利用したJITコンパイルなども可能</li> | |
519 <li>Perl6やNQPは、MoarVMに対してライブラリなどを設定して起動する</li> | |
520 </ul> | |
521 | |
522 | |
523 | |
524 </div> | |
525 | |
526 <div class='slide'> | |
527 <!-- _S9SLIDE_ --> | |
528 <h2 id="バイトコード">バイトコード</h2> | |
529 <ul> | |
3 | 530 <li>Perl6も、Rakudo/NQPはバイトコードに変換され、 バイトコードをVMが実行する</li> |
2 | 531 <li>バイトコード実行部分は、 命令に対応するバイト列を読み込み、 解釈し、 次の命令を読み取ることを繰り返す</li> |
532 </ul> | |
533 | |
6
f8f9af788fa7
remove !#SLIDE for use slideshow latest version
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
534 |
0
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
535 </div> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
536 |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
537 |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
538 </div><!-- presentation --> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
539 </body> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
540 </html> |