RubyKaigi3日目に行ってきた

The OMR GC Talk


OMRというランタイム

  • 多くの言語に対応している
  • (plugin機構で実現?)

調査はこれを使っていた模様 https://www.ibm.com/developerworks/jp/java/library/j-ibmtools5/

allocationを早くした

  • スレッドローカルヒープ
  • ロック無しでallocate

可変長のバッファを作る OMRのランタイム上で動作するGCがMRIに比べてよかった

GCのmark速度は早い(MRI)

OMR GCを確認するのはこれ https://github.com/rubyomr-preview/rubyomr-preview

Refinements - the Worst Feature You Ever Loved


method aliasとかモンキーパッチだと元の動きの振る舞いが全体に影響するからよくない

assertとかの振る舞いもかわってしまう

refinementsなら影響範囲を制御できる

スコープは働くので継承とかcalss_evalでも有効

文字列で与えたもので使えるeval ‘using SomeClass; hoge.fuga’みたいな感じなの

Discussion on Thread between version 1.8.6 and 2.2.3


Thread#status スレッドの状態が取れないような状況が起きた →mission crtalなシステムでも使えるThreadの使い方

  • 子スレッドでforを同期的に上がった場合
  • 同期的にraiseが上がった場合

Ruby2.2.3でも早くなったけど、CPU負荷も上がった 実行回数は変わらなかった

raiseのインスタンスは重い メモリ消費は少ない selectで対応することができる

早くなったけど、リソース消費も多いのでスレッドとかはメモリ消費量を意識したほうがよい

Plugin-based software design with Ruby and RubyGems


  • 多くの機能
  • コアコードがシンプル
  • testが簡単
  • developerコミュニティが活発

デザインパターン

  1. ホストアプリを拡張する(拡張ポイントを用意している、コールバックで実行)
  2. DIでプラグインを追加(I/Fとか決めてDIコンテナを置き換え、ホストからアプリを実行)
  3. 動的にプラグインをロードする方法
  4. 1と2を組み合わせる方法

プラグインのバージョンコントロール(依存ライブラリのコンフリクト解消)

fluentdは動的にpluguin emblukは組み合わせ

Actor, Thread and me


アクター

  • メッセージを適当なタイミングで送る
  • レシーブ
  • 仕事をする

破綻の予兆

  • 複数のイベントを待つ
  • DBへの問い合わせとか
  • 資源の協調