annotate final_main/chapter4/chapter4.tex @ 2:97d58fdc8185

add copies final_main
author ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
date Mon, 03 Feb 2020 18:36:31 +0900
parents
children c1732eac57f6
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 %\input{/Users/e155753/.tex/setup}
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 %%文書開始****************************
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 \begin{document}
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 %%**************************************
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 \chapter{Christieについて}
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
7
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 Christieは当研究室で開発している分散フレームワークである. Christieには分散プログラムを簡潔に書くための工夫が複数ある.
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 本章ではChristieについて述べる.
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 \section{Christieとは}
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 ChristieはJavaで書かれた分散フレームワークである. Christieは当研究室で開発している GearsOSに組み込まれる予定がある. そのため, GearsOS を構成する言語 Continuation based C と似た概念がある. Christie に存在する概念として次のようなものがある.
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
12
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
13 \begin{itemize}
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 \item CodeGear(以下 CG)
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 \item DataGear(以下 DG)
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 \item CodeGearManager(以下 CGM)
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 \item DataGearManager(以下 DGM)
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
18 \end{itemize}
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
19
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 CGはクラス, スレッドに相当し, javaの継承を用いて記述する. DGは変数データに相当し, CG内でアノテーションを用いて変数データを取り出せる. CGM はノードであり, DGM, CG, DG を管理する. DGM は DG を管理するものであり, put という操作により変数データ, つまり DG を格納できる.
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 DGMのput操作を行う際にはLocalとRemoteと2つのどちらかを選び, 変数のkeyとデータを引数に書く. Localであれば, Local のCGMが管理しているDGMに対し, DGを格納していく. Remoteであれば接続したRemote先の CGMのDGMにDGを格納できる. put操作を行ったあとは, 対象のDGMの中にqueueとして保管される.
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 DGを取り出す際には, CG内で宣言した変数データにアノテーションをつける. DGのアノテーションにはTake, Peek, TakeFrom, PeekFromの4つがある.
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 \begin{description}
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 \item[Take] 先頭のDGを読み込み, そのDGを削除する. DGが複数ある場合, この動作を用いる.
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 \item[Peek] 先頭のDGを読み込むが, DGが削除されない. そのため, 特に操作をしない場合は同じデータを参照し続ける.
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
26 \item[TakeFrom(Remote DGM name)] Takeと似ているが, Remote DGM nameを指定することで, その接続先(Remote)のDGMからTake操作を行える.
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 \item[PeekFrom(Remote DGM name)] Peekと似ているが, Remote DGM nameを指定することで, その接続先(Remote)のDGMからPeek操作を行える.
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 \end{description}
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
29
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 以上が, Christieの概要である.
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
31
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 \section{プログラミングの例}
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 ここでは, Christieで実際にプログラムを記述する例を述べる.
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 CGMを作り, setup(new CodeGear)を動かすことにより, DGを待ち合わせ, DGが揃った場合にCodeGearが実行される. CGMを作る方法はStartCodeGear(以下SCG)を継承したものからcreateCGM(port) methodを実行することにより, CGMが作られる. SCGのコードの例をソースコード\ref{code:StartHelloWorld}に示す.
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
35
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 \lstinputlisting[caption=StartHelloWorld,label=code:StartHelloWorld]{./src/HelloWorld/StartHelloWorld.java}
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
37
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
38
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 \section{TopologyManagerの実装}
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
40 Christieは当研究室で開発されたAliceを改良した分散フレームワークである. しかしAliceの機能を全て移行したわけではない. TopologyManagerは最たる例であり, 分散プログラムを簡潔に書くために必要である. そのため, ChristieにTopologyManagerを実装した.
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
41
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
42 ここでは, TopologyManagerとはどのようなものかを述べる. そして, TopologyManagerを実装する際に, Christie自身のコードを変更する必要があったため, TopologyManagerでどのような問題が起こり, Christieの基本機能をどのような変更したかも述べる.
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
43
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
44 TopologyManagerとは, Topologyを形成するため, 参加を表明したノード, TopologyNodeに名前を与え, 必要があればノード同士の配線も行うノードである. TopologyManagerのTopology形成方法として, 静的Topologyと動的Topologyがある. 静的Topologyはソースコード\ref{code:dot-example}のようなdotファイルを与えることで, ノードの関係を図\ref{fig:dot-example}のようにさせる. 静的Topologyはdotファイルのノード数と同等のTopologyNodeがあって初めて, CodeGearが実行される.
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
45
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
46 \lstinputlisting[caption=ring.dot,label=code:dot-example]{./src/ring.dot}
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
47
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
48 \begin{figure}[H]
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
49 \centering
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
50 \fbox{
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
51 \includegraphics[scale=1]{./images/ring.pdf}
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
52 }
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
53 \caption{ソースコード\ref{code:dot-example}, ring.dotを図にしたもの}
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
54 \label{fig:dot-example}
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
55 \end{figure}
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
56
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
57
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
58
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
59 動的Topologyは参加を表明したノードに対し, 動的にノード同士の関係を作る. 例えばTreeを構成する場合, 参加を表明したノードから順に, rootに近い位置の役割を与える. また, CodeGearはノードが参加し, parentに接続したあとに実行される.
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
60
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
61 TopologyManagerを実装するに当たって, 以下の2つの問題点が出た.
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
62
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
63 \begin{itemize}
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
64 \item Take, Peek操作でSuperClassの型を持ったデータを取り出す際にNullPointerExceptionが表示される.
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
65 \item ノード間で繋がる前にput操作を行うとデータが送られない.
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
66 \end{itemize}
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
67
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
68 Take, Peek操作でSuperClassの型を持ったデータを取り出す際にNullPointerExceptionが表示される問題に対しては, DataGearでdataを代入する際にSuperClass, interfacesまで比較するように書き換えた. また, 型の不一致が起こった際は例外を投げるようにした. その修正後のコードをソースコード\ref{code:datagear}に示す.
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
69
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
70 \begin{lstlisting}[caption=修正後のDataGearのソースコード,label=code:datagear]
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
71 public class DataGear<T>{
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
72
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
73 ...
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
74
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
75 public void setData(T data) {
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
76 Class dataClazz = data.getClass();
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
77
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
78 if(dataClazz == this.clazz){
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
79 this.data = data; return;
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
80 }
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
81
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
82 Class dataSuperClazz = dataClazz.getSuperclass();
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
83 while (dataSuperClazz != null) {
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
84 if(dataSuperClazz == this.clazz) {
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
85 this.data = data; return;
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
86 }
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
87 dataSuperClazz = dataSuperClazz.getSuperclass();
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
88 }
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
89
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
90 Class<?>[] interfaces = dataClazz.getInterfaces();
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
91 for (Class<?> interfaze : interfaces) {
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
92 if(interfaze == this.clazz) {
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
93 this.data = data; return;
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
94 }
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
95 }
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
96
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
97 throw new ClassCastException("datagear cannot set class from " + dataClazz.getName() + " to " + clazz.getName());
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
98
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
99 }
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
100
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
101 }
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
102 \end{lstlisting}
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
103
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
104 setDataメソッドの中身を変更した. TopologyNodeにおいて, 実行するCodeGearをputしておき, 参加するノードがすべて揃ったら, そのCodeGearを実行する. しかし, 実際には実行するCodeGearはCodeGearを継承したものである. Christieは, putされたdataのクラスとTakeされるデータのクラスが一致したならばdataを代入し, それ以外なら無視するという処理を行っていた. SuperClass, interfacesの型までは比較をしていなかっため, 型の不一致が起こり, dataの代入をしないため, NullPointerExceptionが表示されていた.
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
105
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
106
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
107 ノード間で繋がる前にput操作を行うとデータが送られない問題に対しては, waitを付け加えた. そのコードをソースコード\ref{code:rdgm}に示す.
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
108
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
109 \lstinputlisting[caption=修正後のRemoteDataGearManagerのソースコード,label=code:rdgm]{./src/RemoteDataGearManager.java}
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
110
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
111 具体的にはソースコード\ref{code:rdgm}の17行目から21行目にlockを付け加え, putメソッドの48行目にwaitするメソッドを置き, 54行目から63行目にwaitするメソッドを付け加えた. この問題は, ノードが繋がる前にconnection.writeを行うため, 相手のDataGearに書き込みが行われないために起きた. そのため, 相手とDataGearがつながるまでputメソッドをwaitしておき, つながってからconnection.write操作を行うように書き換えた.
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
112
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
113 \section{Christieにおけるブロックチェーンの実装の利点と欠点}
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
114
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
115 Christieにおいてブロック, トランザクション, Paxos, Proof of Workを実装した.
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
116 その際, Christieで実装した場合の便利な点を述べる.
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
117
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
118 \begin{itemize}
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
119 \item データの取り出しが簡単. ChristieはDataGearという単位でデータを保持する. そのため, ブロックやトランザクションはDataGearに包めばいいため, どう送るかという問題を考えなくてすむ.
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
120 \item TopologyManagerでのテストが便利. dotファイルが有れば, TopologyManagerが任意の形でTopologyを作れる. そのため, ノードの配置については理想の環境を作れるため, 理想のテスト環境を作ることができる.
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
121 \item 機能ごとにファイルが実装できるため, 見通しが良い. ChristieはCbCのgotoと同じように関数が終わるとsetupによって別の関数に移動する. そのため自然に機能ごとにファイルを作るため, 見通しが良くなる.
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
122 \end{itemize}
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
123
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
124 不便な点を以下に述べる.
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
125
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
126 \begin{itemize}
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
127 \item デバッグが難しい. cgm.setupでCodeGearが実行されるが, keyの待ち合わせで止まり, どこのCGで止まっているかわからないことが多かった. 例えば, putするkeyのスペルミスでコードの待ち合わせが起こり, CGが実行されず, エラーなども表示されずにwaitすることがある. その時に, どこで止まっているか特定するのが難しい.
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
128 \item TakeFrom, PeekFromの使い方が難しい. TakeFrom, PeekFromは引数でDGM nameを指定する. しかし, DGMの名前を静的に与えるよりも, 動的に与えたい場合が多かった.
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
129 \item Takeの待ち合わせでCGが実行されない. 2つのCGで同じ変数をTakeしようとすると, setupされた時点で変数がロックされる. このとき, 片方のCGはDGがすべて揃っているのに, すべての変数が揃っていないもう片方のCGに同名の変数がロックされ, 実行されない場合がある.
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
130 \end{itemize}
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
131
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
132
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
133
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
134
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
135 \newpage
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
136
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
137 %%文書終了****************************
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
138 \end{document}
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
139
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
140
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
141
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
142
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
143
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
144
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
145
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
146
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
147
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
148
97d58fdc8185 add copies final_main
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff changeset
149