Ruby 1.9 実装の
現状と今後
日本Rubyの会 /
東京大学大学院
情報理工学系研究科創造情報学専攻
笹田耕一
[email protected]
日本Ruby会議2007
1
まとめ

Ruby 1.9 は鋭意開発中です。

Ruby 1.9 は今年の12月に出ます。
• We are developing Ruby 1.9 .
• Ruby 1.9 will be released on this Dec.
• よっぽどのことがない限り出ます。出します。
• どうぞ使ってください。
2
Agenda

Ruby 1.9 の紹介

Ruby 1.9 の現状

Ruby 1.9 の今後
• おもにバーチャルマシンについて
• 最近の話題など
• 結局 1.9 はどうなるのか
3
Notice

発表者:ささだこういち

本発表について:はじめての挑戦
• いろんな事情があって、漢字の名前で
• お仕事でRuby
• NoRuby, NoLife (NoMoney)
• Windows Vista で MS Office PowerPoint 2007
• 首をしめてプレゼン
4
Ruby 1.9 のご紹介






バーチャルマシンの導入
文法の変更
M17N対応
組み込みクラス、ライブラリの追加・変更
その他、「ぎゃっ」と言わせる変更
1.9.1 が 2007 12/25 リリース
• 昨年のRubyKaigiで発覚した衝撃の事実
5
Ruby 1.9 のご紹介
バーチャルマシンの導入

Virtual Machine (VM) – 仮想機械

構文木インタプリタ→バイトコードインタプリタ
2007年1月1日に導入

• e.g. Java VM, .NET Framework
6
Ruby 1.9 VM
1.8 以前の場合
Ruby Script
Parser
構文木(AST)
評価機(実行)
構文木を
そのまま実行
→ 遅い
Ruby 1.9 VM
全体像
Ruby Script
なんか色々
できる
Parser
構文木(AST)
Compiler
YARV 命令列
VM(実行)
AOT コンパイラ
コンパイルして実行
C プログラム
→速い
JIT コンパイラ
C コンパイラ
機械語
拡張ライブラリ
Ruby 1.9 VM
そのほかの違い

いろんな最適化

ネイティブスレッド対応

新しいデバッガ・プロファイラAPI
• 最近、末尾呼び出し最適化(Tail call optimization)
• 多分、もっとも高速なRuby処理系
• POSIX Thread / Windows
• グローバルVMロックを用いた逐次実行
• 詳細は略
9
10
Ruby 1.9 VM
FAQ






Q.YARV?
A. Yet Another Ruby VM の略 もう忘れて
Q. TRV?
A. The RubyVM の略 俺が言い出したのか?
Q. TRVって呼ぶの?
A. なんでもいいけど もう、Rubyでいいじゃん
11
Ruby 1.9 / VM
FAQ (cont.)






Q. これからのMulti-Core時代、並列(略)
A. ネイティブスレッド対応、だが並列実行しない
• 拡張ライブラリの使えないRubyが使いたいですか?
Q. えー、まだ JITないの?
A. JIT に夢持ちすぎ AOT (Ruby to C) を予定
Q. クラスファイルみたいなものは?
A. あんまり需要がないみたい
12
Ruby 1.9 / VM の紹介
IPA 未踏のご支援

IPA(独立行政法人情報処理推進機構)
未踏ソフトウェア創造事業
• 2004年度未踏ユース
• 2005年度上期未踏
• 2006年度下期未踏 ← イマココ
「Ruby 用仮想マシン YARV の完成度向上」
13
Ruby 1.9 最近の話題から
「継続かわいいよ継続」

Continuation / callcc のサポート

つい出来心で
• 機能の詳細は省略
• 「継続」で検索!
• 実装は 1.8 の green thread と同じ
• 結局誰も使わないんだけど
14
Ruby 1.9 最近の話題から
「Fiberかっこいい」

新機能・Non preemptive thread

Generator を作るのが目的

ほかに応用はあるか?
• 自動的に処理が切り替わらないスレッド
• 詳細は「Ruby Fiber」を検索
• Microthread とか Coroutine とか
• 継続作ったら、なんか作りたくなって
• オーバースペック気味?
• 状態遷移機械?
15
Fiber Puzzle
f1 = f2 = f3 = nil; fr = Fiber.current
f1 = Fiber.new{f2.yield; fr.yield}
f2 = Fiber.new{f3.yield}
f3 = Fiber.new{f1.yield}
f1.yield
16
継続とFiber

そんな機能知らないよ 派
継続かわいいよ継続 派

作るのやめようかなあ 派


• 無いと寂しいです 派
• callcc is so cool!! 派
• Fiberだけあればいいんじゃない? 派
• 不完全な機能しかないんだから使えん
• Fiberもオーバースペックでは? 派
派
このようにするとcoreを吐きます 派
• (継続)なくせばいいんじゃないですか
派
17
Ruby 1.9
開発方針

「2007年12月にリリース!」by Matz
@RubyKaigi2006
開発合宿などで 1.9 の方針決定

実現へ向けて粛々と開発中 ←イマココ

• 「なるべく」互換性を高めるように
• M17N の方針検討
• gem の標準添付
18
Ruby 1.9 の開発風景
開発合宿

主に仕様の議論
2月に松江で開発合宿

6月に東京で開発合宿

ただし、宿は合わせていない
「あと数回やりたいね」by Matz


• 木曜日~日曜日
• 一昨日と昨日
• スポンサー募集
19
Ruby 1.9 の開発風景
或いは仕様変更とのあくなき戦い
(中略)
20
Ruby 1.9
今後

1.9.1 を 2007年12月25日にリリース
• ちょっと品質が悪くてもリリース
• 出来る限りガンバル
• でも、リリースしないと誰も使わない
•
•
→ バグが見つからない
誰も、バグがないなんて思ってない?
1.8.6 レベルまで安定するのは、まだ先
21
まとめ


Ruby 1.9 の開発は粛々と進んでいます。
Ruby 1.9.1 が十中八九12月に出ます。
• どうぞ使ってください。
22
おしまい
ご静聴ありがとうございました
ささだこういち
[email protected]
23
ダウンロード

オブジェクト指向スクリプト言語 Ruby の処理系の刷新