ようちゃんのブログ

ようちゃんのブログはこちらです!

RubyKaigi: Building the Ruby interpreter -- What is easy and what is difficult?

Koichi Sasada

キーノートは笹田さんです。
なんと、意外なことに*日本語で*キーノートとしてスピーチするのは初めてとのこと
そして、なんとなんと、明日は結婚記念日(1周年)だそうです!おめでとうございます!!
そして、YARVから10周年(そういえば、未踏で同期だったんですよねー)

Contributions

  • YARV (1.9~)
  • Native thread (1.9-)
  • Fiber (1.9-)
  • New method cache (2.0-)
  • Flonum(on 64bit CPU) (2.0-)
  • RGenGC (2.1-)
    • Incremental GCの話は明日くらいにでるるびまに書いてる。
  • Reserch projects
    • Performance
    • Parallel
    • Profiler
  • Community activities

何が簡単で何が難しいの?

mission: Qualityを高める

  • Reliability / Availability
  • High performance
  • Low machine resourcees
  • Good compatibility
  • Extensibility

これらはそれぞれTrade-offがあるよね

トレードオフに打ち勝つ

Rubyのすごいところは、豊富な言語機能と書きやすさのトレードオフに打ち勝ったこと
さらいパフォーマンスなどのトレードオフに打ち勝っていきたい

Easy

Serial execution Designing simple VM
シンプルなVMをデザインするだけなら簡単

YARVつくるときはtest caseがあったのでとても助かった。でも、まず、テストフレームワークが動くまで大変だった。

Hard

Keeping productivity
VM code needs many similar codes
Solution: VM code generator

Aggressive optimization
最適化をアグレッシブにやるとRubyの動的な特性によって、その最適化が戻されてします。(ex. method redefinition)

Interoperability with C codes
Ruby -> C Cの領域に入ると、Rubyのコードとの対応がわかりにくくなる

Parallel execution

Easy

並列スレッドを提供するだけなら簡単

Hard

Provide good programming experience

  • 並列プログラミングは難しいよね

interpeter should be robust

  • 同期が難しい

typical bugs

  • Data race
  • Atomicity violation
  • Order violation
  • Non-deterministic nature

並列プログラミングで難しくなってRubyが楽しくなるといやだ

他の言語では…

  • ちゃんと書けばsafe
  • safeでないコードが書けない

実装によっていろいろ。トレードオフの関係

トレードオフ
free() と GC
みたいな関係

Idea

  • MVM: Multiple virtual machines
  • Smaller isolated ruby
  • Introduce "owner thread" for each objects

Make program deterministic
バグがあったら簡単に検出できたほうがいい

GC Performance

GCを書くのは簡単だけど
バグなく実装するのが大変
アルゴリズムは簡単だけど、アルゴリズム以外の面でバグなく動くようにケアすることが大変

GC.verify_internal_consistency

Measurement

実行時間を図ることは簡単だけど
そもそも何を測るのか?

クラウドよりも物理マシンのほうがよい
いろんなOS、複数アーキテクチャ

何を?
discourse benchmark

実行時間?メモリ使用量?(ピーク、平均、中間?)

Development community

コミッターになるのは簡単
ruby developerになるのは難しい
keep motivation and continuous development

Ruby Under a Microscope: An Illustrated Guide to Ruby Internals

Ruby Under a Microscope: An Illustrated Guide to Ruby Internals

3日目…

質疑

Q: 手伝ってほしいこと

A: 家探してる
並列処理をどうするかが近々の課題だと思っている

Q: 笹田さんがいままでに直面した課題で一番難しくて、これ解決したわーって思えること

A: 世代別GC
泥臭い課題でprocが大変だった

Q:並立処理が得意な言語に任せればよいのではないか

A: 同意するが、 自分でつくったほうが楽しい。自分がつくるかは別としてやると良い仕事だとおもう。