Mercurial > hg > Events > OSC2019
diff 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 |
line wrap: on
line diff
--- a/slide.html Fri Apr 19 12:10:48 2019 +0900 +++ b/slide.html Fri Apr 19 15:52:38 2019 +0900 @@ -162,6 +162,11 @@ $int_value = "hello"; # Compile error! </code></pre> +<pre><code>$ perl6 type_invalid.p6 +Type check failed in assignment to $int_value; expected Int but got Str ("hello") + in block <unit> at type_invalid.p6 line 4 +</code></pre> + </div> @@ -190,6 +195,24 @@ </code></pre> +</div> + +<div class='slide'> + <!-- _S9SLIDE_ --> +<h2 id="スクリプト言語処理系">スクリプト言語処理系</h2> +<ul> + <li>スクリプト言語は入力として与えられたソースコードを、 直接評価せずにバイトコードにコンパイルする形式が主流となっている</li> + <li>その為スクリプト言語の実装は大きく2つで構成されている + <ul> + <li>バイトコードに変換するフロントエンド部分</li> + <li>バイトコードを解釈する仮想機械</li> + </ul> + </li> +</ul> + +<p><img src="fig/bytecode_sample_generally_lang.svg" width="80%" /></p> + + </div> @@ -245,16 +268,22 @@ <div class='slide'> <!-- _S9SLIDE_ --> -<h2 id="バイトコード">バイトコード</h2> +<h2 id="プログラミング言語とvm">プログラミング言語とVM</h2> <ul> - <li>最近のスクリプト言語は、 ソースコードを直接解釈せず、バイトコードに変換する + <li>最近のスクリプト言語は、 ソースコードを直接解釈せず、バイトコードに変換しVMが評価する <ul> <li>全体的な処理速度の向上の為</li> <li>実装を分離することでの見通しの良さ</li> </ul> </li> - <li>多言語の環境 + <li>言語処理系の実行にのみ動作するVM(プロセスVM)</li> + <li>他言語の環境 <ul> + <li>Java + <ul> + <li>JVM</li> + </ul> + </li> <li>Ruby <ul> <li>YARV</li> @@ -272,6 +301,35 @@ </li> </ul> </li> +</ul> + + + +</div> + +<div class='slide'> + <!-- _S9SLIDE_ --> +<h2 id="perl6のvmの構成">Perl6のVMの構成</h2> +<ul> + <li>MoarVMと呼ばれるVM</li> + <li>C言語で記述されている</li> + <li>レジスタマシン + <ul> + <li>型情報を持つレジスタに対しての演算として処理される</li> + </ul> + </li> + <li>LuaJITなどを利用したJITコンパイルなども可能</li> + <li>Perl6やNQPは、MoarVMに対してライブラリなどを設定して起動する</li> +</ul> + + + +</div> + +<div class='slide'> + <!-- _S9SLIDE_ --> +<h2 id="バイトコード">バイトコード</h2> +<ul> <li>Perl6も、Rakudo/NQPはバイトコードに変換され、 バイトコードをVMが実行する</li> <li>バイトコード実行部分は、 命令に対応するバイト列を読み込み、 解釈し、 次の命令を読み取ることを繰り返す</li> </ul>