Mercurial > hg > Papers > 2018 > parusu-master
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 の定義}
--- /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); +}