# HG changeset patch # User Tatsuki IHA # Date 1518189333 -32400 # Node ID 83d080f68d19e2f800c954270542f9129a45fb83 # Parent 38985caa33d41c5360720cc83bc351fac4c91534 Update diff -r 38985caa33d4 -r 83d080f68d19 paper/interface.tex --- 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 の定義} diff -r 38985caa33d4 -r 83d080f68d19 paper/master_paper.pdf Binary file paper/master_paper.pdf has changed diff -r 38985caa33d4 -r 83d080f68d19 paper/src/contextContinuation.cbc --- /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); +}