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 &lt;unit&gt; 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>