changeset 105:d14f18fef819

Fix
author Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
date Tue, 13 Feb 2018 14:13:42 +0900
parents 4b49908418e2
children 2d411c46eeb9
files slide/slide.html slide/slide.md
diffstat 2 files changed, 42 insertions(+), 29 deletions(-) [+]
line wrap: on
line diff
--- a/slide/slide.html	Tue Feb 13 13:49:38 2018 +0900
+++ b/slide/slide.html	Tue Feb 13 14:13:42 2018 +0900
@@ -87,7 +87,7 @@
 <!-- === begin markdown block ===
 
       generated by markdown/1.2.0 on Ruby 2.3.0 (2015-12-25) [x86_64-darwin16]
-                on 2018-02-13 13:24:35 +0900 with Markdown engine kramdown (1.13.2)
+                on 2018-02-13 14:13:38 +0900 with Markdown engine kramdown (1.13.2)
                   using options {}
   -->
 
@@ -329,9 +329,10 @@
 <!-- _S9SLIDE_ -->
 <h2 id="interface--1">Interface の定義</h2>
 <ul>
-  <li><strong>__code next(…)</strong> は一種のクロージャであり、引数で Code Gear を渡すことが出来る</li>
-  <li>クロージャの引数には Input Data Gear を指定する</li>
-  <li>… は可変長引数のような扱いで、Code Gear が複数の Input Data Gear を待っている可能性がある</li>
+  <li><strong>__code next(…)</strong> は継続を表している</li>
+  <li>… は可変長引数に相当する</li>
+  <li>可変長引数部分には呼び出し元の Interface の Data Gear が入る</li>
+  <li>継続の引数で Output Data Gear を返すことが出来る</li>
 </ul>
 
 <pre lang="c"><code>typedef struct Queue&lt;Impl&gt;{
@@ -353,12 +354,11 @@
 </div>
 <div class='slide '>
 <!-- _S9SLIDE_ -->
-<h2 id="interface--2">Interface の実装</h2>
+<h2 id="interface--2">Interface のインスタンスの生成</h2>
 <ul>
-  <li>Interface には複数の実装を行うことが出来る</li>
-  <li>Code Gear の番号を Interface の定義に代入することで実装を行う</li>
+  <li>Interface は API に Code Gear を番号を入れることにより、複数の実装ヲ行うことが出来る</li>
   <li>代入する Code Gear を入れ替えることで別の実装を表現する</li>
-  <li>実装した Data Gear の生成は関数呼び出しで行われ、外から見るとInterface の型で扱われる</li>
+  <li>Interface を表す Data Gear の生成は以下の関数で行われる</li>
 </ul>
 
 <pre lang="c"><code>Queue* createSingleLinkedQueue(struct Context* context) {
@@ -379,10 +379,10 @@
 </div>
 <div class='slide '>
 <!-- _S9SLIDE_ -->
-<h2 id="interface--code-gear-">Interface を利用した Code Gear の呼び出し</h2>
+<h2 id="interface--3">Interface の使い方</h2>
 <ul>
   <li>Interface を利用した Code Gear への継続は <code>goto interface-&gt;method</code> で行われる</li>
-  <li><strong>interface</strong>  は Interfaceの型で包んだData Gear、 <strong>method</strong> は実装した Code Gear に対応する</li>
+  <li><strong>interface</strong>  は Interface を表す Data Gear、 <strong>method</strong> は実装した Code Gear に対応する</li>
 </ul>
 
 <pre lang="c"><code>__code code1() { 
@@ -397,16 +397,20 @@
 </div>
 <div class='slide '>
 <!-- _S9SLIDE_ -->
-<h2 id="interface--code-gear--1">Interface を利用した Code Gear の呼び出し(スクリプト変換後)</h2>
+<h2 id="interface--4">メタレベルでの Interface の呼び出しの詳細</h2>
 <ul>
-  <li>Interface を利用した Code Gear の継続はスクリプトによって変換される
+  <li>Interface を利用した Code Gear の継続はスクリプトによってメタレベルの記述に変換される
     <ul>
-      <li>変換後は Context を参照するため、メタレベルの記述になる</li>
+      <li>変換後は Context を参照するコードが生成される</li>
     </ul>
   </li>
   <li>Gearef マクロは Context から Interface の引数格納用の Data Gear を取り出す</li>
-  <li>この Data Gear は Context を初期化した際に特別に生成され、型は Interface と同じになる</li>
-  <li>呼び出すCode Gear の引数情報に合わせて引数に格納し、 実装された Code Gear へ継続する</li>
+  <li>Context には Interface の引数を渡すための Data Gear が予め用意されている</li>
+  <li>goto meta では Interface の Code Gear の番号を Code Gear へのポインタに変換して継続を行う
+    <ul>
+      <li>goto meta にはメタ計算をいれることができる</li>
+    </ul>
+  </li>
 </ul>
 
 <pre lang="c"><code>__code code1(struct Context *context) {
@@ -443,6 +447,10 @@
 	enum Code next = Gearef(context, Queue)-&gt;next;
 	goto putSingleLinkedQueue(context, queue, data, next);
 } 
+
+__code meta(struct Context* context, enum Code next) {
+    // printf("meta %d\n",next);
+    goto (context-&gt;code[next])(context);
 </code></pre>
 
 
--- a/slide/slide.md	Tue Feb 13 13:49:38 2018 +0900
+++ b/slide/slide.md	Tue Feb 13 14:13:42 2018 +0900
@@ -141,9 +141,10 @@
 ```
 
 ## Interface の定義
-- **__code next(...)** は一種のクロージャであり、引数で Code Gear を渡すことが出来る
-- クロージャの引数には Input Data Gear を指定する
-- ... は可変長引数のような扱いで、Code Gear が複数の Input Data Gear を待っている可能性がある
+- **__code next(...)** は継続を表している
+- ... は可変長引数に相当する
+- 可変長引数部分には呼び出し元の Interface の Data Gear が入る
+- 継続の引数で Output Data Gear を返すことが出来る
 
 ``` c
 typedef struct Queue<Impl>{
@@ -161,11 +162,10 @@
 } Queue;
 ```
 
-## Interface の実装
-- Interface には複数の実装を行うことが出来る
-- Code Gear の番号を Interface の定義に代入することで実装を行う
+## Interface のインスタンスの生成
+- Interface は API に Code Gear を番号を入れることにより、複数の実装ヲ行うことが出来る
 - 代入する Code Gear を入れ替えることで別の実装を表現する
-- 実装した Data Gear の生成は関数呼び出しで行われ、外から見るとInterface の型で扱われる
+- Interface を表す Data Gear の生成は以下の関数で行われる
 
 ``` c
 Queue* createSingleLinkedQueue(struct Context* context) {
@@ -182,9 +182,9 @@
 }
 ```
 
-## Interface を利用した Code Gear の呼び出し
+## Interface の使い方
 - Interface を利用した Code Gear への継続は `goto interface->method` で行われる
-- **interface**  は Interfaceの型で包んだData Gear、 **method** は実装した Code Gear に対応する
+- **interface**  は Interface を表す Data Gear、 **method** は実装した Code Gear に対応する
 
 ``` c
 __code code1() { 
@@ -195,12 +195,13 @@
 }
 ```
 
-## Interface を利用した Code Gear の呼び出し(スクリプト変換後)
-- Interface を利用した Code Gear の継続はスクリプトによって変換される
-    - 変換後は Context を参照するため、メタレベルの記述になる
+## メタレベルでの Interface の呼び出しの詳細
+- Interface を利用した Code Gear の継続はスクリプトによってメタレベルの記述に変換される
+    - 変換後は Context を参照するコードが生成される
 - Gearef マクロは Context から Interface の引数格納用の Data Gear を取り出す
-- この Data Gear は Context を初期化した際に特別に生成され、型は Interface と同じになる
-- 呼び出すCode Gear の引数情報に合わせて引数に格納し、 実装された Code Gear へ継続する
+- Context には Interface の引数を渡すための Data Gear が予め用意されている
+- goto meta では Interface の Code Gear の番号を Code Gear へのポインタに変換して継続を行う
+    - goto meta にはメタ計算をいれることができる
 
 ``` c
 __code code1(struct Context *context) {
@@ -232,6 +233,10 @@
 	enum Code next = Gearef(context, Queue)->next;
 	goto putSingleLinkedQueue(context, queue, data, next);
 } 
+
+__code meta(struct Context* context, enum Code next) {
+    // printf("meta %d\n",next);
+    goto (context->code[next])(context);
 ```
 
 ## 並列処理の構成