Mercurial > hg > Papers > 2011 > nobu-prosym
annotate presen/index.html @ 57:ce844f6c504d
modify __rectype
author | Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 25 Dec 2011 04:28:23 +0900 |
parents | 06ce8fb8e278 |
children | 97457764428f |
rev | line source |
---|---|
54 | 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" |
2 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> | |
3 | |
4 <html xmlns="http://www.w3.org/1999/xhtml"> | |
5 | |
6 <head> | |
7 <style> | |
8 .center { | |
9 margin-left: auto; | |
10 margin-right: auto; | |
11 text-align: center; | |
12 } | |
13 .textcenter { | |
14 text-align: center; | |
15 } | |
16 .taninaritop { | |
17 margin: auto; | |
18 width: 95%; | |
19 font-weight: bold; | |
20 } | |
21 </style> | |
22 <title>2012/ 1/ 7</title> | |
23 <!-- metadata --> | |
24 <meta name="generator" content="S5" /> | |
25 <meta name="version" content="S5 1.1" /> | |
26 <meta name="presdate" content="20120107" /> | |
27 <meta name="author" content="Nobuyasu Oshiro" /> | |
28 <meta name="company" content="University of the Ryukyu" /> | |
29 <!-- meta temporary --> | |
30 <meta http-equiv="content-type" content="text/html; charset=utf-8" /> | |
31 <meta http-equiv="Content-Script-Type" content="text/javascript" /> | |
32 <meta http-equiv="Content-Style-Type" content="text/css" /> | |
33 <!-- configuration parameters --> | |
34 <meta name="defaultView" content="slideshow" /> | |
35 <meta name="controlVis" content="hidden" /> | |
36 <!-- configuration extensions --> | |
37 <meta name="tranSitions" content="true" /> | |
38 <meta name="fadeDuration" content="500" /> | |
39 <meta name="incrDuration" content="250" /> | |
40 <!-- configuration autoplay extension --> | |
41 <meta name="autoMatic" content="false" /> | |
42 <meta name="playLoop" content="true" /> | |
43 <meta name="playDelay" content="10" /> | |
44 <!-- configuration audio extension --> | |
45 <meta name="audioSupport" content="false" /> | |
46 <meta name="audioVolume" content="100" /> | |
47 <meta name="audioError" content="false" /> | |
48 <!-- configuration audio debug --> | |
49 <meta name="audioDebug" content="false" /> | |
50 <!-- style sheet links --> | |
51 <link rel="stylesheet" href="ui/default_utf/slides.css" type="text/css" media="projection" id="slideProj" /> | |
52 <link rel="stylesheet" href="ui/default_utf/outline.css" type="text/css" media="screen" id="outlineStyle" /> | |
53 <link rel="stylesheet" href="ui/default_utf/print.css" type="text/css" media="print" id="slidePrint" /> | |
54 <link rel="stylesheet" href="ui/default_utf/opera.css" type="text/css" media="projection" id="operaFix" /> | |
55 <!-- embedded styles --> | |
56 <style type="text/css" media="all"> | |
57 .imgcon {width: 100%; margin: 0 auto; padding: 0; text-align: center;} | |
58 #anim {width: 33%; height: 320px; position: relative;} | |
59 #anim img {position: absolute; top: 0px; left: 0px;} | |
60 </style> | |
61 <!-- S5 JS --> | |
62 <script src="ui/default_utf/slides.js" type="text/javascript"></script> | |
63 </head> | |
64 <body> | |
65 | |
66 <div class="layout"> | |
67 <div id="controls"><!-- DO NOT EDIT --></div> | |
68 <div id="currentSlide"><!-- DO NOT EDIT --></div> | |
69 <div id="header"></div> | |
70 <div id="footer"> | |
71 <h1>プログラミングシンポジウム: 2012/ 1/ 7</h1> | |
72 <h2>並列信頼研</h2> | |
73 </div> | |
74 </div> | |
75 | |
76 <div class="presentation"> | |
77 | |
78 <div class="slide"> | |
79 <h1>Continuation based Cの GCC 4.6 上の実装について</li> | |
80 <h3></h3> | |
81 <li>大城 信康</li> | |
82 <h4><a href="http://ie.u-ryukyu.ac.jp/" rel="external">琉球大学 並列信頼研究室</a></h4> | |
83 <div class="handout"></div> | |
84 </div> | |
85 <!-- PAGE --> | |
86 <div class="slide"> | |
87 <h1>目的と背景(1)</h1> | |
88 <li>当研究室ではコードセグメント単位で記述するプログラミング言語Continuation based C (以下CbC)という言語を開発している。</li> | |
89 <li>コードセグメントは並列実行の単位として使うことができ、プログラムの正しさを示す単位としても使用することができる。</li> | |
55
06ce8fb8e278
modify presen/index.html
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
54
diff
changeset
|
90 <li class="incremental">コードセグメントにより Many Core での並列実行を高い性能と高い信頼性で実現することができると考える。</li> |
54 | 91 </div> |
92 <!-- PAGE --> | |
93 <div class="slide"> | |
94 <h1>目的と背景(2)</h1> | |
95 <li>CbC のコンパイラは2008年に GCC 4.4 をベースとしたコンパイラが開発された。</li> | |
55
06ce8fb8e278
modify presen/index.html
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
54
diff
changeset
|
96 <li>GCC をベースとした CbC コンパイラは、修正・追加された最適化の機能を使用する為に、 GCC のアップデートに合わせ変更する必要がある。</li> |
54 | 97 <li class="incremental">本研究ではCbC コンパイラを GCC-4.6 へとアップデートを行い、Intel64 への対応するとともに CbC の拡張を行う。 </li> |
98 </div> | |
99 <!-- PAGE --> | |
100 <div class="slide"> | |
101 <h1>発表内容</h1> | |
102 <ol> | |
103 <li>CbC の紹介</li> | |
104 <li>GCC でのコンパイルの流れ</li> | |
105 <li>CbC の実装</li> | |
106 <!-- | |
107 <ul> | |
108 <li>Tail Call Elimination</li> | |
109 <li>goto シンタックスの追加</li> | |
110 <li>環境付き継続</li> | |
111 </ul> | |
112 --> | |
113 <li>Micro-C との性能比較</li> | |
114 <li>mercurial を用いたアップデートの方法</li> | |
115 <li>まとめ</li> | |
116 <ol> | |
117 </div> | |
118 <!-- PAGE --> | |
119 <div class="slide"> | |
120 <h1>Continuation based C </h1> | |
55
06ce8fb8e278
modify presen/index.html
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
54
diff
changeset
|
121 <h2>コードセグメント単位での記述と継続を基本としたプログラミング言語。</h2> |
06ce8fb8e278
modify presen/index.html
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
54
diff
changeset
|
122 <li>プログラムの記述は C の構文と同じだが、ループ制御や関数コールが取り除かれる。</li> |
06ce8fb8e278
modify presen/index.html
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
54
diff
changeset
|
123 <li>コードセグメント</li> |
06ce8fb8e278
modify presen/index.html
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
54
diff
changeset
|
124 <ul> |
06ce8fb8e278
modify presen/index.html
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
54
diff
changeset
|
125 <li>C の関数よりも細かい単位。</li> |
06ce8fb8e278
modify presen/index.html
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
54
diff
changeset
|
126 <li>コードセグメントの処理は最後に別のコードセグメントへ継続(goto)することで続いていく。</li> |
06ce8fb8e278
modify presen/index.html
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
54
diff
changeset
|
127 </ul> |
54 | 128 </div> |
129 <!-- PAGE --> | |
130 <div class="slide"> | |
131 <h1>Continuation based C </h1> | |
132 <small> | |
133 <table width=100% > | |
134 <tr> | |
135 <caption>階乗を求めるCbCのプログラム</caption> | |
136 <td width=50%> | |
137 <pre> | |
138 __code print_factorial(int prod) { | |
139 printf("factorial = %d\n",prod); | |
140 exit(0); | |
141 } | |
142 __code factorial0(int prod, int x) { | |
143 if ( x >= 1) { | |
144 goto factorial0(prod*x, x-1); | |
145 }else{ | |
146 goto print_factorial(prod); | |
147 } | |
148 } | |
149 </pre> | |
150 </td> | |
151 <td> | |
152 <pre> | |
153 __code factorial(int x) { | |
154 goto factorial0(1, x); | |
155 } | |
156 int main(int argc, char **argv) { | |
157 int i; | |
158 i = atoi(argv[1]); | |
159 goto factorial(i); | |
160 return 0; | |
161 } | |
162 </pre> | |
163 </td> | |
164 </tr> | |
165 </table> | |
166 </small> | |
167 </div> | |
168 <!-- PAGE --> | |
169 <div class="slide"> | |
170 <h1>Continuation Based C (軽量継続)</h1> | |
171 <li>関数コールが無い -> 呼び出し元への復帰がない</li> | |
172 <li>継続の際にスタックに載せるデータはコードセグメントへの引数だけとなる(軽量継続)。</li> | |
173 <!-- <li>スタックポインタの位置を変えずにすむ。</li> --> | |
174 <p style=" margin-right:auto; margin-left:auto;"> | |
175 <img class="scale" src="./pix/cs_stack.png" style="height: 7em;"> | |
176 </p> | |
177 <li class="incremental">より高度に最適化されたプログラミングが可能になる。</li> | |
178 </div> | |
179 <!-- PAGE --> | |
180 <div class="slide"> | |
181 <h1>Continuation Based C</h1> | |
182 <li></li> | |
183 </div> | |
184 <!-- PAGE --> | |
185 <div class="slide"> | |
186 <h1>GCC によるコンパイル</h1> | |
187 <li>GCC についての簡単な説明を行う...</li> | |
188 <img src="./pix/ir.png" style="height: 6em;"> | |
189 <li>CbCの実装は主に Parser の部分と RTL を生成する部分に行われる。</li> | |
190 </div> | |
191 <!-- PAGE --> | |
192 <div class="slide"> | |
193 <h1>CbC の実装</h1> | |
194 <ul> | |
195 <li>シンタックスの追加</li> | |
196 <li>fastcall属性の付与</li> | |
197 <li>Tail Call Elimination</li> | |
198 <li>環境付き継続</li> | |
199 </ul> | |
200 </div> | |
201 <!-- PAGE --> | |
202 <div class="slide"> | |
203 <h1>シンタックスの追加</h1> | |
204 <ul> | |
205 <li>__code でコードセグメントの宣言</li> | |
206 <li>goto にコードセグメントへの継続処理を追加</li> | |
207 </ul> | |
208 <li></li> | |
209 </div> | |
210 <!-- PAGE --> | |
211 <div class="slide"> | |
212 <h1>シンタックスの追加</h1> | |
55
06ce8fb8e278
modify presen/index.html
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
54
diff
changeset
|
213 <h2>__code でコードセグメントの宣言</h2> |
54 | 214 <ul> |
215 <li>__code 用idとkeywordを作成。</li> | |
55
06ce8fb8e278
modify presen/index.html
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
54
diff
changeset
|
216 <li>戻り値が無い為、コードセグメントは void 型の関数で作成される木と同じ木が作られる。</li> |
54 | 217 </ul> |
218 </div> | |
219 <!-- PAGE --> | |
220 <div class="slide"> | |
221 <h1>シンタックスの追加</h1> | |
55
06ce8fb8e278
modify presen/index.html
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
54
diff
changeset
|
222 <h2>goto シンタックスの追加</h2> |
54 | 223 <ul> |
224 <li>通常の goto に加え、コードセグメントを呼び出す処理を追加。</li> | |
225 <li>コードセグメントへのgoto後は、 return の処理を自動で追加。</li> | |
226 </ul> | |
55
06ce8fb8e278
modify presen/index.html
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
54
diff
changeset
|
227 <table border=1 width=100%> |
06ce8fb8e278
modify presen/index.html
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
54
diff
changeset
|
228 <tr class="center"> |
06ce8fb8e278
modify presen/index.html
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
54
diff
changeset
|
229 <small> |
06ce8fb8e278
modify presen/index.html
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
54
diff
changeset
|
230 <td>実際のコード </td> |
06ce8fb8e278
modify presen/index.html
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
54
diff
changeset
|
231 <td>GCC 内で処理されるコード</td> |
06ce8fb8e278
modify presen/index.html
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
54
diff
changeset
|
232 </small> |
06ce8fb8e278
modify presen/index.html
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
54
diff
changeset
|
233 </tr> |
06ce8fb8e278
modify presen/index.html
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
54
diff
changeset
|
234 <tr style="margin-top: auto;"> |
06ce8fb8e278
modify presen/index.html
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
54
diff
changeset
|
235 <td> |
06ce8fb8e278
modify presen/index.html
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
54
diff
changeset
|
236 <pre> |
06ce8fb8e278
modify presen/index.html
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
54
diff
changeset
|
237 goto factorial0(1, x); |
06ce8fb8e278
modify presen/index.html
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
54
diff
changeset
|
238 </pre> |
06ce8fb8e278
modify presen/index.html
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
54
diff
changeset
|
239 </td> |
06ce8fb8e278
modify presen/index.html
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
54
diff
changeset
|
240 <td> |
06ce8fb8e278
modify presen/index.html
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
54
diff
changeset
|
241 <pre> |
06ce8fb8e278
modify presen/index.html
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
54
diff
changeset
|
242 goto factorial0(1, x); |
06ce8fb8e278
modify presen/index.html
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
54
diff
changeset
|
243 return; |
06ce8fb8e278
modify presen/index.html
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
54
diff
changeset
|
244 </pre> |
06ce8fb8e278
modify presen/index.html
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
54
diff
changeset
|
245 </td> |
06ce8fb8e278
modify presen/index.html
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
54
diff
changeset
|
246 </tr> |
06ce8fb8e278
modify presen/index.html
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
54
diff
changeset
|
247 </table> |
54 | 248 </div> |
249 <!-- PAGE --> | |
250 <div class="slide"> | |
55
06ce8fb8e278
modify presen/index.html
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
54
diff
changeset
|
251 <h1>fastcall属性の付与</h1> |
06ce8fb8e278
modify presen/index.html
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
54
diff
changeset
|
252 <li>i386 において関数呼び出しの際、引数渡しをできるだけレジスタを用いるGCCの拡張機能。</li> |
06ce8fb8e278
modify presen/index.html
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
54
diff
changeset
|
253 <li>コードセグメントは処理が細かい為、継続の回数が多くなる。引数をレジスタ渡しにすることで速度向上を狙う。</li> |
06ce8fb8e278
modify presen/index.html
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
54
diff
changeset
|
254 <pre> |
06ce8fb8e278
modify presen/index.html
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
54
diff
changeset
|
255 if(!TARGET_64BIT) { |
06ce8fb8e278
modify presen/index.html
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
54
diff
changeset
|
256 attrs = build_tree_list (get_identifier("fastcall"), NULL_TREE); |
06ce8fb8e278
modify presen/index.html
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
54
diff
changeset
|
257 declspecs_add_attrs(specs, attrs); |
06ce8fb8e278
modify presen/index.html
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
54
diff
changeset
|
258 } |
06ce8fb8e278
modify presen/index.html
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
54
diff
changeset
|
259 </pre> |
06ce8fb8e278
modify presen/index.html
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
54
diff
changeset
|
260 <li>Intel64 に対してはfastcallは標準でつくようになっている。</li> |
54 | 261 </div> |
262 <!-- PAGE --> | |
263 <div class="slide"> | |
264 <h1></h1> | |
265 <li></li> | |
266 </div> | |
267 <!-- PAGE --> | |
268 <div class="slide"> | |
269 <h1></h1> | |
57
ce844f6c504d
modify __rectype
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
270 <pre> |
ce844f6c504d
modify __rectype
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
271 typedef struct node { |
ce844f6c504d
modify __rectype
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
272 selftype *right; |
ce844f6c504d
modify __rectype
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
273 selftype *left; |
ce844f6c504d
modify __rectype
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
274 }*NODE |
ce844f6c504d
modify __rectype
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
275 </pre> |
ce844f6c504d
modify __rectype
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
276 |
54 | 277 <li></li> |
57
ce844f6c504d
modify __rectype
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
278 |
54 | 279 </div> |
280 <!-- PAGE --> | |
281 <div class="slide"> | |
282 <h1>環境付き継続とは</h1> | |
283 <li>コードセグメントを呼び出した C の関数に戻る機能</li> | |
284 <li></li> | |
285 </div> | |
286 <!-- PAGE --> | |
287 <div class="slide"> | |
288 <h1>環境付き継続:クロージャでの実装について</h1> | |
289 <li>『GCC 4.6 と Lion の組合せでは Closure は正しく動作していないことが分かった.』<br>間違い</li> | |
290 <li>訂正</li> | |
291 <ul> | |
292 <li class="incremental">GCC 4.6 への CbC の実装のせいでクロージャがうまくできていなかったことが判明。</li> | |
293 <li class="incremental">GCC 4.6 と Lion でのクロージャは特に問題はない。</li> | |
294 </ul> | |
295 </div> | |
296 <!-- PAGE --> | |
297 <div class="slide"> | |
298 <h1>環境付き継続:クロージャでの実装の問題点</h1> | |
299 <li></li> | |
300 <li></li> | |
301 </div> | |
302 <!-- PAGE --> | |
303 <div class="slide"> | |
304 <h1>環境付き継続: setjmp での実装</h1> | |
305 <li>setjmp での実装</li> | |
306 <small> | |
307 <pre> | |
308 ({ | |
309 int a = setjmp(env); | |
310 int retval; | |
311 void _cbc_internal_return(int retval_, jmp_buf _envp){ | |
312 retval = retval_; | |
313 longjmp(_envp, retval); | |
314 } | |
315 if (a) { | |
316 return retval; | |
317 } | |
318 _cbc_internal_return; | |
319 }) | |
320 </pre> | |
321 </small> | |
322 <li></li> | |
323 </div> | |
324 <!-- PAGE --> | |
325 <div class="slide"> | |
326 <h1>環境付き継続: setjmp での実装の問題</h1> | |
327 <li>GCC 内で setjmp を生成する関数を作る必要がある。</li> | |
328 <li>戻値の型が int </li> | |
329 <ul> | |
330 <li>構造体等ポインタの場合使えない。</li> | |
331 </ul> | |
332 <li class="incremental">setjmp での実装はあまり実用的ではない。</li> | |
333 </div> | |
334 <!-- PAGE --> | |
335 <div class="slide"> | |
57
ce844f6c504d
modify __rectype
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
336 <h1>__rectype の実装</h1> |
ce844f6c504d
modify __rectype
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
337 <li>通常、関数の引数に関数ポインタを渡した際は以下の様に使われる。</li> |
ce844f6c504d
modify __rectype
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
338 <small> |
ce844f6c504d
modify __rectype
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
339 <pre> |
ce844f6c504d
modify __rectype
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
340 void factorial(int n, int result, void(*print)()){ |
ce844f6c504d
modify __rectype
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
341 : |
ce844f6c504d
modify __rectype
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
342 (*print)(n,result,print,exit1, envp); |
ce844f6c504d
modify __rectype
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
343 } |
ce844f6c504d
modify __rectype
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
344 </pre> |
ce844f6c504d
modify __rectype
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
345 </small> |
ce844f6c504d
modify __rectype
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
346 <li>以下の様に扱えるようにしたい。</li> |
ce844f6c504d
modify __rectype
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
347 <small> |
ce844f6c504d
modify __rectype
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
348 <pre> |
ce844f6c504d
modify __rectype
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
349 void factorial(int n, int result, void *print){ |
ce844f6c504d
modify __rectype
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
350 : |
ce844f6c504d
modify __rectype
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
351 (*print)(n,result,print,exit1, envp); |
ce844f6c504d
modify __rectype
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
352 } |
ce844f6c504d
modify __rectype
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
353 </pre> |
ce844f6c504d
modify __rectype
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
354 </small> |
54 | 355 </div> |
356 <!-- PAGE --> | |
357 <div class="slide"> | |
57
ce844f6c504d
modify __rectype
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
358 <h1>__rectype の実装</h1> |
ce844f6c504d
modify __rectype
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
359 <li>そこで、__rectype という予約後を作り、以下の宣言を行えるようにした。</li> |
ce844f6c504d
modify __rectype
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
360 <pre> |
ce844f6c504d
modify __rectype
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
361 __code factorial(int n, int result, __rectype *print) { |
ce844f6c504d
modify __rectype
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
362 : |
ce844f6c504d
modify __rectype
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
363 (*print)(n,result,print,exit1, envp); |
ce844f6c504d
modify __rectype
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
364 } |
ce844f6c504d
modify __rectype
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
365 </pre> |
54 | 366 </div> |
367 <!-- PAGE --> | |
368 <div class="slide"> | |
369 <h1></h1> | |
370 <li></li> | |
371 </div> | |
372 <!-- PAGE --> | |
373 </div> | |
374 </body> | |
375 </html> |