changeset 94:19df48819b8d

update
author anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
date Tue, 19 Feb 2019 15:02:16 +0900
parents 9c5bf7231557
children 77fb6e9e3c08
files presen/slide.html presen/slide.md presen/slide.pdf.html
diffstat 3 files changed, 30 insertions(+), 241 deletions(-) [+]
line wrap: on
line diff
--- a/presen/slide.html	Tue Feb 19 14:49:04 2019 +0900
+++ b/presen/slide.html	Tue Feb 19 15:02:16 2019 +0900
@@ -178,8 +178,6 @@
       <li>バイトコードを解釈する仮想機械</li>
     </ul>
   </li>
-  <li>バイトコードを出力する形式の言語にJavaがあり、 内部的に利用している言語にRubyやPerlなどがある</li>
-  <li>Perl6も一度バイトコードを生成し、 このバイトコードを専用のVMが評価している</li>
 </ul>
 
 
@@ -198,13 +196,6 @@
       <li>NQPで記述されたPerl6(Rakudo)</li>
     </ul>
   </li>
-  <li>コンパイラも複数存在する
-    <ul>
-      <li>NQPで記述されたNQPコンパイラ</li>
-      <li>NQPで記述されたPerl6コンパイラ</li>
-      <li>MoarVMバイトコードを解釈するMoarVM</li>
-    </ul>
-  </li>
 </ul>
 
 
@@ -482,89 +473,21 @@
 
 <div class='slide'>
   <!-- _S9SLIDE_ -->
-<h2 id="nqp">NQP</h2>
-<ul>
-  <li>Perl6の機能を制約したプログラミング言語であり, Perl6はNQPで記述されている
-    <ul>
-      <li>その為Perl6処理系は, NQPの動作を目的に実装することでPerl6の動作が可能となる</li>
-      <li>NQPコンパイラ自身もNQPで記述されている</li>
-    </ul>
-  </li>
-  <li>Perl6と違い, 変数の宣言を <code>:=</code> を利用した束縛で行う, <code>++</code> 演算子が使用できないなどの違いがある</li>
-  <li>nqpのオペコードを利用する際に,型を指定する事が可能である</li>
-</ul>
-
-<pre><code>sub add_test(int $n) {
-    my $sum := 0;
-    while nqp::isgt_i($n,1) {
-        $sum := nqp::add_i($sum,$n);
-        $n := nqp::sub_i($n,1);
-    }
-    return $sum;
-}
-
-say(add_test(10));
-</code></pre>
-
-
-
-</div>
-
-<div class='slide'>
-  <!-- _S9SLIDE_ -->
-<h2 id="nqpのバイトコード">NQPのバイトコード</h2>
-
-<ul>
-  <li>NQPはMoarVMのバイトコードにコンパイルし, バイトコードをファイルに保存することが可能である</li>
-  <li>MoarVMのバイトコードは, アセンブリの様にダンプする事が可能である</li>
-  <li>実際に先程のコードをバイトコードにコンパイルし, 対応するバイトコードをダンプすると次の様に表示される</li>
-</ul>
-
-<pre><code>     annotation: hoge.nqp:3
-     label_1:
-00007      const_i64_16       loc_2_int, 1
-00008      gt_i               loc_2_int, loc_0_int, loc_2_int
-00009      unless_i           loc_2_int, label_2(00022)
-00010      osrpoint
-     annotation: hoge.nqp:4
-00011      decont             loc_3_obj, loc_1_obj
-00012      smrt_numify        loc_4_num, loc_3_obj
-00013      coerce_ni          loc_5_int, loc_4_num
-00014      add_i              loc_5_int, loc_5_int, loc_0_int
-00015      hllboxtype_i       loc_3_obj
-00016      box_i              loc_3_obj, loc_5_int, loc_3_obj
-00017      set                loc_1_obj, loc_3_obj
-     annotation: hoge.nqp:5
-00018      const_i64_16       loc_5_int, 1
-00019      sub_i              loc_5_int, loc_0_int, loc_5_int
-00020      set                loc_0_int, loc_5_int
-00021      goto               label_1(00007)
-</code></pre>
-
-
-
-</div>
-
-<div class='slide'>
-  <!-- _S9SLIDE_ -->
-<h2 id="nqpのバイトコードとcbc">NQPのバイトコードとCbC</h2>
-
-<ul>
-  <li>NQPが生成したMoarVMバイトコードは確実に次に実行される命令がある箇所が複数存在する</li>
-  <li>静的にCのソースファイルに, NQPが生成したバイトコードと対応するCbCのCodeGearの実行を書くことで決定的に命令を実行可能でえある.</li>
-</ul>
-
-
-
-</div>
-
-<div class='slide'>
-  <!-- _S9SLIDE_ -->
 <h2 id="cbcmoarvmの利点">CbCMoarVMの利点</h2>
 
 <ul>
