changeset 26:9d2a0a735986

Update
author Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
date Tue, 30 Jan 2018 07:00:42 +0900
parents 43a2be7500dd
children bc7ea5774f6b
files paper/fig/gotoInterface.graffle paper/fig/gotoInterface.pdf paper/fig/gotoInterface.xbb paper/interface.tex paper/master_paper.pdf
diffstat 5 files changed, 20 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
Binary file paper/fig/gotoInterface.graffle has changed
Binary file paper/fig/gotoInterface.pdf has changed
--- a/paper/fig/gotoInterface.xbb	Tue Jan 30 05:00:39 2018 +0900
+++ b/paper/fig/gotoInterface.xbb	Tue Jan 30 07:00:42 2018 +0900
@@ -4,5 +4,5 @@
 %%HiResBoundingBox: 0.000000 0.000000 793.000000 724.000000
 %%PDFVersion: 1.3
 %%Pages: 1
-%%CreationDate: Tue Jan 30 04:46:28 2018
+%%CreationDate: Tue Jan 30 06:48:02 2018
 
--- a/paper/interface.tex	Tue Jan 30 05:00:39 2018 +0900
+++ b/paper/interface.tex	Tue Jan 30 07:00:42 2018 +0900
@@ -13,7 +13,11 @@
  % inteface の実装の際は Code Gear に代入して書く
  % C++ で言うとCode Gearは virtual 
 
-\chapter{Interface}
+\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 のモジュール化が必要になった。
+
+本章では Gears OS のモジュール化の仕組みである Interface について説明する。
 
 \section{Context を経由しての継続の問題点}
 Gears OS は Code Gear で必要な Input Data Gear を Context から番号を指定して取り出すことで処理を実行する。
@@ -36,13 +40,13 @@
 Queue の Interface を \coderef{queueInterface} に示す。
 \coderef{queueInterface} の3-4行目は 引数の Data Gear 群を定義している。
 ここで定義された Data Gear 名は、定義された Code Gear の引数に対応する。
-例えば \coderef{queueInterface} の10行目は Queue に要素を挿入する Code Gear を定義しており、引数として 挿入する Queue の実装と 挿入する要素を受け取る。
-この引数それぞれが \coderef{queueInterface} 3-4行目で定義した queue と data に対応する。
+\coderef{queueInterface} では10行目で Queue に要素を挿入する Code Gear を定義しており、引数として挿入する Queue の実装と挿入する要素を受け取る。
+この引数それぞれが \coderef{queueInterface} の3-4行目で定義した queue と data に対応する。
 
 \coderef{queueInterface} の5-6行目は Interface の Code Gear の実行後に継続される Code Gear を定義している。
 この値は Interface の Code Gear を呼び出す際に外から代入される。
 Code Gear によってこの継続は複数設定される場合がある。
-例えば \coderef{queueInterface} の12行目には Queue が空かどうかを調べる Code Gear が定義されており、中身がある場合と空の場合で別の継続を渡す必要がある。
+\coderef{queueInterface} では12行目で Queue が空かどうかを調べる Code Gear が定義されており、中身がある場合と空の場合で別の継続を渡す必要がある。
 ``\_\_code next(...)'' の引数である ``...'' は複数の Output Data Gearを書き出すことを示している。
 つまり、実行後に継続される Code Gear の Input Data Gear に対応する。
 この ``...'' は通常のプログラミング言語では可変長引数のような扱いである。
@@ -51,7 +55,9 @@
 この Code Gear の引数には Data Gear と Code Gear 実行後に継続される Code Gear 等を渡す。
 引数の型と変数名は Interface で定義されている Data Gear 群に対応するように記述する。
 引数の Data Gear はその Code Gear のInput Data Gear になり、引数の Code Gear の中の引数が Output Data Gear になる。
-例えば\coderef{queueInterface} の11行目は Queue から要素の取り出しを行う Code Gear を定義しており、引数として 取り出すQueue の実装と、Code Gear 実行後に継続される Code Gear を受け取る。
+Code Gear の第一引数には Interface を実装した Data Gear を渡す。
+これは、Code Gear の操作の対象となる Data Gear を設定しており、 後述する継続構文では引数として記述しない。
+\coderef{queueInterface} では11行目で Queue から要素の取り出しを行う Code Gear を定義しており、引数として 取り出すQueue の実装と、Code Gear 実行後に継続される Code Gear を受け取る。
 引数の Code Gear である``\_\_code next(union Data*, ...)``の ``(union Data*, ...)'' は Queue の要素取り出しを行う Code Gear の Output Data Gear であり、実行後に継続される Code Gear の Input Data Gear になる。
 
 \lstinputlisting[caption=QueueのInterface, label=code:queueInterface]{./src/queueInterface.h}
@@ -85,13 +91,18 @@
 
 \lstinputlisting[caption=Queue Interface での Code Gear の呼び出し, label=code:singleLinkedQueueTest]{./src/singleLinkedQueueTest.cbc}
 
-\coderef{singleLinkedQueueTest} は実際にはスクリプトによって \coderef{singleLinkedQueueTest_script} に変換されコンパイルされる。
-\coderef{singleLinkedQueueTest_script} でのデータの流れは \figref{goto_interface} のようになる。
+``goto interface-\textgreater method'' という構文は実際にはスクリプトで変換され、コンパイルされる。
+変換後のコードはメタレベルのコードとなるため、Context をマクロを経由し、直接参照を行う。
+\coderef{singleLinkedQueueTest_script} は \coderef{singleLinkedQueueTest} がスクリプトによってに変換されたソースコードを示しており、 \figref{goto_interface} は \coderef{singleLinkedQueueTest_script} が実行された際の Queue Interface と Code Gear、 Data Gear の関係を示している。
 
 \coderef{singleLinkedQueueTest_script} 内の Gearef マクロは Context から Interface の引数格納用の Data Gear を取り出す。
-この引数格納用の Data Gear は Context の初期化の際に生成される。
+この引数格納用の Data Gear は Context の初期化の際に特別に生成され、型は使用される Interface の型と同じである。
+また、引数格納用の Data Gear はノーマルレベルでは参照されず、メタレベルの場合のみ参照される。
 引数格納用の Data Gear を取り出した後は変換前の呼び出しの引数を Interface で定義した Code Gear の引数情報に合わせて格納し、指定した Code Gear に継続する。
 
+\coderef{singleLinkedQueueTest_script} では Queue Interface の put を継続しているため、6行目で Input Data Gear として node Data Gear を 引数格納用の Data Gear の data に代入し、7行目で実行後に継続する Code Gear として queueTest2 を 引数格納用の Data Gear の next に代入している。
+代入した引数は stub Code Gear で展開され、実装された Code Gear に Data Gear を渡す。
+
 \lstinputlisting[caption=スクリプトによる変換後, label=code:singleLinkedQueueTest_script]{./src/singleLinkedQueueTest_script.cbc}
 
 \begin{figure}[htbp]
Binary file paper/master_paper.pdf has changed