■
RubyKaigi: Building the Ruby interpreter -- What is easy and what is difficult?
Koichi Sasada
キーノートは笹田さんです。
なんと、意外なことに*日本語で*キーノートとしてスピーチするのは初めてとのこと
そして、なんとなんと、明日は結婚記念日(1周年)だそうです!おめでとうございます!!
そして、YARVから10周年(そういえば、未踏で同期だったんですよねー)
アンダースタンディング コンピュテーション―単純な機械から不可能なプログラムまで
- 作者: Tom Stuart,笹田耕一(監訳),笹井崇司
- 出版社/メーカー: オライリージャパン
- 発売日: 2014/09/18
- メディア: 大型本
- この商品を含むブログ (2件) を見る
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-)
- Reserch projects
- Performance
- Parallel
- Profiler
- Community activities
何が簡単で何が難しいの?
mission: Qualityを高める
- Reliability / Availability
- High performance
- Low machine resourcees
- Good compatibility
- Extensibility
これらはそれぞれTrade-offがあるよね
トレードオフに打ち勝つ
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でないコードが書けない
実装によっていろいろ。トレードオフの関係
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
- 作者: Pat Shaughnessy
- 出版社/メーカー: No Starch Pr
- 発売日: 2013/11/22
- メディア: ペーパーバック
- この商品を含むブログを見る
3日目…
質疑
Q: 手伝ってほしいこと
A: 家探してる
並列処理をどうするかが近々の課題だと思っている
Q: 笹田さんがいままでに直面した課題で一番難しくて、これ解決したわーって思えること
A: 世代別GC
泥臭い課題でprocが大変だった
Q:並立処理が得意な言語に任せればよいのではないか
A: 同意するが、 自分でつくったほうが楽しい。自分がつくるかは別としてやると良い仕事だとおもう。