Mercurial > hg > Papers > 2018 > mitsuki-sigos
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 を生成できるようにし、ユーザーがメタレベルの処理を意識せずにコードを記述できるようにする。 |