-  <li>バイトコードインタプリタの箇所をモジュール化する事が可能となり, CodeGearの再利用性や記述生が高まる</li>
-  <li>デバッグ時にラベルではなくCodeGearにbreakpointを設定可能となり,デバッグが安易となる</li>
+  <li>バイトコードインタプリタの箇所をモジュール化する事が可能となった
+    <ul>
+      <li>CodeGearの再利用性や記述生が高まる</li>
+      <li>CodeGearは関数の様に扱えるの為、 命令ディスパッチの最適化につながる実装が可能となった</li>
+    </ul>
+  </li>
+  <li>デバッグ時にラベルではなくCodeGearにbreakpointを設定可能となった
+    <ul>
+      <li>デバッグが安易となる</li>
+    </ul>
+  </li>
+  <li>CPUがキャッシュに収まる範囲の命令の場合、 通常のMoarVMよりも高速に動作する</li>
 </ul>
 
 
--- a/presen/slide.md	Tue Feb 19 14:49:04 2019 +0900
+++ b/presen/slide.md	Tue Feb 19 15:02:16 2019 +0900
@@ -55,8 +55,6 @@
 - その為スクリプト言語の実装は大きく2つで構成されている
     - バイトコードに変換するフロントエンド部分
     - バイトコードを解釈する仮想機械
-- バイトコードを出力する形式の言語にJavaがあり、 内部的に利用している言語にRubyやPerlなどがある
-- Perl6も一度バイトコードを生成し、 このバイトコードを専用のVMが評価している
 
 ## Rakudo
 - Rakudoとは現在のPerl6の主力な実装である.
@@ -64,11 +62,6 @@
     - 実行環境のVM
     - Perl6のサブセットであるNQP(NotQuitPerl)
     - NQPで記述されたPerl6(Rakudo)
-- コンパイラも複数存在する
-    - NQPで記述されたNQPコンパイラ
-    - NQPで記述されたPerl6コンパイラ
-    - MoarVMバイトコードを解釈するMoarVM
-
 
 ## MoarVM
 
