changeset 17:9295b0c90a84

update
author mir3636
date Wed, 30 Jan 2019 17:06:49 +0900
parents a2f7c20be416
children c38593d39041
files paper/generate_code.tex paper/interface.tex paper/master_paper.pdf paper/meta_computation.tex
diffstat 4 files changed, 45 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/paper/generate_code.tex	Mon Jan 28 13:29:23 2019 +0900
+++ b/paper/generate_code.tex	Wed Jan 30 17:06:49 2019 +0900
@@ -22,7 +22,7 @@
 この Code Gear を generate stub によって変換、
 stub Code Gear の生成を行なったコードがソースコード \ref{MetaCodeGear} である。
 
-\begin{lstlisting}[frame=lrbt,label=MetaCodeGear,caption={\footnotesize Stack pop の MetaCodeGear}]
+\begin{lstlisting}[frame=lrbt,label=MetaCodeGear,caption={\footnotesize Stack pop の変換}]
 
 __code popSingleLinkedStack_stub(struct Context* context) {
         SingleLinkedStack* stack = (SingleLinkedStack*)GearImpl(context, Stack, stack);
@@ -64,18 +64,6 @@
 実装の Data Gear を取り出す際も、ポインタでの記述が複雑になってしまうため 同様に GearImpl を定義した。
 GearImpl は Context と Data Gear の型、実装の Data Gear 名を指定することで参照する。 
 
-ソースコード\ref{Gearef} は Gearef、GearImpl を用いずに書いた popSingleLinkedStack\_stub である。
-
-
-\begin{lstlisting}[frame=lrbt,label=ref,caption={Gearef、GearImplのないコード}]
-__code popSingleLinkedStack_stub(struct Context* context) {
-    SingleLinkedStack* stack = (SingleLinkedStack*)context->data[D_Stack]->Stack.stack->Stack.stack;
-    enum Code next = context->data[D_Stack]->Stack.next;
-    Data** O_data = &context->data[D_Stack]->Stack.data;
-    goto popSingleLinkedStack(context, stack, next, O_data);
-}
-\end{lstlisting}
-
 また、Code Gear は継続の際 meta へと goto する。
 Context はすべての Code Gear のリストを持っており、継続先の Code Gear のアドレスは
 enum で対応付けられた Code Gear のアドレスのリストを参照して継続を行う。
--- a/paper/interface.tex	Mon Jan 28 13:29:23 2019 +0900
+++ b/paper/interface.tex	Wed Jan 30 17:06:49 2019 +0900
@@ -1,9 +1,51 @@
-
 \chapter{Interface}
 Interface は Gears OS のモジュール化の仕組みである。 
 Interface は呼び出しの引数になる Data Gear の集合であり、そこで呼び出される Code Gear のエントリである。
 呼び出される Code Gear の引数となる Data Gear はここで全て定義される。
 
+Data Gear は、ノーマルレベルとメタレベルで見え方が異なる。
+ノーマルレベルの Code Gear では Data Gear の引数に見える。
+しかし、メタレベルでは Data Gear は Context が持つ構造体である。
+この見え方の違いを Meta Code Gear である stub Code Gear によって調整する必要がある。
+
+また、CbC は関数呼び出しと異なり、goto による継続で遷移を行う。
+このため CbC の継続にはスタックフレームがなく引数を格納する場所がない。
+
+Context は初期化の際に引数格納用の Data Gear の領域を確保する。
+Code Gear が継続する際にはこの領域に引数の Data Gear を格納する。
+この領域に確保された Data Gear へのアクセスは Interface の情報から行われる。
+
+
+ソースコード\ref{notref} は、pushSingleLinkedStack の stub Code Gear を含めたソースコードである。
+ノーマルレベルの Code Gear では Stack の push の操作は、
+push するデータと次の継続先の Code Gear という引数の集合のように見える。
+しかしメタレベルでは Context が
+
+\begin{lstlisting}[frame=lrbt,label=notref,caption={pop stub Code Gear}]
+__code stackTest1(struct Stack* stack) {
+    Node* node = new Node();
+    node->color = Red;
+    goto stack->push(node, stackTest2);
+}
+
+__code pushSingleLinkedStack_stub(struct Context* context) {
+    SingleLinkedStack* stack = (SingleLinkedStack*)context->data[D_Stack]->Stack.stack->Stack.stack;
+    Data* data = context->data[D_Stack]->Stack.data;
+    num Code next = context->data[D_Stack]->Stack.next;
+    goto pushSingleLinkedStack(context, stack, data, next);
+}
+
+__code pushSingleLinkedStack(struct SingleLinkedStack* stack, union Data* data, __code next(...)) {
+    Element* element = new Element();
+    element->next = stack->top;
+    element->data = data;
+    stack->top = element;
+    goto next(...);
+}
+\end{lstlisting}
+
+(もっと細かく書く)
+
 ソースコード\ref{interface}は Stack の Interface である。
 \_\_code で記述されているものは Stack が実装するべき push や pop などの Code Gear、
 union Data で記述されているものは、Stack の Code Gear の引数の Data Gear である。 
Binary file paper/master_paper.pdf has changed
--- a/paper/meta_computation.tex	Mon Jan 28 13:29:23 2019 +0900
+++ b/paper/meta_computation.tex	Wed Jan 30 17:06:49 2019 +0900
@@ -65,7 +65,7 @@
  \label{fig:IODataGear}
 \end{figure}
 
-リスト \ref{Gears_code} は Gears OS での Stack の操作の Code Gear の例である。
+ソースコード \ref{Gears_code} は Gears OS での Stack の操作の Code Gear の例である。
 popSingleLinkedStack での引数 stack が Input Data Gear、next は継続先の Code Gear のアドレス、
 next の引数の data が Output Data Gear、... は可変長引数であることを示している。
 pop の操作を行った後に goto next で引数で受けた次の Code Gear へと継続する。