view Paper/tex/cbc.tex @ 5:339fb67b4375

INIT rbt.agda
author soto <soto@cr.ie.u-ryukyu.ac.jp>
date Sun, 07 Nov 2021 00:51:16 +0900
parents c59202657321
children
line wrap: on
line source

\section{Continuation based C}
Continuation based C\cite{kaito-lola} (以下 CbC) は CodeGear を処理の単位、
DataGear をデータの単位として記述するプログラミング言語である。
CbC は C 言語とほぼ同じ構文を持つが、よりアセンブラに近い記述になる。

CbC では検証しやすいプログラムの単位として DataGear と CodeGear という
単位を用いるプログラミングスタイルを提案している。

DataGear は CodeGear で扱うデータの単位であり、処理に必要なデータである。
CodeGear の入力となる DataGear を Input DataGear と呼び、
出力は Output DataGear と呼ぶ。

CodeGear はプログラムの処理そのもので、図 \ref{fig:cgdg}で示しているように任意の数の
Input DataGear を参照し、処理が完了すると任意の数の Output DataGear に書き込む。

CodeGear 間の移動は継続を用いて行われる。継続は関数呼び出しとは異なり、呼び出し
た後に元のコードに戻らず、次の CodeGear へ継続を行う。
これは、関数型プログラミングでは末尾関数呼び出しを行うことに相当する。
\begin{figure}[htpb]
 \begin{center}
  \scalebox{0.3}{\includegraphics{fig/cgdg.pdf}}
 \end{center}
 \caption{CodeGear と DataGear}
 \label{fig:cgdg}
\end{figure}

また、プログラムの記述する際は、ノーマルレベルの計算の他に、メモリ管理、スレッド管理、資源管理等を記述しなければならない処理が存在する。
これらの計算はノーマルレベルの計算と区別してメタ計算と呼ぶ。

メタ計算は OS の機能を通して処理することが多く、信頼性の高い記述が求められる。
そのため、 CbC ではメタ計算を分離するために Meta CodeGear、 Meta DataGear を定義している。

Meta CodeGear は CbC 上でのメタ計算で、通常の CodeGear を実行する際に必要なメタ計算を分離するための単位である。
図 \ref{fig:meta-cgdg} のように CodeGear を実行する前後や DataGear の大枠として Meta Gear が存在している。

\begin{figure}[htpb]
 \begin{center}
  \scalebox{0.3}{\includegraphics{fig/meta-cg-dg.pdf}}
 \end{center}
 \caption{メタ計算を可視化した CodeGear と DataGear}
 \label{fig:meta-cgdg}
\end{figure}