Mercurial > hg > Papers > 2017 > atton-master
changeset 13:99a9be7e6bc9
Update cbc description
author | atton <atton@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Wed, 18 Jan 2017 17:09:21 +0900 |
parents | 1c9fc852e4ce |
children | 6bf2e0196a1e |
files | paper/cbc.tex paper/reference.bib |
diffstat | 2 files changed, 22 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/paper/cbc.tex Wed Jan 18 16:26:44 2017 +0900 +++ b/paper/cbc.tex Wed Jan 18 17:09:21 2017 +0900 @@ -1,11 +1,12 @@ \chapter{Continuation based C} Continuation based C (CbC)は当研究室で開発しているプログラミング言語であり、OSや組み込みソフトウェアの開発を主な対象としている。 -CbC は C言語の下位の言語であり、ソースコードの構文はほとんどC言語と同じように定義されているが、よりアセンブラに近い形でプログラムを記述する。 +CbC は C言語の下位の言語であり、構文はほぼC言語と同じものを持つが、よりアセンブラに近い形でプログラムを記述する。 CbC は CodeSegment と呼ばれる単位で処理を定義し、それらを組み合わせることにでプログラム全体を構成する。 データの単位は DataSegment と呼ばれる単位で定義し、それら CodeSegment によって変更していくことでプログラムの実行となる。 CbC の処理系には llvm/clang による実装\cite{110009766999} と gcc\cite{weko_82695_1}による実装などが存在する。 +% {{{ section: CodeSegment と DataSegment \section{CodeSegment と DataSegment} 本研究室では検証を行ないやすいプログラムの単位として CodeSegment と DataSegment を用いるプラグラミングスタイルを提案している。 @@ -23,12 +24,28 @@ % TODO: figure (cs A --(ds)--> cs B) +% }}} \section{Continuation based C における CodeSegment と DataSegment} -Continuation based C における CodeSegment は返り値を持たない関数として表現される。 % TODO: ref -CodeSegment を定義するためには関数宣言を行なう際に返り値の型として \verb/__code/ キーワードを用いる。 +最も基本的な CbC のソースコードをリスト\ref{cbc:cs.cbc}に、ソースコードが実行される流れを図\ref{fig:cs.cbc}に示す。 +Continuation based C における CodeSegment は返り値を持たない関数として表現される。 +CodeSegment を定義するためには、C言語の関数を定義する構文の返り値の型部分に \verb/__code/ キーワードを指定する。 +Input DataSegment は関数の引数として定義される。 +次の CodeSegment へ処理を移す際には \verb/goto/ キーワードの後に CodeSegment 名と Input DataSegment を指定する。 +処理の移動を軽量継続と呼び、リスト\ref{cbc:cs.cbc}内の \verb/goto cs1(a+b);/ がこれにあたる。 +この時の \verb/(a+b)/ が次の CodeSegment の Input DataSegment となる Output DataSegment である。 -% TODO: cs の例 +% TODO: cs の source(goto 付き) +% TODO: cs のfigure(goto 付き) + +% TODO: scheme ref? +Scheme などの call/cc といった継続はトップレベルから現在までの位置を環境として保持する。 +通常環境とは関数の呼び出しスタックの状態である。 +CbC の軽量継続は呼び出し元の情報を持たないため、スタックを破棄しながら処理を続けていく。 +よって、リスト\ref{cbc:cs.cbc} のプログラムでは cs0 から cs1 へと継続した後にcs0 へ戻ることはできない。 + +% TODO: factorial + \section{MetaCodeSegment と MetaDataSegment}