#昨日の話題についてぼんやり考えていたが、チャネルとそれに結びついたイベントを使って、イベントで複数のチャネルの(書き込み可|読み出し可)を待ってから書く/読む、というモデルでは、チャネルは基本的にone-to-oneの通信に使うってことなんだな。many-to-manyで使うと、「イベントで読み出し可になる」→「読みにいったら既に他の誰かが読み出してたのでブロックしちゃた」という可能性があるから。で、ロバストにするにはindefiniteにブロックする可能性のあるモデルは使えない。
#ということは、one-to-manyやmany-to-oneならそれぞれone-to-oneのチャネルを束ねる、一段上の抽象を用意することになるんだろか。
#しかし、これではmany-to-many (producerもconsumerも複数) というのが難しい気がする。
#複数のScheme処理系で動くようにしたいのですが、Schemeにはfeatureもboundpもないようです。javascriptのブラウザ判断のようなdirtyなやり方でもよいので、エラーを出さずにgaucheであることを判断するにはどうしたらよいでしょうか。
#全ての処理系でサポートがあるわけではないですが、srfi-0を使うのが定番です。srfi-0自体で規定されてるfeature idの他に、多くの処理系では処理系独自のfeature idをサポートしています。(cond-expand [gauche <gauche独自のコード>] [chicken <chicken独自のコード>] [else <フォールバック>] ) のようにします。
#各処理系の独自feature idをまとめたのをどこかで見た気がするんだけど、どこだったかなあ。
#featureがあったんですね。ありがとうございます。