comparison tex/cbc.tex @ 8:27a6616b6683

fix
author soto@cr.ie.u-ryukyu.ac.jp
date Mon, 14 Sep 2020 19:58:10 +0900
parents b124f02ea3f1
children
comparison
equal deleted inserted replaced
7:acad18934981 8:27a6616b6683
1 \section{Continuation based C} 1 \section{Continuation based C}
2 前述した通り CbC とはC言語からループ制御構造とサブルーチンコールを取り除き、 2 CbC とはC言語からループ制御構造とサブルーチンコールを取り除き、
3 継続を導入したC言語の下位言語である。継続呼び出しは引数付き goto 文で表現される。 3 継続を導入したC言語の下位言語である。継続呼び出しは引数付き goto 文で表現される。
4 また、CodeGear を処理の単位、DataGear をデータの単位として記述するプログラミング言語である。 4 また、CodeGear を処理の単位、DataGear をデータの単位として記述するプログラミング言語である。
5 CbC のプログラミングでは DataGear を CodeGear で変更し、その変更を次の CodeGear に渡して処理を行う。 5 CbC のプログラミングでは DataGear を CodeGear で変更し、その変更を次の CodeGear に渡して処理を行う。
6 6
7 \subsection{Code Gear / Data Gear} 7 \subsection{Code Gear / Data Gear}
8 CbCでは、検証しやすいプログラムの単位として DataGear と CodeGear という単位を用いるプログラミングスタイルを提案している。 8 CbCでは、検証しやすいプログラムの単位として DataGear と CodeGear という単位を用いる。
9 9
10 CodeGear はプログラムの処理そのものであり、一般的なプログラム言語における関数と同じ役割である。 10 CodeGear はプログラムの処理そのものであり、一般的なプログラム言語における関数と同じ役割である。
11 DataGear は CodeGear で扱うデータの単位であり、処理に必要なデータである。 11 DataGear は CodeGear で扱うデータの単位であり、処理に必要なデータである。
12 CodeGear の入力となる DataGear を Input DataGear と呼び、出力は Output DataGear と呼ぶ。 12 CodeGear の入力となる DataGear を Input DataGear と呼び、出力は Output DataGear と呼ぶ。
13 13
14 CodeGear 間の移動は継続を用いて行われる。 14 CodeGear 間の移動は継続を用いて行われる。
15 継続は関数呼び出しとは異なり、呼び出した後に元のコードに戻らず、次の CodeGear へ継続を行う。 15 継続は関数呼び出しとは異なり、呼び出した後に元のコードに戻れず、次の CodeGear へ継続を行う。
16 これは、関数型プログラミングでは末尾関数呼び出しを行うことに相当する。 16 これは、関数型プログラミングでは末尾再帰をしていることと同義である。
17 17
18 18
19 \subsection{Meta Code Gear / Meta Data Gear} 19 \subsection{Meta Code Gear / Meta Data Gear}
20 プログラムの記述する際は、ノーマルレベルの計算の他に、メモリ管理、スレッド管理、 20 プログラムの記述する際は、ノーマルレベルの計算の他に、メモリ管理、スレッド管理、
21 資源管理等を記述しなければならない処理が存在する。 21 資源管理等を記述しなければならない処理が存在する。これらの処理をメタ計算と呼ぶ。
22 これらの計算はノーマルレベルの計算と区別してメタ計算と呼ぶ。
23 22
24 メタ計算は OS の機能を通して処理することが多く、信頼性の高い記述が求められる。 23 メタ計算は OS の機能を通して処理することが多く、信頼性の高い記述が求められる。
25 そのため、 CbC ではメタ計算を分離するために Meta CodeGear、 Meta DataGear を定義している。 24 そのため、 CbC ではメタ計算を分離するために Meta CodeGear、 Meta DataGear を定義している。
26 25
27 Meta CodeGear は CbC 上でのメタ計算で、通常の CodeGear を実行する際に必要なメタ計算を分離するための単位である。 26 Meta CodeGear は CbC 上でのメタ計算で、通常の CodeGear を実行する際に必要なメタ計算を分離するための単位である。
28 CodeGear を実行する前後やDataGear の大枠として Meta Gear が存在している。 27 CodeGear を実行する前後やDataGear の大枠として Meta Gear が存在している。
29 28
30 例として CodeGear が DataGear から値を取得する際に使われる、 stub CodeGear について説明する。 29 Meta DataGear は CbC 上のメタ計算で扱われる DataGear である。例えば stub
31 30 CodeGear では Context と呼ばれる接続可能な CodeGear、DataGear のリストや、DataGear
32 CbC では CodeGear を実行する際、ノーマルレベルの計算からは見えないが 31 のメモリ空間等を持った Meta DataGear を扱っている。
33 必要な DataGear を Context と呼ばれる Meta DataGear を通して取得することになる。
34 これはユーザーが直接データを扱える状態では信頼性が高いとは言えないと考えるからである。
35 そのために、 Meta CodeGear として Context から必要な DataGear を取り出し、
36 CodeGear に接続する stub CodeGear という Meta CodeGear を定義している。
37
38 Meta DataGear は CbC 上のメタ計算で扱われる DataGear である。例えば stub
39 CodeGear では Context と呼ばれる接続可能な CodeGear、DataGear のリストや、DataGear
40 のメモリ空間等を持った Meta DataGear を扱っている。
41 32
42 33
34