1. プログラム プログラム名: Language Update Ruby (タイトル: What's Hot in Ruby) 発表者名: まつもとゆきひろ (株式会社ネットワーク応用通信研究所) 記録者名: 高橋征義 2. 時間 開始時刻: 11:37 終了時刻: 12:05 (質疑応答: 11:56 〜 12:05) 3. 発表の概要、論点 1.8.0での変更点は比較的小規模なもので、高速化、文法の整理、標準ライブラリの強化などが行われ、予定されていた国際化、世代別GCの実装は持ち越しになった。 1.9では、前述の2点に加え、2.0に向けての仕様面での変更も行われる予定。更に2.0では、組み込みを意識し、インタプリタを新しくする予定。 4. 発表の流れ、内容 == プレゼン以前 (リブート中) 画面はないまま話を始めようかと 昨日は24:00すぎまで「まつもとさんを囲む会」があった ぼこぼこにされる会でした(笑) Pythonのプレゼンの文字列置換をすれば1/3くらいは使える(笑) 前にぼくのしたプレゼンと同じ (PCなしで説明を開始) Ruby 1.8.0が出ました しかし、アップルのひとと非公式に話したところでは、新しいMac OS Xへの収録はどうも間に合わなさそう 出したらすぐにバグが見つかった (まだブート中) == 質疑応答・前編 先に聞きたいことあるひとは手を挙げてください Q. 1.8.0のリリース後にバグが結構見つかった 安定版みたいなものは出るのか? A. まだ未定 1.8.1か1.8.0の補足版として出す Q. Parrotとかどうですか A. 将来はRubyの実装系は複数になる まつもと版、JRuby、Parrotの上で動くものも出る Parrotの方がパフォーマンスが良かったら、みんなparrot版を使うかも その場合はまつもと版がreference implementation Q. Parrotをつかうとインデントを使わないPythonとか endがなくて{}を使うRubyとかもできるかもしれないが、それでもRubyと呼ぶか A. 好きに名前をつけてください PonieでもTailでも(笑) (画面が出る。プレゼン再開) == 1.8.0 1.8.0が出ました === 1.6のリリースから3年かかった Pythonに比べると遅いリリース === 大規模な変更は先送り 「引き延ばしのまつもと」 * 世代別GC これで博士論文書いた人もいる、将来は入れる * 国際化 == 高速化 === 文字列の結合・置換 今までは文字列の結合・置換にreallocを多用していた reallocの性能を信じていたんだけど、減らしたら早くなった === 入出力 入出力もちょっとだけ早くなった === 一部遅くなった チェックとか、よりきめ細かい(より親切な)作業を行うようになった その分、遅くなったところもある 文字列結合が多いスクリプトは、1.8で動かすと劇的に早くなる == 文法の整理 文法は変化するのがRubyです いろいろ変わりました warningが出たら直してください Rubyはコアの仕様が圧倒的に大きい「勝ったな」(笑) === 多重代入 多重代入のルールは、より訳が分からなくなった(笑) === メソッド引数の括弧 メソッド引数の括弧のルールも複雑になった わけがわからないけれど、なんとなく自分の思った通りに動く === breakとnextの引数 breakとnextで引数が使えるようになった イテレータから値を渡す(もしくは返す)のに使える == Hookの追加 すごいコアの話なんですけど メソッドコールなどではhookが呼ばれている 一貫性のためにはもっとたくさん呼ばれるべきだろう、ということでいっぱい追加された * method_removed * medhotd_undefined * singleton_removed * singleton_undefined * const_missing Pythonでいうところの __setatrr__ と同じような働き ただし設計思想が違うので、まるっきり同じ訳ではない == 標準ライブラリの強化 とはいえ、他の言語と比べるとRubyはまだ2MBしかない それでも1.6の倍になった === allocation framework オブジェクトがどういう風に割り付けられるのか 1.6までクラス毎に適当に書いていた Ruby全体としてこういうふうにしてくださいねという作法を決めた 標準的に使われるようになってきている 1.8に標準でついてくるライブラリは全部対応 === 36進数までの数値文字列変換 以前イベントで出された課題で、9進数に変換するというものがあった こういうスクリプトも今のRubyなら一瞬で書ける(笑) === 数学関数の追加 ベッセル関数は? まだ話し合いの途中 POSIXなんちゃらには入っているとかゆわれる 難しいことは私にいわないでください == 新ライブラリ PHPは素晴らしい いっぱいインストールされている PHPを持ってくるとみんな欲しいものはついてくる Rubyでもこれに倣おう お互いに影響を与えるのはすばらしい === REXML なんとなくDOMに似ているXMLライブラリ === YAML 「YAML ain't markup language」再帰的な定義 メタデータ記述言語 文字データで定義する Perlなどで使われ始めた 最初に標準にバンドルされたのはRuby 「勝ったな」(笑) === xml-rpc === open-uri === stringio 「なんとか(ライブラリ)」をインストールしなくてもよくなった 実際にはRAAとか、raa-install(勝手にダウンロードしてコンパイルしてインストールしてくれるツール)とかもある == 1.9.0 やっと1.8シリーズから解放される リリースエンジニアリングは苦痛「なんでぼくが」 テストが足りない バグがある 1.8のメンテはどうか他のひとにやってほしい === 2.0への仕様的移行 2.0は実装そのものを書き換えての以降 1.9は仕様レベルでの移行 バックワードコンパチビリティを犠牲にしても変更する 実装と仕様をいっしょにやるとバグなのか仕様なのか分からなくなる 2.0はみなさんは使わないかも わたしはやりたい == バージョニングルール 旧ルールの問題点を解決 Rubyは一桁なので、X.Y.Zのバージョンは貴重 X.Y.0 は開発版、 x.x.1からが安定版 1.8.0は安定版として出したんだけどバグが残っている。どうしよう 「ゼロは危ない」Rubyではルール化する == 2.0 (Rite) vaporware最長記録を更新中 現在のRubyは他のライブラリを組み込むには便利だとほめられることが多いが、逆は問題となっていた 1.9と並行開発できるといいな 5. 質疑応答・議論の流れ、内容 Q. 1.6.9のリリース予定は? A. ないです。ないです。 Q. Panther(Mac OS X)に載らないのは確定? A. 入れないみたいだけど、引き続き話をしてみるね 一縷ののぞみをたくしている Q. PythonのMLでまつもとさんの名前を見掛けるが、Pythonの気に入らないところ、ぱくりたいところは? A. OSCONでPerl6やPython2.3の話を聞く みなさん次第にRubyに近づいてくるな(笑) 言語のコアについては現時点でいただいてくるものはない ライブラリやCPANみたいなものについてはなんとかしたいな ぼくはしないんだけどね Q. Windows版のインストーラはなんとかならないか A. ぼくじゃないひとに聞いた方が ActiveStateは「儲からないから駄目」 Andyのインストーラは? (質問者:「知らない」) Q. 1.8.0は載るとバグが多いのでは? A. 1.8.0そのままではリリースされない Ruby COCOAもいっしょに載せたい Q. ぜひ載るように祈ってます A. 僕も祈ってます Q. 前にMSの方と話をされたような話を聞いたが、.NET対応は? A. .NETについてはOOPSLAとOSCONで話をした CLRの上で動くRubyを用意するのではなく、JavaでいうところのRNJI、これの.NET版を作る そのプロジェクトはすでに始まっている 誰かが作ってくるのは応援する Q. まつもとさんは海外にも顔が広いですが、Larry WallとかGuidoとかの印象は? A. 30人いるくらいの中で、 LarryとGuidoといっしょにごはんを食べた ぼくたちの仲は悪くないです (注) この夕食会のスポンサーはマイクロソフトだった。 ここに爆弾を仕掛けられたらオープンソースの危機が(笑)、みたいな冗談を言っていた Guidoはいい人です 趣味が違うのはお互いに明らか 「新しいデジカメが」「固定フォーカスが」みたいな話をしていた みんなどこでも同じ Larry Wallはプレゼンテーションするとすごく面白いけれど、普段のLarryはすごくシャイ なにもしゃべらない Larryは日本語を勉強している 「sun」と入力すると日を含む字がいっぱい出てくる辞書を見せてもらう 「自分で作ったんだ」と言っていた すごい人です 6. 発表の総括 発表にあった通り、Ruby 1.8.0のバグをどうするか、Ruby 1.9.xやRiteをどのように進めるかが課題となっている。 いずれにせよ、1.8.0がリリースされたことにより、先送りになっていた課題に本格的に取り組めるようになったのは一歩前進だと言えるだろう。 7. 所感 まさに「Update」の名の通り、Rubyという言語そのもののイントロダクションは何にもなく、いきなり1.8.0の話から始まった。 他言語の発表と比較して、良くも悪くも特徴的であった。 プレゼンテーション自体は非常に手慣れた感じだった。 8. 特記事項 うまくフォローしていたとはいえ、マシンのトラブルのせいでプレゼンが始まるのに時間がかかったのはマイナスだった。 $Id: p1-ruby.log,v 1.1 2004/03/24 04:00:35 ryuchi Exp $