0
|
1 \section{Continuation based C}
|
2
|
2 Continuation based C\cite{kaito-lola} (以下 CbC) は
|
|
3 関数呼び出しの際にjmp命令で遷移をし、環境を持たずに遷移する
|
|
4 ことができるC言語である、
|
|
5 つまりC言語の下位言語にあたり、よりアセンブラに近い記述を行う
|
0
|
6
|
2
|
7 jmp命令であるため関数遷移をし、実行が終了しても
|
|
8 もとの関数に戻ることはない。
|
|
9 そのため次に遷移する Code Gear を指定する。
|
|
10 これは、関数型プログラミングでの末尾関数呼び出しに相当する。
|
0
|
11
|
2
|
12 Code Gear に Deta Gear を与え、それをもとに処理を行い、
|
|
13 出力として Data Gear を返し、また次の Code Gearに遷移
|
|
14 していく流れとなる。
|
|
15
|
|
16 CbC では CodeGear を処理の単位、
|
|
17 DataGear をデータの単位として記述するプログラミング言語である。
|
0
|
18
|
2
|
19 他のプログラミング言語とは違い、
|
|
20 Code Gear が 暗黙の環境を持たず、受け取った Data Gear のみを
|
|
21 もとに処理をすること、
|
|
22 さらに Code Gear 単位で処理が完結していることから、
|
|
23 検証に適したプログラミング言語であると言える。
|
0
|
24
|
2
|
25 また、プログラムを記述する際は、ノーマルレベルの計算の他に、メモリ管理、スレッド管理、資源管理等を記述しなければならない処理が存在する。
|
0
|
26 これらの計算はノーマルレベルの計算と区別してメタ計算と呼ぶ。
|
|
27
|
|
28 メタ計算は OS の機能を通して処理することが多く、信頼性の高い記述が求められる。
|
|
29 そのため、 CbC ではメタ計算を分離するために Meta CodeGear、 Meta DataGear を定義している
|
|
30
|
|
31 Meta CodeGear は CbC 上でのメタ計算で、通常の CodeGear を実行する際に必要なメタ計算を分離するための単位である。
|
|
32 図 \ref{fig:meta-cgdg} のように CodeGear を実行する前後や DataGear の大枠として Meta Gear が存在している。
|
|
33
|
|
34 \begin{figure}[htpb]
|
|
35 \begin{center}
|
3
|
36 \scalebox{0.35}{\includegraphics{fig/cbc_codegear.pdf}}
|
0
|
37 \end{center}
|
|
38 \caption{メタ計算を可視化した CodeGear と DataGear}
|
|
39 \label{fig:meta-cgdg}
|
|
40 \end{figure}
|
|
41
|