Mercurial > hg > Papers > 2017 > mitsuki-thesis
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 これを環境付き継続と呼ぶ。 |