comparison Slide/prosym.md @ 25:39f38ed9c7a2

fix
author mir3636
date Fri, 19 Jan 2018 18:33:56 +0900
parents 8edb996bce46
children 8a177b87a3f7
comparison
equal deleted inserted replaced
24:8edb996bce46 25:39f38ed9c7a2
138 } Stack; 138 } Stack;
139 ``` 139 ```
140 140
141 # Interface 141 # Interface
142 142
143 - impliment の例 143 - implement の例
144
145 ```impl 144 ```impl
146 Stack* createSingleLinkedStack(struct Context* context) { 145 Stack* createSingleLinkedStack(struct Context* context) {
147 struct Stack* stack = new Stack(); 146 struct Stack* stack = new Stack();
148 struct SingleLinkedStack* singleLinkedStack = new SingleLinkedStack(); 147 struct SingleLinkedStack* singleLinkedStack = new SingleLinkedStack();
149 stack->stack = (union Data*)singleLinkedStack; 148 stack->stack = (union Data*)singleLinkedStack;
156 stack->isEmpty = C_isEmptySingleLinkedStack; 155 stack->isEmpty = C_isEmptySingleLinkedStack;
157 stack->clear = C_clearSingleLinkedStack; 156 stack->clear = C_clearSingleLinkedStack;
158 return stack; 157 return stack;
159 } 158 }
160 159
161 __code pushSingleLinkedStack(struct 160 __code pushSingleLinkedStack(struct SingleLinkedStack* stack, union Data* data, __code next(...)) {
162 SingleLinkedStack* stack,union Data* data, __code next(...)) {
163 Element* element = new Element(); 161 Element* element = new Element();
164 element->next = stack->top; 162 element->next = stack->top;
165 element->data = data; 163 element->data = data;
166 stack->top = element; 164 stack->top = element;
167 goto next(...); 165 goto next(...);
197 195
198 # Context、stub Code Gear の自動生成 196 # Context、stub Code Gear の自動生成
199 - Gears OS ではノーマルレベルの計算の他に Context や stub などのメタ計算を記述する必要がある。 197 - Gears OS ではノーマルレベルの計算の他に Context や stub などのメタ計算を記述する必要がある。
200 - 現在の CbC で Gears OS を記述すると、このメタ計算の記述も行わなくてはならず、これには多くの労力を要する。 198 - 現在の CbC で Gears OS を記述すると、このメタ計算の記述も行わなくてはならず、これには多くの労力を要する。
201 - この記述を助けるために Context を生成する generate_context と stub Code Gear を生成する generate_stub を perl スクリプトで作成した。 199 - この記述を助けるために Context を生成する generate_context と stub Code Gear を生成する generate_stub を perl スクリプトで作成した。
200 <div style="text-align: center;">
201  <img src="./fig/generate_context.pdf" alt="generate_context" width="900">
202 </div>
202 203
203 204
204 # stub Code Gear の生成 205 # stub Code Gear の生成
205 - stub Code Gear は Code Gear 間の継続に挟まれ、Code Gear が必要な Data Gear を Context から取り出す処理を行うものである。 206 - stub Code Gear は Code Gear 間の継続に挟まれ、Code Gear が必要な Data Gear を Context から取り出す処理を行うものである。
206 - stub Code Gear は Code Gear 毎に記述する必要があり、そのCode Gear の引数を見て取り出す Data Gear を選択する。 207 - stub Code Gear は Code Gear 毎に記述する必要があり、そのCode Gear の引数を見て取り出す Data Gear を選択する。
207 - generate_stub は指定された cbc ファイルの __code型である Code Gear を取得。 208 - generate_stub は指定された cbc ファイルの __code で記述された Code Gear を取得。
208 - 引数と interface を照らし合わせ、Gearef または GearImpl を決定する。 209 - Code Gear の引数と interface を照らし合わせ、Gearef または GearImpl を決定する。
209 - cbc ファイルのから、生成した stub Code Gear を加えて、c ファイルを生成する。 210 - cbc ファイルの Code Gear から、生成した stub Code Gear を加えたファイルを生成する。
210 211
211 ```stub 212 ```stub
212 __code clearSingleLinkedStack(struct Context *context,struct SingleLinkedStack* stack,enum Code next) { 213 __code clearSingleLinkedStack(struct Context *context,struct SingleLinkedStack* stack,enum Code next) {
213 stack->top = NULL; 214 stack->top = NULL;
214 goto meta(context, next); 215 goto meta(context, next);
222 ``` 223 ```
223 224
224 # Context の生成 225 # Context の生成
225 226
226 - Context は Meta Data Gear に相当し、Code Gear や Data Gear を管理している。 227 - Context は Meta Data Gear に相当し、Code Gear や Data Gear を管理している。
227 - generate_context は context.h から Data Gear、c ファイルから Code Gear を取得。 228 - generate_context は context.h から Data Gear、generate_stub から生成されたファイルから Code Gear を取得し、以下を生成する。
228 - 取得した Code/Data Gear の enum の定義は enumCode.h、enumData.h に生成される。 229 - リストで管理している Code/Data の名前とポインタを対応させるための enumCode.h、enumData.h
229 - Code/Data Gear の名前とポインタの対応は この enum と関数ポインタによって表現される。 230 - 取得した Code/Data Gear から Context の生成を行う target-context
230 - generate_context は取得した Code/Data Gear から Context の生成を行うコードを生成する。 231 - Context を生成する際の Data Gear の Allocation を行う dataGearInit.c
231 - Context には Allocation で生成した Data Gear へのポインタも格納されているが、Data Gear の Allocation を行うコードは dataGearInit.c に生成される。 232
232 - これらを自動生成することで Gears OS の記述量を約半分にすることができます。 233 <div style="text-align: center;">
233 <img src="./fig/generate_context.svg" alt="message" width="800" > 234  <img src="./fig/generate_context3.pdf" alt="generate_context3" width="900">
234 235 </div>
235 # 比較
236 236
237 # 今後の課題 237 # 今後の課題
238 - 本研究では interface の記述、CbC ファイルから Gears OS の記述に必要な Context と stub の生成を行う perl スクリプトの生成を行なった。 238 - 本研究では interface の記述、CbC ファイルから Gears OS の記述に必要な Context と stub の生成を行う perl スクリプトの生成を行なった。
239 - これにより Gears OS のコードの煩雑さは改善され、ユーザーは Context への接続を意識する必要がなくなった。 239 - これにより Gears OS のコードの煩雑さは改善され、ユーザーは Context への接続を意識する必要がなくなった。
240 - 今後の課題は Code Gear からメタ計算を行う meta Code Gear を生成できるようにし、ユーザーがメタレベルの処理を意識せずにコードを記述できるようにする。 240 - 今後の課題は Code Gear からメタ計算を行う meta Code Gear を生成できるようにし、ユーザーがメタレベルの処理を意識せずにコードを記述できるようにする。