@@ -257,64 +250,14 @@
 ```
 
 
-## NQP
-- Perl6の機能を制約したプログラミング言語であり, Perl6はNQPで記述されている
-    - その為Perl6処理系は, NQPの動作を目的に実装することでPerl6の動作が可能となる
-    - NQPコンパイラ自身もNQPで記述されている
-- Perl6と違い, 変数の宣言を `:=` を利用した束縛で行う, `++` 演算子が使用できないなどの違いがある
-- nqpのオペコードを利用する際に,型を指定する事が可能である
-
-```
-sub add_test(int $n) {
-    my $sum := 0;
-    while nqp::isgt_i($n,1) {
-        $sum := nqp::add_i($sum,$n);
-        $n := nqp::sub_i($n,1);
-    }
-    return $sum;
-}
-
-say(add_test(10));
-```
-
-## NQPのバイトコード
-
-- NQPはMoarVMのバイトコードにコンパイルし, バイトコードをファイルに保存することが可能である
-- MoarVMのバイトコードは, アセンブリの様にダンプする事が可能である
-- 実際に先程のコードをバイトコードにコンパイルし, 対応するバイトコードをダンプすると次の様に表示される
-
-
-```
-     annotation: hoge.nqp:3
-     label_1:
-00007      const_i64_16       loc_2_int, 1
-00008      gt_i               loc_2_int, loc_0_int, loc_2_int
-00009      unless_i           loc_2_int, label_2(00022)
-00010      osrpoint
-     annotation: hoge.nqp:4
-00011      decont             loc_3_obj, loc_1_obj
-00012      smrt_numify        loc_4_num, loc_3_obj
-00013      coerce_ni          loc_5_int, loc_4_num
-00014      add_i              loc_5_int, loc_5_int, loc_0_int
-00015      hllboxtype_i       loc_3_obj
-00016      box_i              loc_3_obj, loc_5_int, loc_3_obj
-00017      set                loc_1_obj, loc_3_obj
-     annotation: hoge.nqp:5
-00018      const_i64_16       loc_5_int, 1
-00019      sub_i              loc_5_int, loc_0_int, loc_5_int
-00020      set                loc_0_int, loc_5_int
-00021      goto               label_1(00007)
-```
-
-## NQPのバイトコードとCbC
-
-- NQPが生成したMoarVMバイトコードは確実に次に実行される命令がある箇所が複数存在する
-- 静的にCのソースファイルに, NQPが生成したバイトコードと対応するCbCのCodeGearの実行を書くことで決定的に命令を実行可能でえある.
-
 ## CbCMoarVMの利点
 
-- バイトコードインタプリタの箇所をモジュール化する事が可能となり, CodeGearの再利用性や記述生が高まる
-- デバッグ時にラベルではなくCodeGearにbreakpointを設定可能となり,デバッグが安易となる
+- バイトコードインタプリタの箇所をモジュール化する事が可能となった
+    - CodeGearの再利用性や記述生が高まる
+    - CodeGearは関数の様に扱える為、 命令ディスパッチの最適化につながる実装が可能となった
+- デバッグ時にラベルではなくCodeGearにbreakpointを設定可能となった
+    - デバッグが安易となる
+- CPUがキャッシュに収まる範囲の命令の場合、 通常のMoarVMよりも高速に動作する
 
 ## CbCMoarVMの欠点
 
--- a/presen/slide.pdf.html	Tue Feb 19 14:49:04 2019 +0900
+++ b/presen/slide.pdf.html	Tue Feb 19 15:02:16 2019 +0900
@@ -162,8 +162,6 @@
       <li>バイトコードを解釈する仮想機械</li>
     </ul>
   </li>
-  <li>バイトコードを出力する形式の言語にJavaがあり、 内部的に利用している言語にRubyやPerlなどがある</li>
-  <li>Perl6も一度バイトコードを生成し、 このバイトコードを専用のVMが評価している</li>
 </ul>
 
 
@@ -182,13 +180,6 @@
       <li>NQPで記述されたPerl6(Rakudo)</li>
     </ul>
   </li>
-  <li>コンパイラも複数存在する
-    <ul>
-      <li>NQPで記述されたNQPコンパイラ</li>
-      <li>NQPで記述されたPerl6コンパイラ</li>
-      <li>MoarVMバイトコードを解釈するMoarVM</li>
-    </ul>
-  </li>
 </ul>
 
 
@@ -466,89 +457,21 @@
 
 <div class='slide'>
   <!-- _S9SLIDE_ -->
-<h2 id="nqp">NQP</h2>
-<ul>
-  <li>Perl6の機能を制約したプログラミング言語であり, Perl6はNQPで記述されている
-    <ul>
-      <li>その為Perl6処理系は, NQPの動作を目的に実装することでPerl6の動作が可能となる</li>
-      <li>NQPコンパイラ自身もNQPで記述されている</li>
-    </ul>
-  </li>
-  <li>Perl6と違い, 変数の宣言を <code>:=</code> を利用した束縛で行う, <code>++</code> 演算子が使用できないなどの違いがある</li>
-  <li>nqpのオペコードを利用する際に,型を指定する事が可能である</li>
-</ul>
-
-<pre><code>sub add_test(int $n) {
-    my $sum := 0;
-    while nqp::isgt_i($n,1) {
-        $sum := nqp::add_i($sum,$n);
-        $n := nqp::sub_i($n,1);
-    }
-    return $sum;
-}
-
-say(add_test(10));
-</code></pre>
-
-
-
-</div>
-
-<div class='slide'>
-  <!-- _S9SLIDE_ -->
-<h2 id="nqpのバイトコード">NQPのバイトコード</h2>
-
-<ul>
-  <li>NQPはMoarVMのバイトコードにコンパイルし, バイトコードをファイルに保存することが可能である</li>
-  <li>MoarVMのバイトコードは, アセンブリの様にダンプする事が可能である</li>
-  <li>実際に先程のコードをバイトコードにコンパイルし, 対応するバイトコードをダンプすると次の様に表示される</li>
-</ul>
-
-<pre><code>     annotation: hoge.nqp:3
-     label_1:
-00007      const_i64_16       loc_2_int, 1
-00008      gt_i               loc_2_int, loc_0_int, loc_2_int
-00009      unless_i           loc_2_int, label_2(00022)
-00010      osrpoint
-     annotation: hoge.nqp:4
-00011      decont             loc_3_obj, loc_1_obj
-00012      smrt_numify        loc_4_num, loc_3_obj
-00013      coerce_ni          loc_5_int, loc_4_num
-00014      add_i              loc_5_int, loc_5_int, loc_0_int
-00015      hllboxtype_i       loc_3_obj
-00016      box_i              loc_3_obj, loc_5_int, loc_3_obj
-00017      set                loc_1_obj, loc_3_obj
-     annotation: hoge.nqp:5
-00018      const_i64_16       loc_5_int, 1
-00019      sub_i              loc_5_int, loc_0_int, loc_5_int
-00020      set                loc_0_int, loc_5_int
-00021      goto               label_1(00007)
-</code></pre>
-
-
-
-</div>
-
-<div class='slide'>
-  <!-- _S9SLIDE_ -->
-<h2 id="nqpのバイトコードとcbc">NQPのバイトコードとCbC</h2>
-
-<ul>
-  <li>NQPが生成したMoarVMバイトコードは確実に次に実行される命令がある箇所が複数存在する</li>
-  <li>静的にCのソースファイルに, NQPが生成したバイトコードと対応するCbCのCodeGearの実行を書くことで決定的に命令を実行可能でえある.</li>
-</ul>
-
-
-
-</div>
-
-<div class='slide'>
-  <!-- _S9SLIDE_ -->
 <h2 id="cbcmoarvmの利点">CbCMoarVMの利点</h2>
 
 <ul>
-  <li>バイトコードインタプリタの箇所をモジュール化する事が可能となり, CodeGearの再利用性や記述生が高まる</li>
-  <li>デバッグ時にラベルではなくCodeGearにbreakpointを設定可能となり,デバッグが安易となる</li>
+  <li>バイトコードインタプリタの箇所をモジュール化する事が可能となった
+    <ul>
+      <li>CodeGearの再利用性や記述生が高まる</li>
+      <li>CodeGearは関数の様に扱えるの為、 命令ディスパッチの最適化につながる実装が可能となった</li>
+    </ul>
+  </li>
+  <li>デバッグ時にラベルではなくCodeGearにbreakpointを設定可能となった
+    <ul>
+      <li>デバッグが安易となる</li>
+    </ul>
+  </li>
+  <li>CPUがキャッシュに収まる範囲の命令の場合、 通常のMoarVMよりも高速に動作する</li>
 </ul>