view paper/chapter1.tex @ 18:d276144b815c draft

modify
author Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
date Fri, 24 Feb 2012 19:42:48 +0900
parents be5b510b6d44
children
line wrap: on
line source

\chapter{Continuation based C (CbC)}

\section{CbC とは}
Continuation based C (以下 CbC) は, 当研究室が開発している言語である.
CbC のプログラムはコードセグメント毎に記述され, コード間をgoto(軽量継続)により処理を移る.
構文は C と同じであるが, ループ制御や関数コールが取り除いたことで状態遷移記述を行えることに特徴を持つ.
図\ref{fig:cs}はコードセグメント間の処理の流れを表している.

\begin{figure}[htpb]
  \begin{center}
    \includegraphics[width=100mm]{figure/codesegment.pdf}
  \end{center}
  \caption{コードセグメント間の継続(goto)}
  \label{fig:cs}
\end{figure}



\section{コードセグメント}
コードセグメント(code segment)は CbC プログラムの基本単位になる.
コードセグメントは C の関数と違って戻値を持たず, 処理が終われば次のコードセグメントへと処理を移る.
コードセグメントの記述は C の関数の構文と同じで, 型に ``\verb+__code+'' を使うことで宣言できる.

%軽量継続により並列化, ループ制御, 関数コールとスタックの操作を意識した最適化がソースコードレベルで行えるようになる.

\section{継続(goto)}
コードセグメントへの移動は ``goto'' の後にコードセグメント名と引数を並べて記述することで行える.
これはGCC内部においては関数呼び出しとして扱われる.
C において関数呼び出しを繰り返し行う場合, 呼び出された関数の引数の数だけスタックに値が積まれていく.
だが, 戻値を持たないコードセグメントではスタックにつまれた値(環境)を保持する必要が無い為, スタックポインタが変更されない関数呼び出しとなる.


\section{CbC のプログラム例}
CbC のプログラム例を示す.
ソースコード\ref{src:factorial}は与えられた数 x の階上を計算して出力するプログラムである.

\lstinputlisting[label=src:factorial, caption=階乗を計算する CbC プログラムの例]{src/factorial.cbc}