comparison Slide/prosym.html @ 25:39f38ed9c7a2

fix
author mir3636
date Fri, 19 Jan 2018 18:33:56 +0900
parents 8edb996bce46
children da3022f9122e
comparison
equal deleted inserted replaced
24:8edb996bce46 25:39f38ed9c7a2
84 84
85 <div class='slide '> 85 <div class='slide '>
86 <!-- === begin markdown block === 86 <!-- === begin markdown block ===
87 87
88 generated by markdown/1.2.0 on Ruby 2.4.0 (2016-12-24) [x86_64-darwin16] 88 generated by markdown/1.2.0 on Ruby 2.4.0 (2016-12-24) [x86_64-darwin16]
89 on 2018-01-19 14:50:21 +0900 with Markdown engine kramdown (1.13.2) 89 on 2018-01-19 18:24:07 +0900 with Markdown engine kramdown (1.13.2)
90 using options {} 90 using options {}
91 --> 91 -->
92 92
93 <!-- _S9SLIDE_ --> 93 <!-- _S9SLIDE_ -->
94 <h1 id="section">研究目的</h1> 94 <h1 id="section">研究目的</h1>
293 </div> 293 </div>
294 <div class='slide '> 294 <div class='slide '>
295 <!-- _S9SLIDE_ --> 295 <!-- _S9SLIDE_ -->
296 <h1 id="interface-1">Interface</h1> 296 <h1 id="interface-1">Interface</h1>
297 297
298 <ul> 298 <ul lang="impl">
299 <li>impliment の例</li> 299 <li>implement の例</li>
300 </ul> 300 </ul>
301 301 <pre><code>Stack* createSingleLinkedStack(struct Context* context) {
302 <pre lang="impl"><code>Stack* createSingleLinkedStack(struct Context* context) {
303 struct Stack* stack = new Stack(); 302 struct Stack* stack = new Stack();
304 struct SingleLinkedStack* singleLinkedStack = new SingleLinkedStack(); 303 struct SingleLinkedStack* singleLinkedStack = new SingleLinkedStack();
305 stack-&gt;stack = (union Data*)singleLinkedStack; 304 stack-&gt;stack = (union Data*)singleLinkedStack;
306 singleLinkedStack-&gt;top = NULL; 305 singleLinkedStack-&gt;top = NULL;
307 stack-&gt;push = C_pushSingleLinkedStack; 306 stack-&gt;push = C_pushSingleLinkedStack;
312 stack-&gt;isEmpty = C_isEmptySingleLinkedStack; 311 stack-&gt;isEmpty = C_isEmptySingleLinkedStack;
313 stack-&gt;clear = C_clearSingleLinkedStack; 312 stack-&gt;clear = C_clearSingleLinkedStack;
314 return stack; 313 return stack;
315 } 314 }
316 315
317 __code pushSingleLinkedStack(struct 316 __code pushSingleLinkedStack(struct SingleLinkedStack* stack, union Data* data, __code next(...)) {
318 SingleLinkedStack* stack,union Data* data, __code next(...)) {
319 Element* element = new Element(); 317 Element* element = new Element();
320 element-&gt;next = stack-&gt;top; 318 element-&gt;next = stack-&gt;top;
321 element-&gt;data = data; 319 element-&gt;data = data;
322 stack-&gt;top = element; 320 stack-&gt;top = element;
323 goto next(...); 321 goto next(...);
364 <ul> 362 <ul>
365 <li>Gears OS ではノーマルレベルの計算の他に Context や stub などのメタ計算を記述する必要がある。</li> 363 <li>Gears OS ではノーマルレベルの計算の他に Context や stub などのメタ計算を記述する必要がある。</li>
366 <li>現在の CbC で Gears OS を記述すると、このメタ計算の記述も行わなくてはならず、これには多くの労力を要する。</li> 364 <li>現在の CbC で Gears OS を記述すると、このメタ計算の記述も行わなくてはならず、これには多くの労力を要する。</li>
367 <li>この記述を助けるために Context を生成する generate_context と stub Code Gear を生成する generate_stub を perl スクリプトで作成した。</li> 365 <li>この記述を助けるために Context を生成する generate_context と stub Code Gear を生成する generate_stub を perl スクリプトで作成した。</li>
368 </ul> 366 </ul>
367 <div style="text-align: center;">
368  <img src="./fig/generate_context.pdf" alt="generate_context" width="900" />
369 </div>
369 370
370 371
371 </div> 372 </div>
372 <div class='slide '> 373 <div class='slide '>
373 <!-- _S9SLIDE_ --> 374 <!-- _S9SLIDE_ -->
374 <h1 id="stub-code-gear-">stub Code Gear の生成</h1> 375 <h1 id="stub-code-gear-">stub Code Gear の生成</h1>
375 <ul> 376 <ul>
376 <li>stub Code Gear は Code Gear 間の継続に挟まれ、Code Gear が必要な Data Gear を Context から取り出す処理を行うものである。</li> 377 <li>stub Code Gear は Code Gear 間の継続に挟まれ、Code Gear が必要な Data Gear を Context から取り出す処理を行うものである。</li>
377 <li>stub Code Gear は Code Gear 毎に記述する必要があり、そのCode Gear の引数を見て取り出す Data Gear を選択する。</li> 378 <li>stub Code Gear は Code Gear 毎に記述する必要があり、そのCode Gear の引数を見て取り出す Data Gear を選択する。</li>
378 <li>generate_stub は指定された cbc ファイルの __code型である Code Gear を取得。</li> 379 <li>generate_stub は指定された cbc ファイルの __code で記述された Code Gear を取得。</li>
379 <li>引数と interface を照らし合わせ、Gearef または GearImpl を決定する。</li> 380 <li>Code Gear の引数と interface を照らし合わせ、Gearef または GearImpl を決定する。</li>
380 <li>cbc ファイルのから、生成した stub Code Gear を加えて、c ファイルを生成する。</li> 381 <li>cbc ファイルの Code Gear から、生成した stub Code Gear を加えたファイルを生成する。</li>
381 </ul> 382 </ul>
382 383
383 <pre lang="stub"><code>__code clearSingleLinkedStack(struct Context *context,struct SingleLinkedStack* stack,enum Code next) { 384 <pre lang="stub"><code>__code clearSingleLinkedStack(struct Context *context,struct SingleLinkedStack* stack,enum Code next) {
384 stack-&gt;top = NULL; 385 stack-&gt;top = NULL;
385 goto meta(context, next); 386 goto meta(context, next);
398 <!-- _S9SLIDE_ --> 399 <!-- _S9SLIDE_ -->
399 <h1 id="context--1">Context の生成</h1> 400 <h1 id="context--1">Context の生成</h1>
400 401
401 <ul> 402 <ul>
402 <li>Context は Meta Data Gear に相当し、Code Gear や Data Gear を管理している。</li> 403 <li>Context は Meta Data Gear に相当し、Code Gear や Data Gear を管理している。</li>
403 <li>generate_context は context.h から Data Gear、c ファイルから Code Gear を取得。</li> 404 <li>generate_context は context.h から Data Gear、generate_stub から生成されたファイルから Code Gear を取得し、以下を生成する。
404 <li>取得した Code/Data Gear の enum の定義は enumCode.h、enumData.h に生成される。</li> 405 <ul>
405 <li>Code/Data Gear の名前とポインタの対応は この enum と関数ポインタによって表現される。</li> 406 <li>Context が持つ Code/Data Gear のリスト の Code/Data Gear 名とポインタを対応させるための enum の定義を記述した enumCode.h、enumData.h</li>
406 <li>generate_context は取得した Code/Data Gear から Context の生成を行うコードを生成する。</li> 407 <li>取得した Code/Data Gear から Context の生成を行う target-context</li>
407 <li>Context には Allocation で生成した Data Gear へのポインタも格納されているが、Data Gear の Allocation を行うコードは dataGearInit.c に生成される。</li> 408 <li>Context を生成する際に Data Gear の Allocation を行う dataGearInit.c</li>
408 <li>これらを自動生成することで Gears OS の記述量を約半分にすることができます。 409 </ul>
409 <img src="./fig/generate_context.svg" alt="message" width="800" /></li> 410 </li>
410 </ul> 411 </ul>
411 412
412 413 <div style="text-align: center;">
413 </div> 414  <img src="./fig/generate_context3.pdf" alt="generate_context3" width="900" />
414 <div class='slide '> 415 </div>
415 <!-- _S9SLIDE_ --> 416
416 <h1 id="section-2">比較</h1> 417
417 418 </div>
418 419 <div class='slide '>
419 </div> 420 <!-- _S9SLIDE_ -->
420 <div class='slide '> 421 <h1 id="section-2">今後の課題</h1>
421 <!-- _S9SLIDE_ -->
422 <h1 id="section-3">今後の課題</h1>
423 <ul> 422 <ul>
424 <li>本研究では interface の記述、CbC ファイルから Gears OS の記述に必要な Context と stub の生成を行う perl スクリプトの生成を行なった。</li> 423 <li>本研究では interface の記述、CbC ファイルから Gears OS の記述に必要な Context と stub の生成を行う perl スクリプトの生成を行なった。</li>
425 <li>これにより Gears OS のコードの煩雑さは改善され、ユーザーは Context への接続を意識する必要がなくなった。</li> 424 <li>これにより Gears OS のコードの煩雑さは改善され、ユーザーは Context への接続を意識する必要がなくなった。</li>
426 <li>今後の課題は Code Gear からメタ計算を行う meta Code Gear を生成できるようにし、ユーザーがメタレベルの処理を意識せずにコードを記述できるようにする。</li> 425 <li>今後の課題は Code Gear からメタ計算を行う meta Code Gear を生成できるようにし、ユーザーがメタレベルの処理を意識せずにコードを記述できるようにする。</li>
427 <li>また、今回 perl スクリプトによって Context や stub の生成を行なったが、LLVM/clang 上で実装しコンパイラで直接 CbC を実行できるようにすることを目的とする。</li> 426 <li>また、今回 perl スクリプトによって Context や stub の生成を行なったが、LLVM/clang 上で実装しコンパイラで直接 CbC を実行できるようにすることを目的とする。</li>