comparison slide.pdf.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
144 144
145 <pre><code>my Int $int_value = 31; 145 <pre><code>my Int $int_value = 31;
146 $int_value = "hello"; # Compile error! 146 $int_value = "hello"; # Compile error!
147 </code></pre> 147 </code></pre>
148 148
149 <pre><code>$ perl6 type_invalid.p6
150 Type check failed in assignment to $int_value; expected Int but got Str ("hello")
151 in block &lt;unit&gt; at type_invalid.p6 line 4
152 </code></pre>
153
149 154
150 155
151 </div> 156 </div>
152 157
153 <div class='slide'> 158 <div class='slide'>
172 177
173 fizzbuzz($_).say for 1..15; 178 fizzbuzz($_).say for 1..15;
174 </code></pre> 179 </code></pre>
175 180
176 181
182 </div>
183
184 <div class='slide'>
185 <!-- _S9SLIDE_ -->
186 <h2 id="スクリプト言語処理系">スクリプト言語処理系</h2>
187 <ul>
188 <li>スクリプト言語は入力として与えられたソースコードを、 直接評価せずにバイトコードにコンパイルする形式が主流となっている</li>
189 <li>その為スクリプト言語の実装は大きく2つで構成されている
190 <ul>
191 <li>バイトコードに変換するフロントエンド部分</li>
192 <li>バイトコードを解釈する仮想機械</li>
193 </ul>
194 </li>
195 </ul>
196
197 <p><img src="fig/bytecode_sample_generally_lang.svg" width="80%" /></p>
198
199
177 200
178 </div> 201 </div>
179 202
180 <div class='slide'> 203 <div class='slide'>
181 <!-- _S9SLIDE_ --> 204 <!-- _S9SLIDE_ -->
227 250
228 </div> 251 </div>
229 252
230 <div class='slide'> 253 <div class='slide'>
231 <!-- _S9SLIDE_ --> 254 <!-- _S9SLIDE_ -->
232 <h2 id="バイトコード">バイトコード</h2> 255 <h2 id="プログラミング言語とvm">プログラミング言語とVM</h2>
233 <ul> 256 <ul>
234 <li>最近のスクリプト言語は、 ソースコードを直接解釈せず、バイトコードに変換する 257 <li>最近のスクリプト言語は、 ソースコードを直接解釈せず、バイトコードに変換しVMが評価する
235 <ul> 258 <ul>
236 <li>全体的な処理速度の向上の為</li> 259 <li>全体的な処理速度の向上の為</li>
237 <li>実装を分離することでの見通しの良さ</li> 260 <li>実装を分離することでの見通しの良さ</li>
238 </ul> 261 </ul>
239 </li> 262 </li>
240 <li>多言語の環境 263 <li>言語処理系の実行にのみ動作するVM(プロセスVM)</li>
241 <ul> 264 <li>他言語の環境
265 <ul>
266 <li>Java
267 <ul>
268 <li>JVM</li>
269 </ul>
270 </li>
242 <li>Ruby 271 <li>Ruby
243 <ul> 272 <ul>
244 <li>YARV</li> 273 <li>YARV</li>
245 </ul> 274 </ul>
246 </li> 275 </li>
254 <li>BEAM</li> 283 <li>BEAM</li>
255 </ul> 284 </ul>
256 </li> 285 </li>
257 </ul> 286 </ul>
258 </li> 287 </li>
288 </ul>
289
290
291
292 </div>
293
294 <div class='slide'>
295 <!-- _S9SLIDE_ -->
296 <h2 id="perl6のvmの構成">Perl6のVMの構成</h2>
297 <ul>
298 <li>MoarVMと呼ばれるVM</li>
299 <li>C言語で記述されている</li>
300 <li>レジスタマシン
301 <ul>
302 <li>型情報を持つレジスタに対しての演算として処理される</li>
303 </ul>
304 </li>
305 <li>LuaJITなどを利用したJITコンパイルなども可能</li>
306 <li>Perl6やNQPは、MoarVMに対してライブラリなどを設定して起動する</li>
307 </ul>
308
309
310
311 </div>
312
313 <div class='slide'>
314 <!-- _S9SLIDE_ -->
315 <h2 id="バイトコード">バイトコード</h2>
316 <ul>
259 <li>Perl6も、Rakudo/NQPはバイトコードに変換され、 バイトコードをVMが実行する</li> 317 <li>Perl6も、Rakudo/NQPはバイトコードに変換され、 バイトコードをVMが実行する</li>
260 <li>バイトコード実行部分は、 命令に対応するバイト列を読み込み、 解釈し、 次の命令を読み取ることを繰り返す</li> 318 <li>バイトコード実行部分は、 命令に対応するバイト列を読み込み、 解釈し、 次の命令を読み取ることを繰り返す</li>
261 </ul> 319 </ul>
262 320
263 321