Mercurial > hg > Papers > 2018 > nozomi-master
diff paper/cbc.tex @ 14:6bf2e0196a1e
Add goto.cbc and goto.pdf
author | atton <atton@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Thu, 19 Jan 2017 11:29:13 +0900 |
parents | 99a9be7e6bc9 |
children | 6dedd4ed6b6d |
line wrap: on
line diff
--- a/paper/cbc.tex Wed Jan 18 17:09:21 2017 +0900 +++ b/paper/cbc.tex Thu Jan 19 11:29:13 2017 +0900 @@ -27,22 +27,29 @@ % }}} \section{Continuation based C における CodeSegment と DataSegment} -最も基本的な CbC のソースコードをリスト\ref{cbc:cs.cbc}に、ソースコードが実行される流れを図\ref{fig:cs.cbc}に示す。 +最も基本的な CbC のソースコードをリスト\ref{src:goto}に、ソースコードが実行される流れを図\ref{fig:goto}に示す。 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 である。 +処理の移動を軽量継続と呼び、リスト\ref{src:goto}内の \verb/goto cs1(a+b);/ がこれにあたる。 +この時の \verb/(a+b)/ が次の CodeSegment である cs1 の Input DataSegment となる cs0 の Output DataSegment である。 + +\lstinputlisting[label=src:goto, caption=CodeSegment の軽量継続] {src/goto.cbc} -% TODO: cs の source(goto 付き) -% TODO: cs のfigure(goto 付き) +\begin{figure}[htbp] + \begin{center} + \includegraphics[scale=1.0]{fig/goto.pdf} + \caption{CodeSegment の軽量継続} + \label{fig:goto} + \end{center} +\end{figure} % TODO: scheme ref? Scheme などの call/cc といった継続はトップレベルから現在までの位置を環境として保持する。 通常環境とは関数の呼び出しスタックの状態である。 CbC の軽量継続は呼び出し元の情報を持たないため、スタックを破棄しながら処理を続けていく。 -よって、リスト\ref{cbc:cs.cbc} のプログラムでは cs0 から cs1 へと継続した後にcs0 へ戻ることはできない。 +よって、リスト\ref{src:goto} のプログラムでは cs0 から cs1 へと継続した後にcs0 へ戻ることはできない。 % TODO: factorial