comparison final_main/chapter2.tex @ 6:5b368e14bb64

update
author mir3636
date Tue, 14 Feb 2017 18:48:26 +0900
parents 6d00f6c9bb8a
children
comparison
equal deleted inserted replaced
5:a2e61c11df3c 6:5b368e14bb64
1 \chapter{Continuation based C (CbC)} 1 \chapter{Continuation based C (CbC)}
2 \section{Continuation based C (CbC)} 2 \section{Continuation based C (CbC)}
3 CbC は 処理を Code Gear とした単位を用いて記述するプログラミング言語である。 3 CbC は 処理を Code Gear とした単位を用いて記述するプログラミング言語である。
4 Code Gear から次の Code Gear へと goto による継続で遷移をし処理を行う。 4 Code Gear は入力と出力を持ち、CbC では引数が入出力となっている。
5 Code Gear から次の Code Gear へと goto による継続で遷移で処理を行い、引数として出力を与える。
5 図\ref{fig:cs}は Code Gear 間の処理の流れを表している。 6 図\ref{fig:cs}は Code Gear 間の処理の流れを表している。
6 7
7 \begin{figure}[htpb] 8 \begin{figure}[htpb]
8 \begin{center} 9 \begin{center}
9 \scalebox{0.7}{\includegraphics{fig/codesegment.pdf}} 10 \scalebox{0.7}{\includegraphics{fig/codesegment.pdf}}
14 15
15 \section{Code Gear} 16 \section{Code Gear}
16 Code Gear は CbC における最も基本的な処理単位である。 17 Code Gear は CbC における最も基本的な処理単位である。
17 リスト \ref{code_simple} は最も基本的な CbC のコードの一例で、図 \ref{fig:code_simple}はそれを図示したものである。 18 リスト \ref{code_simple} は最も基本的な CbC のコードの一例で、図 \ref{fig:code_simple}はそれを図示したものである。
18 CbC では Code Gear は \_\_code という型を持つ関数の構文で定義される。 19 CbC では Code Gear は \_\_code という型を持つ関数の構文で定義される。
20 ただし、これは \_\_code 型の戻り値を返すという意味ではなく、Code Gear であることを示すフラグのようなものである。
21
19 Code Gear は戻り値を持たないので、関数とは異なり return 文は存在しない。 22 Code Gear は戻り値を持たないので、関数とは異なり return 文は存在しない。
20 goto の後に Code Gear 名と引数を並べて、次の Code Gear の遷移を記述する。 23 goto の後に Code Gear 名と引数を並べて、次の Code Gear の遷移を記述する。
21 この goto の行き先を継続と呼ぶ。 24 リスト \ref{code_simple} の goto cs1(a+b); などがこれにたる。
25 この goto の行き先を継続と呼び、このときの a+b が次の Code Gear への出力となる。
22 Scheme の継続と異なり CbC には呼び出し元の環境がないので、この継続は単なる行き先である。 26 Scheme の継続と異なり CbC には呼び出し元の環境がないので、この継続は単なる行き先である。
23 したがってこれを軽量継続と呼ぶこともある。 27 したがってこれを軽量継続と呼ぶこともある。
24 軽量継続により、並列化、ループ制御、関数コールとスタックの操作を意識した最適化がソースコードレベルで行えるようにする。 28 軽量継続により、並列化、ループ制御、関数コールとスタックの操作を意識した最適化がソースコードレベルで行えるようにする。
25 29
26 \begin{lstlisting}[frame=lrbt,label=code_simple,caption={\footnotesize code segment の軽量継続}] 30 \begin{lstlisting}[frame=lrbt,label=code_simple,caption={\footnotesize code segment の軽量継続}]
75 79
76 goto factorial(i); 80 goto factorial(i);
77 } 81 }
78 \end{lstlisting} 82 \end{lstlisting}
79 83
84 \begin{figure}[htpb]
85 \begin{center}
86 \scalebox{0.55}{\includegraphics{fig/factorial.pdf}}
87 \end{center}
88 \caption{階乗を求める CbC プログラムの軽量継続図}
89 \label{fig:factorial}
90 \end{figure}
91
80 \section{環境付き継続} 92 \section{環境付き継続}
81 環境付き継続は C との互換性のために必要な機能である。 93 環境付き継続は C との互換性のために必要な機能である。
82 CbC と C の記述を交える際、CbC の Code Gear から C の関数の呼び出しは問題なく行える。 94 CbC と C の記述を交える際、CbC の Code Gear から C の関数の呼び出しは問題なく行える。
83 しかし、C の関数から CbC の Code Gear へと継続する場合、呼び出し元の環境に戻るための特殊な継続が必要となる。 95 しかし、C の関数から CbC の Code Gear へと継続する場合、呼び出し元の環境に戻るための特殊な継続が必要となる。
84 これを環境付き継続と呼ぶ。 96 これを環境付き継続と呼ぶ。