rubykaigi2014 一日目(途中までのメモ)
メモ程度に
RubyKaigi 2014 | Building the Ruby interpreter -- What is easy and what is difficult?
Ruby Interpreterの責務はクオリティを高めることと考えている。
- 信頼性、高パフォーマンス、消費リソースが少ない、互換性、拡張性
これらの品質はそれぞれトレードオフが発生。例えばパフォーマンスは信頼性や少リソースと相反することが多い
*トレードオフに対して我々開発者が必要なこと。トレードオフを認識し、トレードオフに打ち勝つこと
- トレードオフに打ち勝つ どっちもよくなる方を取る
- スレッドプログラミングは難しい
try and research
Rubinusは後でGobiesVMとかと一緒に試してみる。
RubyKaigi 2014 | Symbol GC
- 現状すべてのSymbolはGCされない
- Symbol
- 内部でIDという一意の数値をもっていて、比較はこの数値を比較することによって高速に行うことができる
- freeze した文字列は同じIDを持っている
- なぜGCできないのか?
- C extensionので生成されたsymbolが問題(SYM2IDでIDを保持している時とか)
- 一貫性が保てない
- Immortal Symbol(Cの世界)とMotal Symbol(Rubyの世界)に分ける
- Motal SymbolのみGC対象
- Motal SymbolにIDを持たせない
- Motal Symbolはfreezeされた文字列へのメモリアドレスを保持する
- すべてのSymbolがGCされない
- MortalからImmortalになることもあるので、要注意
- Symbol.all_symbols.sizeでSymbolの数は確認する
try and research
- Symbol.all_symbols
RubyKaigi 2014 | Eliminating Giant VM Lock in Ruby through Hardware Transactional Memory
ココらへんのお話
GVLをHTMに置き換える
- HTMのトランザクションを使う
try and research
- 試そうと思ったけど、自分MBAのCPU対応してなかった。。。