Mercurial > hg > Events > OSC2019
annotate slide.pdf.html @ 5:e87cc0746622
update
author | Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Thu, 18 Apr 2019 17:23:28 +0900 |
parents | 8f21c0f19c09 |
children | f8f9af788fa7 |
rev | line source |
---|---|
0
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1 <!DOCTYPE html> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
2 <html> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
3 <head> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
4 <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
|
5 <title>Perl6の内部表現</title> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
6 |
1 | 7 <meta name="generator" content="Slide Show (S9) v2.5.0 on Ruby 2.4.2 (2017-09-14) [x86_64-darwin16]"> |
8 <meta name="author" content="Takahiro Shimizu" > | |
0
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
9 |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
10 <!-- style sheet links --> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
11 <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
|
12 <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
|
13 <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
|
14 |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
15 <!-- JS --> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
16 <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
|
17 <script src="s6/js/jquery.slideshow.js"></script> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
18 <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
|
19 <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
|
20 <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
|
21 <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
|
22 |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
23 <!-- prettify --> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
24 <link rel="stylesheet" href="scripts/prettify.css"> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
25 <script src="scripts/prettify.js"></script> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
26 |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
27 <style> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
28 .slide {page-break-after: always;} |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
29 </style> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
30 |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
31 |
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 |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
34 </head> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
35 <body> |
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 <div class="layout"> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
38 <div id="header"></div> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
39 <div id="footer"> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
40 <div align="right"> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
41 <img src="s6/images/logo.svg" width="200px"> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
42 </div> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
43 </div> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
44 </div> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
45 |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
46 <div class="presentation"> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
47 |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
48 <div class='slide cover'> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
49 <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
|
50 <tr> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
51 <td> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
52 <div align="center"> |
1 | 53 <h1><font color="#808db5">Perl6の内部表現</font></h1> |
0
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
54 </div> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
55 </td> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
56 </tr> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
57 <tr> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
58 <td> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
59 <div align="left"> |
1 | 60 Takahiro Shimizu |
61 | |
0
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
62 <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
|
63 </div> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
64 </td> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
65 </tr> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
66 </table> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
67 </div> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
68 |
1 | 69 <div class='slide '> |
70 <!-- === begin markdown block === | |
0
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
71 |
1 | 72 generated by markdown/1.2.0 on Ruby 2.4.2 (2017-09-14) [x86_64-darwin16] |
5 | 73 on 2019-04-18 17:22:44 +0900 with Markdown engine kramdown (1.16.2) |
1 | 74 using options {} |
75 --> | |
76 <h2 id="section">このセッションの内容</h2> | |
77 | |
78 <ul> | |
79 <li>Perl6の主要な実装であるRakudoの内部構造を探ります</li> | |
80 <li>Rakudoの内部で利用されているVMや, Perl6のサブセットなどについて探索します</li> | |
3 | 81 <li>スクリプト言語で主に使われているバイトコードインタプリタの気持ちになります</li> |
1 | 82 </ul> |
83 | |
84 </div> | |
85 <div class='slide '> | |
86 <!-- _S9SLIDE_ --> | |
87 | |
88 <h2 id="perl6">Perl6とは</h2> | |
89 <ul> | |
90 <li>当初Perl5の時期バージョンとして開発されていたプログラミング言語</li> | |
91 <li>仕様と実装が分離しており, 現在はテストが仕様となっている</li> | |
92 <li>実装は複数存在しているが,現在主流な実装はRakudoとなっている</li> | |
93 <li>言語的にはスクリプト言語であり, 漸進的型付き言語となっている</li> | |
2 | 94 <li>MoarVM, JVMで動作する</li> |
1 | 95 </ul> |
96 | |
2 | 97 <p><img src="2000px-Camelia.svg.png" alt="" style="width: 31%; height: auto;" /></p> |
98 | |
1 | 99 </div> |
100 <div class='slide '> | |
101 <!-- _S9SLIDE_ --> | |
102 | |
103 <h2 id="perl6-1">Perl6のソースコード概要</h2> | |
0
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
104 |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
105 <ul> |
1 | 106 <li>Perl5の文法とは比較的変更が多い</li> |
107 <li>変数がオブジェクトと化した事により, 変数からsayメソッドを呼ぶことが可能</li> | |
108 </ul> | |
109 | |
110 <pre><code>my $str_value = 'hello world!'; | |
111 $str_value.say; # hello world! | |
112 </code></pre> | |
113 | |
114 <ul> | |
115 <li>Perl5と同様に,変数にはデフォルトでは型がないような振る舞いをする</li> | |
0
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
116 </ul> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
117 |
1 | 118 <pre><code>my $sample_value = 'hello world!'; |
119 $sample_value.say; # hello world! | |
0
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
120 |
1 | 121 $sample_value = '31'; |
122 $sample_value.say; # 31 | |
123 | |
124 say($sample_value * 3); | |
125 </code></pre> | |
126 | |
127 </div> | |
128 <div class='slide '> | |
129 <!-- _S9SLIDE_ --> | |
130 | |
131 <h2 id="perl6-2">Perl6の言語的な特徴</h2> | |
132 | |
133 <ul> | |
134 <li>漸進的型付き言語である為, 型を強制することも可能となる</li> | |
135 </ul> | |
136 | |
137 <pre><code>my Int $int_value = 31; | |
138 $int_value = "hello"; # Compile error! | |
139 </code></pre> | |
2 | 140 |
141 </div> | |
142 <div class='slide '> | |
143 <!-- _S9SLIDE_ --> | |
144 | |
4 | 145 <h2 id="perl6-3">Perl6の言語的な特徴</h2> |
146 | |
147 <ul> | |
148 <li>型を独自に定義することも可能</li> | |
149 <li>入力の型によって実行する関数を変える事などができる</li> | |
150 </ul> | |
151 | |
152 <pre lang="perl6"><code>my subset Fizz of Int where * %% 3; | |
153 my subset Buzz of Int where * %% 5; | |
154 my subset FizzBuzz of Int where Fizz&Buzz; | |
155 my subset Number of Int where none Fizz|Buzz; | |
156 | |
157 proto sub fizzbuzz ($) { * } | |
158 multi sub fizzbuzz (FizzBuzz) { "FuzzBuzz" } | |
159 multi sub fizzbuzz (Fizz) { "Fizz" } | |
160 multi sub fizzbuzz (Buzz) { "Buzz" } | |
161 multi sub fizzbuzz (Number $number) { $number } | |
162 | |
163 fizzbuzz($_).say for 1..15; | |
164 </code></pre> | |
165 | |
166 </div> | |
167 <div class='slide '> | |
168 <!-- _S9SLIDE_ --> | |
169 | |
170 <h2 id="perl6-4">Perl6の処理系の構成</h2> | |
2 | 171 |
172 <ul> | |
173 <li>Perl6の処理系は現在はRakudoと呼ばれる(歴史上複数存在する)</li> | |
174 <li>Rakudoは3つのレイヤーから構成されている | |
175 <ul> | |
176 <li>Perl6インタプリタ</li> | |
177 <li>Perl6インタプリタを記述するPerl6のサブセットNQP</li> | |
178 <li>Perl6のバイトコードを解釈するMoarVM</li> | |
179 </ul> | |
180 </li> | |
181 <li>このうちPerl6インタプリタとNQPはNQP自身で記述されている</li> | |
182 <li>MoarVMはC言語で記述されている</li> | |
183 </ul> | |
184 | |
185 </div> | |
186 <div class='slide '> | |
187 <!-- _S9SLIDE_ --> | |
188 | |
189 <h2 id="perl6nqp">Perl6とNQP</h2> | |
190 | |
191 <ul> | |
192 <li>NQP(NotQuitPerl Perlっぽい別の言語)でRakudoを記述している</li> | |
193 <li>NQPもNQPで記述されている為、 セルフビルド(自分自身で自分自身をコンパイルする)を行う</li> | |
194 <li>NQPはPerl6の文法をベースにしているが、 制約がいくつか存在する</li> | |
195 </ul> | |
196 | |
4 | 197 <pre><code>#! nqp |
198 sub fib($n) { | |
199 $n < 2 ?? $n !! fib($n-1) + fib($n - 2); | |
200 } | |
201 | |
202 my $N := 29; | |
203 | |
204 my $t0 := nqp::time_n(); | |
205 my $z := fib($N); | |
206 my $t1 := nqp::time_n(); | |
207 | |
208 nqp::say("fib($N) = " ~ fib($N)); | |
209 nqp::say("time = " ~ ($t1-$t0)); | |
210 </code></pre> | |
211 | |
2 | 212 </div> |
213 <div class='slide '> | |
214 <!-- _S9SLIDE_ --> | |
215 | |
216 <h2 id="section-1">バイトコード</h2> | |
217 <ul> | |
3 | 218 <li>最近のスクリプト言語は、 ソースコードを直接解釈せず、バイトコードに変換する |
219 <ul> | |
5 | 220 <li>全体的な処理速度の向上の為</li> |
221 <li>実装を分離することでの見通しの良さ</li> | |
222 </ul> | |
223 </li> | |
224 <li>多言語の環境 | |
225 <ul> | |
226 <li>Ruby | |
227 <ul> | |
228 <li>YARV</li> | |
229 </ul> | |
230 </li> | |
231 <li>Python | |
232 <ul> | |
233 <li>PythonVM</li> | |
234 </ul> | |
235 </li> | |
236 <li>Elixir | |
237 <ul> | |
238 <li>BEAM</li> | |
239 </ul> | |
240 </li> | |
3 | 241 </ul> |
242 </li> | |
243 <li>Perl6も、Rakudo/NQPはバイトコードに変換され、 バイトコードをVMが実行する</li> | |
2 | 244 <li>バイトコード実行部分は、 命令に対応するバイト列を読み込み、 解釈し、 次の命令を読み取ることを繰り返す</li> |
245 </ul> | |
246 | |
1 | 247 <!-- === end markdown block === --> |
0
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
248 </div> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
249 |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
250 |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
251 </div><!-- presentation --> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
252 </body> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
253 </html> |