ruby-trunk-changes r38166 - r38187

今日は Ruby VMオペランド融合による最適化が有効になりました。また RDoc の機能追加や Fiddle の DL との互換性の向上などがありました。

kazu:r38166 2012-12-04 00:08:00 +0900

NEWS ファイルの体裁の修正。

svn:r38167 2012-12-04 00:08:07 +0900

version.h の日付更新。

drbrain:r38168 2012-12-04 04:12:03 +0900

rdoc が処理する対象を記述する .document ファイルに NEWS と doc/NEWS-?.?.? の過去の NEWS ファイルたちを追加して、これらのファイルの1行目に modeline を追加/修正しています。

drbrain:r38169 2012-12-04 08:32:39 +0900

RDoc が "class:PageName" のような記法(これが何を表わしているか知らないんですけど……)でページ名のところに拡張子がついていてもいいようにしているようです。

drbrain:r38170 2012-12-04 08:34:17 +0900

README.EXT と README.EXT.ja を RDoc のマークアップ記法で書くように変換して modeline も Text -> RDoc に変更しています。

naruse:r38171 2012-12-04 10:01:34 +0900

parse.y で parser->enc を利用しているところを current_enc に置き換えています。 current_enc はマクロで parser->enc に展開されるので内容には変化ありません。

naruse:r38172 2012-12-04 10:01:37 +0900

Net::HTTP.proxy_class? で未初期化のインスタンス変数を参照する可能性があったので存在チェックして、結果は必ず true or false で返すようにしています。 [ruby-core:50470] [Bug #7494]

ko1:r38173 2012-12-04 13:57:50 +0900

Ruby VMオペランド融合の最適化を有効にしています。 オペランド融合というのは命令と特定のオペランドの値の組合せを特別な命令としてしまって、引数(オペランド)の取り出しを省くことによる高速化だったと思います。 とりあえず元々定義されていた融合はいくつか削って getlocal, setlocal, putobject とあるオペランドの組合せだけ融合した命令を生成するようにしています。 るびまの連載YARV Maniacs にあるかと思ったけどオペランド融合についてはなさそうですね。また insns.def の命令の実装の部分でループカウンタとその上限値に rb_num_t と VALUE を使っていたのをそれぞれ int にして警告除去しています。

nobu:r38174 2012-12-04 16:23:20 +0900

marshal.c で GC のマーク漏れに繋がるコンパイラ最適化の抑制のために volatile をつけていた変数を RB_GC_GUARD() で保護するようにしています。 また variable.c でも RB_GC_GUARD() による保護を追加しています。

nobu:r38175 2012-12-04 16:23:25 +0900

marshal.c でメソッドを呼べるかどうか rb_obj_respond_to() でチェックして rb_funcall2() で呼ぶという処理をしているところがいくつかあり、それらを rb_check_funcall() でまとめて実行するようにしています。

nobu:r38176 2012-12-04 16:23:34 +0900

marshal.c で定数の探索に失敗した時の ArgumentError のメッセージに文字列オブジェクトを埋め込むのに %PRIsVALUE という指示子を使うように変更しています。

nobu:r38177 2012-12-04 16:24:21 +0900

svn property の変更の時のコミットメッセージなのですが、実際は r38144 の ChangeLog エントリの typo 修正じゃないかと思います。

drbrain:r38178 2012-12-04 16:50:48 +0900

RDoc に ChangeLog のパーサを追加しているようです。ほほう。

drbrain:r38179 2012-12-04 16:54:13 +0900

r38168 で .document に doc/NEWS-?-?-? を追加しましたが doc/NEWS-* という記法でまとめています。また doc/ChangeLog-* も RDoc の処理対象に含めています。

nobu:r38180 2012-12-04 16:57:58 +0900

今度こそ r38179 で追加されたファイルの svn property 設定。

kazu:r38181 2012-12-04 17:39:59 +0900

r38171, r38173, r38174 の ChangeLog エントリの typo 修正。

ngoto:r38182 2012-12-04 18:00:23 +0900

拡張ライブラリ fiddle は dl と互換性があることになっているみたいなのですが Fiddle::Import#import の引数の仕様が DL::Function.new と揃っていなかったので、引数を省略できるようにしています。 [ruby-core:50405] [Bug #7484]

ngoto:r38183 2012-12-04 18:08:12 +0900

ext/dl/lib/dl/types.rb から ext/fiddle/lib/fiddle/types.rb に移動してモジュール名などを改名して DL から Fiddle へ移植しています。

ngoto:r38184 2012-12-04 18:55:07 +0900

r38054 で Windows 版で make test-all 時に Fiddle を利用するようにした時に DL との互換性が完全でなかったためにテスト側を修正して対応した部分を revert しています。 r38182, r38183 で Fiddle と DL の互換性を改善した結果不要になった対処を消しているということだと思います。

nobu:r38185 2012-12-04 23:54:21 +0900

r38151 で bitblt と answer の命令については毎回 rb_intern() でシンボル作成するようにしたので template/id.h.tmpl からその2つを削除しています。

seki:r38186 2012-12-05 00:10:17 +0900

erb の出力結果への文字列埋め込みやコンパイラ生成の処理をメソッドとして切り出すリファクタリング

svn:r38187 2012-12-05 00:10:23 +0900

version.h の日付更新。