ruby-trunk-changes r33049 - r33069

今日は VM の最適化についての改善などがありました。

ngoto:r33049 2011-08-25 01:23:23 +0900

PTY.open を用いたテストで Solaris では master 側の IO が端末でないので、IO#echo= でエコーバックを抑制する操作を slave 側の仮想端末に行うようにしています。 [ruby-dev:44420] [Bug:#5222]

svn:r33050 2011-08-25 01:23:27 +0900

version.h の日付更新。

ngoto:r33051 2011-08-25 01:41:12 +0900

FileUtils の chmod のテストで *BSD が sticky bit の操作が無視されるのでスキップしていたところは Solaris でも同じ挙動のようなのでスキップ条件に追加しています。

tenderlove:r33052 2011-08-25 06:14:44 +0900

Psych による to_yaml で引数を省略した時に返す文字列のエンコーディングUTF-8 にするように明示的に指定しています。

tenderlove:r33057 2011-08-25 06:54:27 +0900

psych のバージョン番号を 1.2.0 -> 1.2.1 に上げています。また gemspec ファイルの情報も更新しています。
gemspec の記述方法(文字列リテラルの記法など)が変更されているのは何か自動化ツールを変更したんですかねぇ。

ko1:r33059 2011-08-25 07:02:03 +0900

VM の最適化についての修正です。四則演算や比較演算のような演算子のように見えるものは、Ruby では実際にはメソッドなのですが、Fixnum とか Float などの基本的なオブジェクト同士の演算では本当にメソッド呼び出しをすると遅いので、VM の命令処理で最適化が行われて組み込みの処理が実行されるようになっています。しかし Fixnum などのクラスのメソッドでさえも再定義することが可能なので、もしも再定義されたらフラグを立てて、しかたないので実際のメソッド呼び出しをします。これまではこの再定義フラグがメソッドの種類毎に管理されているだけだったので、たとえば Fixnum#+ を再定義してしまうと 1.0 + 2.0 とか "aaa" + "bbb" など別のクラスの演算もメソッド呼び出しになってしまっていたので、クラス毎の区別もビットフラグとして持つことで、よりきめ細かく再定義済みかどうかを判定できるようにしています。
改造のネタはいろいろあるものですね。

marcandre:r33060 2011-08-25 07:57:42 +0900

Numeric#round の rdoc 用コメントのちょっとした修正をしています。

marcandre:r33061 2011-08-25 07:57:55 +0900

負の整数に対する Integer#round で絶対値が大きくて Bignum だった場合の丸め方向が間違っていたのを修正しています。 [ruby-core:39096] [Bug #5228]

ko1:r33064 2011-08-25 08:37:56 +0900

ブロック呼び出しを含むメソッドの ensure 節で作成した Proc オブジェクトの call メソッドを呼ぶと "unexpected break" というエラーが発生する問題の対処をしています。 dfpVM のスタックからヒープに移動させられた時に dfp が変更されるのでそれに errinfo を追随させるようにしています。我ながら意味不明な説明ですね……。これは workaround で rb_throw() などの仕組みを変更することで抜本的な改造をしたいけど複雑で難しいよ、ということだそうです。 [ruby-core:28132] [Bug #2729]

drbrain:r33065 2011-08-25 09:29:02 +0900

OpenSSL::Digest の rdoc 用のコメントを追加しています。 [ruby-core:38833] [Bug #5166]

drbrain:r33066 2011-08-25 09:43:45 +0900

ext/openssl/lib/openssl/*.rb のファイルの Copyright のコメント部分を rdoc の処理対象外にするように "#++" コメントの前に収めるようにしています。

nobu:r33069 2011-08-25 22:18:11 +0900

新規追加されたファイルの svn property の変更です。