Mercurial > hg > Papers > 2022 > soto-sigos
view Paper/tex/cbc.tex @ 3:952d4dbb7c6a
WIP 仮完成
author | soto <soto@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Thu, 05 May 2022 03:30:26 +0900 |
parents | f9794e92f964 |
children | 7434c0aa1859 |
line wrap: on
line source
\section{Continuation based C} Continuation based C\cite{kaito-lola} (以下 CbC) は 関数呼び出しの際にjmp命令で遷移をし、環境を持たずに遷移する ことができるC言語である、 つまりC言語の下位言語にあたり、よりアセンブラに近い記述を行う jmp命令であるため関数遷移をし、実行が終了しても もとの関数に戻ることはない。 そのため次に遷移する Code Gear を指定する。 これは、関数型プログラミングでの末尾関数呼び出しに相当する。 Code Gear に Deta Gear を与え、それをもとに処理を行い、 出力として Data Gear を返し、また次の Code Gearに遷移 していく流れとなる。 CbC では CodeGear を処理の単位、 DataGear をデータの単位として記述するプログラミング言語である。 他のプログラミング言語とは違い、 Code Gear が 暗黙の環境を持たず、受け取った Data Gear のみを もとに処理をすること、 さらに Code Gear 単位で処理が完結していることから、 検証に適したプログラミング言語であると言える。 また、プログラムを記述する際は、ノーマルレベルの計算の他に、メモリ管理、スレッド管理、資源管理等を記述しなければならない処理が存在する。 これらの計算はノーマルレベルの計算と区別してメタ計算と呼ぶ。 メタ計算は 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.35}{\includegraphics{fig/cbc_codegear.pdf}} \end{center} \caption{メタ計算を可視化した CodeGear と DataGear} \label{fig:meta-cgdg} \end{figure}