changeset 80:83d080f68d19

Update
author Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
date Sat, 10 Feb 2018 00:15:33 +0900
parents 38985caa33d4
children 800aae8618f0
files paper/interface.tex paper/master_paper.pdf paper/src/contextContinuation.cbc
diffstat 3 files changed, 27 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/paper/interface.tex	Fri Feb 09 19:50:23 2018 +0900
+++ b/paper/interface.tex	Sat Feb 10 00:15:33 2018 +0900
@@ -18,6 +18,7 @@
 % 図のput の位置を直す
 % Context and stub の詳細な説明はここに書く
 % stub の説明は スクリプトによる goto の変換後
+
 \chapter{Gears OS のモジュール化}
 Gears OS は stub Code Gear という Meta Code Gear で Context という全ての Code Gear と Data Gear を持った Meta Data Gear から値を取りだし、ノーマルレベルの Code Gear に値を渡す。
 しかし、Gears OS を実際に実装するにつれて、メタレベルからノーマルレベルへの継続の記述が煩雑になることがわかり、Code Gear と Data Gear のモジュール化が必要になった。
@@ -26,14 +27,21 @@
 
 \section{Context を経由しての継続の問題点}
 Gears OS は Code Gear で必要な Input Data Gear を Context から番号を指定して取り出すことで処理を実行する。
+この処理は stub Code Gear で行われる。
+\coderef{contextContinuation} に stub Code Gear の記述例を示す。
+
+\lstinputlisting[caption=Context を経由した継続, label=code:contextContinuation]{./src/contextContinuation.cbc}
+
 Context はプログラム全体でみると使用する全ての Code Gear と Data Gear の集合を表現する Meta Data Gear になっている。
-しかし、Gears OS を実装する上で Context から Code Gear と Data Gear の番号の組合せを全て展開すると Code Gear がどの Data Gear の番号に対応するかを stub Code Gear に書く必要があり、記述が煩雑になってしまった。
-また、stub Code Gear の記述の煩雑さを避けるために、決まった番号に決まった型の Data Gear を生成し、その Data Gear を複数の Code Gear で使いまわすという、Data Gear をグローバル変数のように扱う問題が多発した。
+しかし、Gears OS を実装する上で Context から Code Gear と Data Gear の番号の組合せを全て展開すると Code Gear がどの Data Gear の番号に対応するかを stub Code Gear に書く必要があり、\coderef{contextContinuation} 8行目のような煩雑な記述が増えてしまった。
 
-この問題点は Context が全ての Code Gear と Data Gear の集合を表現するために起こった問題である。
+また、stub Code Gear の記述の煩雑さを避けるために、\coderef{contextContinuation} 10行目のような決まったenumに決まった型の Data Gear を生成し、その Data Gear を複数の Code Gear で使いまわすという、Data Gear をグローバル変数のように扱う問題が多発した。
+
+これらの問題点は Context が全ての Code Gear と Data Gear の集合を表現するために起こった問題である。
 そこで、Gears OS をモジュール化する仕組みとして Interface を導入した。
-Interface は ある Data Gear の定義と、それに対する操作(API)を行う Code Gear の集合を表現する Meta Data Gear である。
-Context では全ての Code Gear と Data Gear の集合を表現してることに比べ、Interface は 一部の Data Gear と 一部の Code Gear の集合を表現する。
+Interface はある Data Gear の定義と、それに対する操作(API)を行う Code Gear の集合を表現する Meta Data Gear である。
+Context では全ての Code Gear と Data Gear の集合を表現していることに対し、Interface は一部の Code Gear と一部の Data Gear の集合を表現する。
+Interface を導入することで、データ構造を使用と実装に分けて記述することが出来る。
 この Interface は Java の インターフェース、Haskell の型クラスに対応する。
 
 \section{Interface の定義}
Binary file paper/master_paper.pdf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/src/contextContinuation.cbc	Sat Feb 10 00:15:33 2018 +0900
@@ -0,0 +1,14 @@
+// normal level Code Gear
+__code cg0(struct Context* context, struct Integer integer, struct Queue queue) {
+    ...
+}
+
+// meta level stub Code Gear
+__code cg0_stub(struct Context* context) {
+    // get data index number
+    Integer integer = &context->data[context->dataNum]->Integer
+    // get enum data
+    Queue* queue = &context->data[Queue]->Queue;
+    // continuation Code Gear
+    goto cg0(context, integer, queue);
+}