2013-10-31 21 views
5

core.asyncの機能を自分自身の非同期関数で拡張することをお勧めしますか?clojure core.asyncの機能拡張

チャネルの非同期性は、コールバックを受け入れるput!およびtake!によって処理されますが、プロトコルはasync.impl.protocols名前空間にネストされます。 impl平均はありません。この場合はか、それを実装するのは大丈夫ですか?

たとえば、NettyチャネルまたはJavaソケットをReadPortおよびWritePortとしてラップできます。

+0

ここでは、本質的に「それを求めて」言った答えが使用されています。それは収縮しているようです。 –

+0

私はあなたが欲しいものを言うと思います! – Hendekagon

+0

@Hendekagonしかし、プロトコルが隠されている場合、予告なく変更する可能性が高くなります。それはクマだろう。 –

答えて

7

プロトコルの意図は、独自のバッファ、チャネル、ポートなどを実装するための実装フックとして機能することです。これらは実装の一部であり、公開ユーザーAPIではなくimplの下に存在します。

チームは、ライブラリの非アルファベット版がリリースされるまで(私はそれに時間枠がない)、彼らは変更を開いているとみなします。 asyncのリリースから現在までのプロトコルは変更されていませんが、現時点ではプロセスの急激な変化が具体的にput!take!にあります。

今のところ変更をキャッチする場合は、自由に実装してください。

Tim Bは、非同期チャネルをネットワークに接続するのにかなりの時間を費やしています。チャネルのセマンティクスを維持しながら行うのは非常に難しい作業です。このために今推奨されているパターンは、ネットワークI/Oと通信し、アプリケーションのチャネル(おそらくput!take!を使用)と "エッジで"通信する専用のスレッドを使用することです。このパターンでは、内部プロトコルを実装する必要はありません。