blog.bouzuya.net

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 が不要になる。
  • クラス名のほかにメソッド名もいくつか異なる。たとえば subscribeobserve
  • 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) 六人のペインの謎はまだ解けないまま。サスケ以外がキサメに足止めされるサスケ・イタチの再戦か。木ノ葉メンバーは暁のひとりと戦いはじめる。