changeset 21:2f235b4308d2

update
author mir3636
date Thu, 31 Jan 2019 03:56:37 +0900
parents 1c7e6703724a
children d5f62ca8d3e9
files paper/generate_code.tex paper/master_paper.pdf
diffstat 2 files changed, 27 insertions(+), 17 deletions(-) [+]
line wrap: on
line diff
--- a/paper/generate_code.tex	Wed Jan 30 20:11:35 2019 +0900
+++ b/paper/generate_code.tex	Thu Jan 31 03:56:37 2019 +0900
@@ -10,8 +10,8 @@
 
 \section{Meta Code Gear の生成}
 
-stub Code Gear は Code Gear 間の継続に挟まれる 必要な Data Gear を Context から参照し、
-継続する Code Gear へと渡すための Meta Code Gear である。
+stub Code Gear は Code Gear 間の継続に挟まれる Meta Code Gear である。
+必要な Data Gear を Context から参照し、継続する Code Gear へと渡すための Meta Code Gear である。
 Code Gear 毎に記述する必要があり、継続する Code Gear の引数を見て取り出す Data Gear を選択する。
 stub Code Gear はユーザーが任意に記述することも出来るが、Meta を扱うため自動生成を行いたい。
 そのため、stub Code Gear を 自動生成する generate stub を Perl スクリプトで作成した。
@@ -22,6 +22,22 @@
 この Code Gear を generate stub によって変換、
 stub Code Gear の生成を行なったコードがソースコード \ref{MetaCodeGear} である。
 
+生成された stub  Code Gear は、
+継続先の Code Gear が引数で指定した Input Data Gear、Output Data Gear を Context から参照している。
+Gearef は Context から Data Gear を参照するためのマクロである。
+ソースコード\ref{noref} はマクロを用いなかった場合の pop stack の stub Code Gear である。
+Context には Allocation 等で生成した Data Gear へのポインタが格納されている。
+Code Gear が Context にアクセスする際、
+ポインタを使用してデータを取り出すため煩雑なコードとなる。
+そこで Code Gear がデータを参照するための Gearef というマクロを定義した。
+Gearef は Context から Interface の引数格納用の Data Gear を取り出す。
+Gearef に Context と Interface の型を渡すことでデータの参照が行える。
+
+GearImpl マクロは Interface の型に包まれた Data Gear から
+実装の Data Gear を取り出すためのマクロである。
+実装の Data Gear を取り出す際も、ポインタでの記述が複雑になってしまうため 同様に GearImpl を定義した。
+GearImpl は Context と Interface の型、実装の Data Gear 名を指定することで参照する。
+
 \begin{lstlisting}[frame=lrbt,label=MetaCodeGear,caption={\footnotesize Stack pop の変換}]
 
 __code popSingleLinkedStack_stub(struct Context* context) {
@@ -49,23 +65,17 @@
 
 \end{lstlisting}
 
-生成された stub  Code Gear は、
-継続先が引数で指定した Input Code Gear、Output Code Gear を Context から参照している。
-Gearef は Context から Data Gear を参照するためのマクロである。
-Context には Allocation 等で生成した Data Gear へのポインタが格納されている。
-Code Gear が Context にアクセスする際、
-ポインタを使用してデータを取り出すため煩雑なコードとなる。
-そこで Code Gear がデータを参照するための Gearef というマクロを定義した。
-Gearef は Context から Interface の引数格納用の Data Gear を取り出す。
-Gearef に Context と Data Gear の型を渡すことでデータの参照が行える。
-
-GearImpl マクロは Interface の方に包まれた Data Gear から
-実装の Data Gear を取り出すためのマクロである。
-実装の Data Gear を取り出す際も、ポインタでの記述が複雑になってしまうため 同様に GearImpl を定義した。
-GearImpl は Context と Data Gear の型、実装の Data Gear 名を指定することで参照する。 
+\begin{lstlisting}[frame=lrbt,label=noref,caption={マクロを用いない stub Code Gear}]
+__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 のアドレスは
+Context はすべての Code Gear のリストを持っており、継続先の Code Gear へは
 enum で対応付けられた Code Gear のアドレスのリストを参照して継続を行う。
 この meta もスクリプトにより自動生成される。
 
Binary file paper/master_paper.pdf has changed