twitter の IVar Offer Broker について

7
Yuta Okamoto @okapies

BrokerChannelHandler…だと…! #finagle

2012-06-16 18:03:07
Yuta Okamoto @okapies

なるへろ、ChannelHandlerに来たイベントを全部Brokerに突っ込んでくれるから、使う側はBrokerやOfferとして取れるということか。

2012-06-16 18:13:04
Yuta Okamoto @okapies

com.twitter.concurrentの基礎になってるIVarというのは"I-structured variable"で、CTMCP(ガウディ本)の「宣言的並列性」という章に出てくる概念らしい。のだが、その旨がコメントにしか書いてなくて難儀すぎる。 #scala

2012-06-16 23:45:57
Yuta Okamoto @okapies

ググっても"i-structure"の説明が全然出てこないというか、ググラビリティが低すぎて関係ないページばかり出てくるので大人しくIVarのコメントを解読する。 #scala

2012-06-16 23:59:34
Yuta Okamoto @okapies

このあたりは、掘れば掘るだけいろんな概念が出てくるのぉ…。

2012-06-17 00:04:50
Yuta Okamoto @okapies

FutureとかOfferとかに登録したコールバックを実行するのは、Promise#updateIfEmpty(Try[A])→IVar.set(A)を呼び出したスレッドだ、という当たり前の事実を確認して満足した。 #scala

2012-06-17 02:03:42
Yuta Okamoto @okapies

finagle-streamを調べてたら、ChannelHandlerのコンストラクタでOfferを作ってどこにも渡さない、というのがあって?となってたんだけど、つまりHandlerにイベントが入ってきた時にBrokerから起こされるみたい。 #scala #finagle

2012-06-17 02:40:26
Yuta Okamoto @okapies

今日はFutureやOfferに対する理解が進んで有意義だったが、本題のコードが一行も進んでいない。

2012-06-17 02:43:52
Yuta Okamoto @okapies

つうわけで、Okの後にCallbackが来るのをハンドリングするには、ChannelHandlerにBrokerを持たせておいて、OkにFuture[Callback]を含めて渡し、Callbackが到着した時点でBrokerにsendしてやるのが良いのかな。

2012-06-17 02:52:03
Yuta Okamoto @okapies

CTMCPの原文あった。4.9節のpp.342-343。単一代入変数の実例の一つで"I-structure = incomplete structure"の略だそうな。ちなみに、もう一つはFuture。二つは兄弟なわけだ。 #scala http://t.co/zZaEKhuY

2012-06-17 03:13:49
Yuta Okamoto @okapies

"I-structure"は単一代入変数の配列であり、全要素の計算が完了する前でも個々の変数にアクセスできる。データフロー・マシンで並列プログラムを書くための構文要素で、"Id"や"pH"(parallel Haskell)といった言語で採用されている、と。 #scala

2012-06-17 03:23:58
Yuta Okamoto @okapies

というわけで、ググっても日本語の文献が絶無なのも納得できるな…。どマイナーすぐる。 #scala

2012-06-17 03:26:52
Yuta Okamoto @okapies

ん、HaskellにIVarモナドってのがあるの? #scala

2012-06-17 03:48:08
Yuta Okamoto @okapies

あー、parallel Haskellって要するにHaskellなのね。つまり、素直にIVarで検索すればよろしいということか。 #scala

2012-06-17 03:55:16
Yuta Okamoto @okapies

む、MonadなのはParの方か。Parから使うのがIVarと。 #scala

2012-06-17 04:09:55
Yuta Okamoto @okapies

個々の操作を見てみるとかなり違う部分があるけど、まぁ、元々はHaskellあたりから持ってきたアイデアだということが分かったので寝る。 #scala

2012-06-17 04:11:49
Yuta Okamoto @okapies

状態をキープするのが前提のプロトコルの実装がこんなに面倒なものだとは思わなかった。

2012-06-18 22:45:36
Yuta Okamoto @okapies

ステートレスなプロトコルなんて幻想やったんや…。

2012-06-18 23:00:52
Yuta Okamoto @okapies

さぁて、どうする。とりあえず、無理矢理形にするか、さらに一回別の実装手法を試すか。

2012-06-18 23:08:30
Yuta Okamoto @okapies

とりあえず実装はでけた。ねる。

2012-06-19 01:03:56
Yuta Okamoto @okapies

結局、BrokerとかOfferってアイデア的にはどっち方面から来てるんだろう。 #scala

2012-06-19 21:46:09
Yuta Okamoto @okapies

Offerって、今のところOffer.selectを再帰呼び出しと組み合わせてイベント処理ループを作るくらいしか見たことがないんですけど、他に何か面白い使い方とかあるんでしょうか。 #scala

2012-06-19 21:55:35
がくぞ @gakuzzzz

@okapies これ https://t.co/oEppGdTA の ack みたいに、ある種の状態変更メソッドをオブジェクトとして外部から与えられるっていうのはちょっと面白いなと思ってました

2012-06-19 21:58:47
Yuta Okamoto @okapies

@gakuzzzz 咀嚼しようと頑張ったのですがギブアップしました。3~5ツイートくらいで詳細を頂けると大変ありがたく…w

2012-06-19 22:16:42
Yuta Okamoto @okapies

@gakuzzzz あー、与えるOfferの実装次第で色々な挙動のackが実現できる、みたいな感じでしょうか。

2012-06-19 22:38:25