# HG changeset patch # User anatofuz # Date 1550030276 -32400 # Node ID 6987b8fb2feacd885bd9d3fbd42fb7e1b87edd35 # Parent 8b137e2d02bb65176183fb22666c920d49506248 update chapter2 diff -r 8b137e2d02bb -r 6987b8fb2fea paper/chapter2.tex --- a/paper/chapter2.tex Tue Feb 12 20:45:30 2019 +0900 +++ b/paper/chapter2.tex Wed Feb 13 12:57:56 2019 +0900 @@ -21,6 +21,9 @@ CodeGearはC言語の関数宣言の型名の代わりに \_\_codeと書く事で宣言出来る。 \_\_codeはCbCコンパイラでの扱いはvoidと同じ型として扱うが、 CbCプログラミングではCodeGearである事を示す、 識別子として利用する。 +CodeGearは通常のC言語の関数とは異なり、 返り値を持たない。 +そのためreturn文や返り値の型などの情報が存在しない。 + CodeGear間の移動はgoto文で行い、 gotoの後に対応するCodeGear名を記述することで遷移する。 通常C言語の関数呼び出しでは、 スタックポインタを操作し、 ローカル変数や、 レジスタ情報をスタックに保存する。 これらは通常アセンブラのcall命令として処理される。 @@ -29,8 +32,7 @@ この際Cの関数呼び出しとは異なり、 プロラムカウンタを操作するのみのjmp命令として処理される。 通常Schemeのcall/ccなどの継続と呼ばれる処理は、 現在のプログラムまでの位置や情報を、 環境として所持した状態で遷移する。 CbCの場合これら環境を持たず遷移する為、 通常の継続と比較して軽量であるから、 軽量継続であると言える。 -CbCは軽量継続を利用するためにレジスタレベルでの実装が可能となり、 Cよりも低級な言語と言える。 - +軽量継続を利用する為、 ループ文を軽量継続の再帰呼び出しなどで実現する事が可能となる。 CodeGear間の入出力の受け渡しは引数を利用して行う。 diff -r 8b137e2d02bb -r 6987b8fb2fea paper/main.pdf Binary file paper/main.pdf has changed