comparison slide.html @ 7:d8feb607c44e

update
author anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
date Fri, 19 Apr 2019 15:52:38 +0900
parents f8f9af788fa7
children 642787982a80
comparison
equal deleted inserted replaced
6:f8f9af788fa7 7:d8feb607c44e
160 160
161 <pre><code>my Int $int_value = 31; 161 <pre><code>my Int $int_value = 31;
162 $int_value = "hello"; # Compile error! 162 $int_value = "hello"; # Compile error!
163 </code></pre> 163 </code></pre>
164 164
165 <pre><code>$ perl6 type_invalid.p6
166 Type check failed in assignment to $int_value; expected Int but got Str ("hello")
167 in block &lt;unit&gt; at type_invalid.p6 line 4
168 </code></pre>
169
165 170
166 171
167 </div> 172 </div>
168 173
169 <div class='slide'> 174 <div class='slide'>
188 193
189 fizzbuzz($_).say for 1..15; 194 fizzbuzz($_).say for 1..15;
190 </code></pre> 195 </code></pre>
191 196
192 197
198 </div>
199
200 <div class='slide'>
201 <!-- _S9SLIDE_ -->
202 <h2 id="スクリプト言語処理系">スクリプト言語処理系</h2>
203 <ul>
204 <li>スクリプト言語は入力として与えられたソースコードを、 直接評価せずにバイトコードにコンパイルする形式が主流となっている</li>
205 <li>その為スクリプト言語の実装は大きく2つで構成されている
206 <ul>
207 <li>バイトコードに変換するフロントエンド部分</li>
208 <li>バイトコードを解釈する仮想機械</li>
209 </ul>
210 </li>
211 </ul>
212
213 <p><img src="fig/bytecode_sample_generally_lang.svg" width="80%" /></p>
214
215
193 216
194 </div> 217 </div>
195 218
196 <div class='slide'> 219 <div class='slide'>
197 <!-- _S9SLIDE_ --> 220 <!-- _S9SLIDE_ -->
243 266
244 </div> 267 </div>
245 268
246 <div class='slide'> 269 <div class='slide'>
247 <!-- _S9SLIDE_ --> 270 <!-- _S9SLIDE_ -->
248 <h2 id="バイトコード">バイトコード</h2> 271 <h2 id="プログラミング言語とvm">プログラミング言語とVM</h2>
249 <ul> 272 <ul>
250 <li>最近のスクリプト言語は、 ソースコードを直接解釈せず、バイトコードに変換する 273 <li>最近のスクリプト言語は、 ソースコードを直接解釈せず、バイトコードに変換しVMが評価する
251 <ul> 274 <ul>
252 <li>全体的な処理速度の向上の為</li> 275 <li>全体的な処理速度の向上の為</li>
253 <li>実装を分離することでの見通しの良さ</li> 276 <li>実装を分離することでの見通しの良さ</li>
254 </ul> 277 </ul>
255 </li> 278 </li>
256 <li>多言語の環境 279 <li>言語処理系の実行にのみ動作するVM(プロセスVM)</li>
257 <ul> 280 <li>他言語の環境
281 <ul>
282 <li>Java
283 <ul>
284 <li>JVM</li>
285 </ul>
286 </li>
258 <li>Ruby 287 <li>Ruby
259 <ul> 288 <ul>
260 <li>YARV</li> 289 <li>YARV</li>
261 </ul> 290 </ul>
262 </li> 291 </li>
270 <li>BEAM</li> 299 <li>BEAM</li>
271 </ul> 300 </ul>
272 </li> 301 </li>
273 </ul> 302 </ul>
274 </li> 303 </li>
304 </ul>
305
306
307
308 </div>
309
310 <div class='slide'>
311 <!-- _S9SLIDE_ -->
312 <h2 id="perl6のvmの構成">Perl6のVMの構成</h2>
313 <ul>
314 <li>MoarVMと呼ばれるVM</li>
315 <li>C言語で記述されている</li>
316 <li>レジスタマシン
317 <ul>
318 <li>型情報を持つレジスタに対しての演算として処理される</li>
319 </ul>
320 </li>
321 <li>LuaJITなどを利用したJITコンパイルなども可能</li>
322 <li>Perl6やNQPは、MoarVMに対してライブラリなどを設定して起動する</li>
323 </ul>
324
325
326
327 </div>
328
329 <div class='slide'>
330 <!-- _S9SLIDE_ -->
331 <h2 id="バイトコード">バイトコード</h2>
332 <ul>
275 <li>Perl6も、Rakudo/NQPはバイトコードに変換され、 バイトコードをVMが実行する</li> 333 <li>Perl6も、Rakudo/NQPはバイトコードに変換され、 バイトコードをVMが実行する</li>
276 <li>バイトコード実行部分は、 命令に対応するバイト列を読み込み、 解釈し、 次の命令を読み取ることを繰り返す</li> 334 <li>バイトコード実行部分は、 命令に対応するバイト列を読み込み、 解釈し、 次の命令を読み取ることを繰り返す</li>
277 </ul> 335 </ul>
278 336
279 337