Mercurial > hg > Papers > 2012 > nobu-thesis
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}