このようにプログラムすることで、通常処理と例外処理を分離することができるため、仕様の変更を抑えたシンプルなプログラムを記述できる。仕様の変更を抑えてプログラムの拡張ができるということは、コードを破壊しないため変更以前の信頼性を保てるということである。Computationが用意されている。リモートノードに大きなデータを送るために、データを圧縮したい場合がある。そこで、Aliceは圧縮をサポートしている。圧縮のメソッドを用意したわけではない。Computationを介すことでDSに圧縮と非圧縮のデータを同時に持てるようにしている(図\ref{fig:compress})。CSを介すことでDSに圧縮と非圧縮のデータを同時に持てるようにしている(図\ref{fig:compress})。-1つのDS内に以下の3つの表現を持たせることでデータに多態性を持たせ、必要に応じた形式でDSを扱う。DSとして以下の3つの表現を持たせることでデータに多態性を持たせ、必要に応じた形式でDSを扱う。-なお、圧縮を指定する際はAlice同様DGM名の前にcompressedをつける。-LocalからのTAKEではDGM名の指定がないが、それはLocalでの圧縮は基本想定していないためである。-しかし、Localでの圧縮をしようと思えばRemoteTakeを用いて間接的にすることは可能である(\ref{src:compresslocal})。ComputationはAliceと同様で、指定する際にDGM名の前にcompressedをつける(\ref{src:compresslocal})。+LocalからのTAKEではDGM名の指定がないが、それはLocalでの圧縮は基本想定していないためである。+しかし、Localでの圧縮をしようと思えばRemoteTakeを用いて間接的にすることは可能である。いくつか例をあげてChristieの通信のフローをシーケンス図を用いて解説する。-図\ref{fig:localSequence}はLocalDGMにTakeを行ったときのフローである。+図\ref{fig:localSequence}はLocalDGMにTakeを行い、LocalDGM内にDGがあったときの処理の流れである。-CGがsetupされるとアノテーションからTAKEコマンドが作られ実行される。-このとき要求したデータがDGM内にない場合はwaitListに入る。-PUTコマンドが実行された際、もしwaitListにPutしたDGを待っているコマンドがあれば実行される。-CGは生成したインプットコマンドの総数を初期値としたカウンタを持っており、コマンドが解決されるたびにカウンタは減っていき、0になるとCGがThreadPoolへ送られる。+プログラマはmainでCGMとStartCGを生成する。+CGMと同時にLocalDGMは作られる。+CGが生成され、setupメソッドが呼ばれるとアノテーションからTAKEコマンドが作られ実行される。+CGは生成したインプットコマンドの総数を初期値としたカウンタを持っており、コマンドが解決される(InputDGが揃う)たびにカウンタは減っていき、0になるとrun内の処理がThreadPoolへ送られる。+図\ref{fig:remotePutSequence}は、LocalDGMにTakeを行うが、LocalDGM内にDGがなかったためにPutの待ち合わせをするときの処理の流れである。+mainなどの最初の処理は図\ref{fig:localSequence}と同様のため省略する。+図\ref{fig:localSequence}と同様に、setupメソッドからTAKEコマンドを生成し実行する。+このとき要求したデータがDGM内にない場合はwaitListに入る。+LocalまたはリモードノードからPUTコマンドが実行された際、もしwaitListにPutしたDGを待っているコマンドがあれば実行される。-リモートから来たコマンドを含むLocalDGMへの操作はLocalDGMのwaitListに入り、リモートからの応答を待つコマンドはRemoteDGMのwaitListに入る。\newpage+図\ref{fig:remoteTakeSequence}は、RemoteDGMにTakeを行ったときの処理の流れである。+StartCGで事前にRemoteDGMを生成しておく。+RemoteTakeアノテーションからRemoteDGMに対するTakeコマンドを生成し実行する。+RemoteTakeのようにリモートからの応答を待つコマンドはRemoteDGMのwaitListに入る。+そして、MessagePack形式に変換したRemoteCommandを作成し、それをRemoteDGMが参照している別ノードのLocalDGMに送る。+それを受け取った側のLocalDGMは、DGがあればREPLYコマンドを生成して送り返す。+もしDGがなければ、リモートから来たコマンドもローカルの場合と同様にLocalDGMのwaitListに入る。++REPLYを受け取るとRemoteDGMはwaitListに入っていたコマンドを解決する。\chapter{謝辞}。