2015-11-24 Most.js をよんだ
Most.js
Cycle.js / RxJS / Motorcycle.js からの流れで、Most.js (cujojs/most) のソースコードを読んでいる。自分なりの Rx ライブラリを書きながら。
RxJS との違いなどの気になっている点をいくつか書いておく。
- ES5 Node.js
require()
によるモジュール。 - 細かくモジュール分割されており、ほとんど関数の集合のようになっている。
- メソッド数が RxJS に比べると少ない。RxJS が多すぎる。
- 高速らしい。……が理由はまだ分からない。スケジューラーかも。
- 外向けのインタフェースとしては Stream とそのメソッドのみ。
- RxJS における Observable を Stream と Source とに分割している。
- 良さそう。
- operator は Stream を返すべきだけど、Source は Stream でなくていい。
- Stream.prototype.observe した瞬間に Source と Sink とが明らかであれば良い。つまり Source を decorate していくだけで十分だ。
- 要約:
Stream.prototype.map = (selector) -> new Stream(new MappedSource(this.source, selector))
- RxJS のバカバカしい
subscribe
/_subscribe
/subscribeCore
が不要になる。
- クラス名のほかにメソッド名もいくつか異なる。たとえば
subscribe
はobserve
。 Stream.prototype.observe
は Promise を返す。RxJS の Observer の onCompleted および onError のかわりに Promise が使われる。- 要約:
Stream.prototype.observe = (onNext) -> new Promise ...
- 要約:
- RxJS と異なり、すべて非同期。
observe: -> new Promise ...
なので。 - RxJS と同様に Cold / Hot の考え方は存在する。基本的には似たようなチェーンを構築する。
- RxJS と異なり、 Subject や ConnectableObservable 相当のものが存在しない。
- 大丈夫か?
- ReplaySubject をどう実装すれば良いのか分からない。
- RxJS と異なり、
share()
相当のものがmulticast()
として存在する。- 大丈夫か?
observe()
を複数したい場合の取りこぼし。publish()
やreplay()
やshareReplay()
をどう実現するのか。
いろいろ気になるけど、参考にしつつ、自分なりに Rx ライブラリを書こうとすると、どうしてそういう形になっているのか分かってきて良い。
Splatoon 30 min/d
今日はおやすみ。昨日 (2015-11-24) やりすぎているので。
comic 1 episode/d
ヒストリエ (39) 故郷カルディア・ 4 。エウメネスとトルミデスとの再会。トルミデスの家に泊めてもらうことに。サテュラっぽいネコ。そしてヒエロニュモスとの再会。相変わらずダメそうな感じだ。エウメネスの育ての父母の墓参りに。墓には彼の姿が刻まれていた。エウメネスは父母に感謝する。
ナルト (380) 六人のペインの謎はまだ解けないまま。サスケ以外がキサメに足止めされるサスケ・イタチの再戦か。木ノ葉メンバーは暁のひとりと戦いはじめる。