comparison paper/cbc.tex @ 15:6dedd4ed6b6d

Update cbc description
author atton <atton@cr.ie.u-ryukyu.ac.jp>
date Thu, 19 Jan 2017 11:39:10 +0900
parents 6bf2e0196a1e
children 3ffd17f96e06
comparison
equal deleted inserted replaced
14:6bf2e0196a1e 15:6dedd4ed6b6d
24 24
25 % TODO: figure (cs A --(ds)--> cs B) 25 % TODO: figure (cs A --(ds)--> cs B)
26 26
27 % }}} 27 % }}}
28 28
29 % {{{ Continuation based C における CodeSegment と DataSegment
30
29 \section{Continuation based C における CodeSegment と DataSegment} 31 \section{Continuation based C における CodeSegment と DataSegment}
30 最も基本的な CbC のソースコードをリスト\ref{src:goto}に、ソースコードが実行される流れを図\ref{fig:goto}に示す。 32 最も基本的な CbC のソースコードをリスト\ref{src:goto}に、ソースコードが実行される流れを図\ref{fig:goto}に示す。
31 Continuation based C における CodeSegment は返り値を持たない関数として表現される。 33 Continuation based C における CodeSegment は返り値を持たない関数として表現される。
32 CodeSegment を定義するためには、C言語の関数を定義する構文の返り値の型部分に \verb/__code/ キーワードを指定する。 34 CodeSegment を定義するためには、C言語の関数を定義する構文の返り値の型部分に \verb/__code/ キーワードを指定する。
33 Input DataSegment は関数の引数として定義される。 35 Input DataSegment は関数の引数として定義される。
49 Scheme などの call/cc といった継続はトップレベルから現在までの位置を環境として保持する。 51 Scheme などの call/cc といった継続はトップレベルから現在までの位置を環境として保持する。
50 通常環境とは関数の呼び出しスタックの状態である。 52 通常環境とは関数の呼び出しスタックの状態である。
51 CbC の軽量継続は呼び出し元の情報を持たないため、スタックを破棄しながら処理を続けていく。 53 CbC の軽量継続は呼び出し元の情報を持たないため、スタックを破棄しながら処理を続けていく。
52 よって、リスト\ref{src:goto} のプログラムでは cs0 から cs1 へと継続した後にcs0 へ戻ることはできない。 54 よって、リスト\ref{src:goto} のプログラムでは cs0 から cs1 へと継続した後にcs0 へ戻ることはできない。
53 55
54 % TODO: factorial 56 もう少し複雑な CbC のソースコードをリスト\ref{src:factrial}に、実行される流れを図\ref{fig:factrial}に示す。
57 このソースコードは整数の階乗を求めるプログラムである。
58 CodeSegment factorial0 では自分自身への再帰的な継続を用いて階乗を計算している。
59 軽量継続時には関数呼び出しのスタックは存在しないが、計算中の値を DataSegment で持つことで再帰を含むループ処理も行なうことができる。
55 60
61 \lstinputlisting[label=src:factrial, caption=階乗を求める CbC プログラム] {src/factrial.cbc}
56 62
63 \begin{figure}[htbp]
64 \begin{center}
65 \includegraphics[scale=0.8]{fig/factorial.pdf}
66 \caption{階乗を求める CbC プログラム}
67 \label{fig:factrial}
68 \end{center}
69 \end{figure}
70
71 % }}}
57 72
58 \section{MetaCodeSegment と MetaDataSegment} 73 \section{MetaCodeSegment と MetaDataSegment}
59 \section{GearsOS} 74 \section{GearsOS}
60 \section{メタ計算ライブラリ akasha} 75 \section{メタ計算ライブラリ akasha}
61 \section{akasha を用いた赤黒木の実装の検証} 76 \section{akasha を用いた赤黒木の実装の検証}