Mercurial > hg > Papers > 2019 > anatofuz-thesis
changeset 28:f6a579a77708
update
author | anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 12 Feb 2019 16:37:57 +0900 |
parents | da266bef2120 |
children | 96e9cf9c2ea2 |
files | paper/chapter3.tex paper/main.pdf |
diffstat | 2 files changed, 15 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/paper/chapter3.tex Tue Feb 12 14:03:06 2019 +0900 +++ b/paper/chapter3.tex Tue Feb 12 16:37:57 2019 +0900 @@ -20,9 +20,24 @@ CbCではC言語の関数の代わりに CodeGear を導入する。 CodeGearはC言語の関数宣言の型名の代わりに \_\_codeと書く事で宣言出来る。 \_\_codeはCbCコンパイラでの扱いはvoidと同じ型として扱うが、 CbCプログラミングではCodeGearである事を示す、 識別子として利用する。 + CodeGear間の移動はgoto文で行い、 gotoの後に対応するCodeGear名を記述することで遷移する。 +通常C言語の関数呼び出しでは、 スタックポインタを操作し、 ローカル変数や、 レジスタ情報をスタックに保存する。 +これらは通常アセンブラのcall命令として処理される。 + +CbCの場合、 スタックフレームを操作せず、 レジスタの値を変更せずに次のCodeGearに遷移する。 +この際Cの関数呼び出しとは異なり、 プログラムカウンタを操作するのみのjmp命令として処理される。 +通常Schemeのcall/ccなどの継続と呼ばれる処理は、 現在のプログラムまでの位置や情報を、 環境として所持した状態で遷移する。 +CbCの場合これら環境を持たず遷移する為、 通常の継続と比較して軽量であるから、 軽量継続であると言える。 +CbCは軽量継続を利用するためにレジスタレベルでの実装が可能となり、 Cよりも低級な言語と言える。 + CodeGear間の入出力の受け渡しは引数を利用して行う。 +これは軽量継続時に、 CodeGearの入出力のインターフェイスを揃えることで、 引数で与えられたレジスタを変更せずに繊維する事が可能であるためである。 +実際にCbCで書いたコード例をCode\ref{cbc_example_test}に示す。 +\lstinputlisting[frame=lrbt, label=cbc_example_test, caption=加算と文字列を設定するCbCコードの例]{./codes/cbc_example_test.cbc} + +