annotate paper/cbc.tex @ 12:1c9fc852e4ce

Add cbc description
author atton <atton@cr.ie.u-ryukyu.ac.jp>
date Wed, 18 Jan 2017 16:26:44 +0900
parents
children 99a9be7e6bc9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
12
1c9fc852e4ce Add cbc description
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 \chapter{Continuation based C}
1c9fc852e4ce Add cbc description
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2
1c9fc852e4ce Add cbc description
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 Continuation based C (CbC)は当研究室で開発しているプログラミング言語であり、OSや組み込みソフトウェアの開発を主な対象としている。
1c9fc852e4ce Add cbc description
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 CbC は C言語の下位の言語であり、ソースコードの構文はほとんどC言語と同じように定義されているが、よりアセンブラに近い形でプログラムを記述する。
1c9fc852e4ce Add cbc description
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 CbC は CodeSegment と呼ばれる単位で処理を定義し、それらを組み合わせることにでプログラム全体を構成する。
1c9fc852e4ce Add cbc description
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 データの単位は DataSegment と呼ばれる単位で定義し、それら CodeSegment によって変更していくことでプログラムの実行となる。
1c9fc852e4ce Add cbc description
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 CbC の処理系には llvm/clang による実装\cite{110009766999} と gcc\cite{weko_82695_1}による実装などが存在する。
1c9fc852e4ce Add cbc description
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
8
1c9fc852e4ce Add cbc description
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
9
1c9fc852e4ce Add cbc description
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 \section{CodeSegment と DataSegment}
1c9fc852e4ce Add cbc description
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 本研究室では検証を行ないやすいプログラムの単位として CodeSegment と DataSegment を用いるプラグラミングスタイルを提案している。
1c9fc852e4ce Add cbc description
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
12
1c9fc852e4ce Add cbc description
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
13 CodeSegment は処理の単位である。
1c9fc852e4ce Add cbc description
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 入力を受け取り、それに対して処理を行なった後を出力を行なう。
1c9fc852e4ce Add cbc description
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 また、CodeSegment は他の CodeSegment と組み合わせることが可能である。
1c9fc852e4ce Add cbc description
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 あるCodeSegment A を CodeSegment B に接続した場合、 A の出力は B の入力となる。
1c9fc852e4ce Add cbc description
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
17
1c9fc852e4ce Add cbc description
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
18 % TODO: figure (cs A . cs B)
1c9fc852e4ce Add cbc description
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
19
1c9fc852e4ce Add cbc description
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 DataSegment は CodeSegment が扱うデータの単位であり、処理に必要なデータが全て入っている。
1c9fc852e4ce Add cbc description
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 CodeSegment の入力となる DataSegment は Input DataSegment と呼ばれ、出力は Output DataSegment と呼ばれる。
1c9fc852e4ce Add cbc description
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 CodeSegment A と CodeSegment B を接続した時、A の Output DataSegment は B の入力 Input DataSegment となる。
1c9fc852e4ce Add cbc description
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
23
1c9fc852e4ce Add cbc description
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 % TODO: figure (cs A --(ds)--> cs B)
1c9fc852e4ce Add cbc description
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
25
1c9fc852e4ce Add cbc description
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
26
1c9fc852e4ce Add cbc description
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 \section{Continuation based C における CodeSegment と DataSegment}
1c9fc852e4ce Add cbc description
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 Continuation based C における CodeSegment は返り値を持たない関数として表現される。 % TODO: ref
1c9fc852e4ce Add cbc description
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
29 CodeSegment を定義するためには関数宣言を行なう際に返り値の型として \verb/__code/ キーワードを用いる。
1c9fc852e4ce Add cbc description
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
30
1c9fc852e4ce Add cbc description
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 % TODO: cs の例
1c9fc852e4ce Add cbc description
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
32
1c9fc852e4ce Add cbc description
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
33
1c9fc852e4ce Add cbc description
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 \section{MetaCodeSegment と MetaDataSegment}
1c9fc852e4ce Add cbc description
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
35 \section{GearsOS}
1c9fc852e4ce Add cbc description
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 \section{メタ計算ライブラリ akasha}
1c9fc852e4ce Add cbc description
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 \section{akasha を用いた赤黒木の実装の検証}
1c9fc852e4ce Add cbc description
atton <atton@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
38