Module Event


module Event: sig  end
ファーストクラスの同期通信。

このモジュールはチャネルを経由したスレッド間同期通信を実現します。 John Reppy の Concurrent ML システムのように、コミュニケーションのイベントはファーストクラスの値です。イベントはコミュニケーションのために提供される前に独立に構築され結合されます。


type 'a channel 
'a の値を運ぶ通信チャンネルの型です。
val new_channel : unit -> 'a channel
新しいチャンネルを返します。
type 'a event 
'a を返す通信イベントの型です。
val send : 'a channel -> 'a -> unit event
send ch v はチャンネル ch を通して値 v を送るというイベントを返します。そのイベントの結果の値は () です。
val receive : 'a channel -> 'a event
receive ch はチャンネル ch から値を受信するというイベントを返します。そのイベントの結果の値は受け取った値です。
val always : 'a -> 'a event
always v は同期の準備ができたというイベントを返します。イベントの値は v です。
val choose : 'a event list -> 'a event
choose evl はリスト evl の全てのイベントの中からひとつ選んだイベントを返します。
val wrap : 'a event -> ('a -> 'b) -> 'b event
wrap ev fnev と同じコミュニケーションのように振舞うイベントを返し、そのあとで関数 fn をその返り値に適用します。
val wrap_abort : 'a event -> (unit -> unit) -> 'a event
wrap_abort ev fnev と同じコミュニケーションのように振舞うイベントを返しますが、もし選択されなければ関数 fn が同期のあとで呼ばれます。
val guard : (unit -> 'a event) -> 'a event
guard fn は同期しているときは fn() を計算しその結果のイベントとして振舞うイベントを返します。これは同期命令の時の副作用としてイベントを計算させることも可能です。
val sync : 'a event -> 'a
イベントを「同期」させます。すなわちイベントで指定されたすべての外部世界への可能な通信を行い、通信のうちひとつが成功するまでブロックします。通信の返り値を返します。
val select : 'a event list -> 'a
イベントの選択肢の中から「同期」させます。 select evlsync(choose evl) と同じです。
val poll : 'a event -> 'a option
ブロックしない版の Event.syncです。イベントで指定されたすべての外部世界への可能な通信を行い、それが直ちに行えれば行って Some r を返します。ここで r はその通信の返り値です。直ちには行えない場合はブロックせずに None を返します。