ruby-trunk-changes r42734 - r42745

今日は Bignum の乗算が可能なら多倍長演算ライブラリ GMP を利用するようにする変更と、Process.clock_getres という新しいメソッドの追加がありました。

nobu:r42734 2013-08-31 00:25:26 +0900

r41741 で rb_ascii8bit_encindex(), rb_utf8_encindex(), rb_usascii_encindex() など組み込みの Encoding のインデックスを取得する関数をマクロとして定義していたのが include/ruby/encoding.h の関数宣言と衝突していたので、マクロが未定義の時だけ宣言するように修正しています。

svn:r42735 2013-08-31 00:25:32 +0900

version.h の日付更新。

nobu:r42736 2013-08-31 13:30:18 +0900

respond_to_missing? の rdoc コメントに BasicObject のところの例を参照するように追記しています。

nobu:r42737 2013-08-31 13:30:25 +0900

Dir#each などで Mac OS X (ファイルシステムが HFS+)の時にエンコーディングを自動的に変換する時に別の String オブジェクトを生成してその中身だけ取り出して使っていたのを rb_external_str_with_enc() という String オブジェクトを直接受け取る関数を追加してこれを利用することで作った String オブジェクトをそのまま使うようにしています。

nobu:r42738 2013-08-31 13:30:28 +0900

proc.c の umethod_bind() のなかで繰り返しアクセスされる struct METHOD::rclass をローカル変数に代入しておいてそれを使いまわすようにリファクタリングしています。

nobu:r42739 2013-08-31 13:30:30 +0900

proc.c の Module#define_method や UnboundMethod#bind、Method#inspect などで例外を発生させる時の例外メッセージや inspect の結果へ埋め込む文字列を C言語の文字列(char *)ではなく String オブジェクトのまま渡すようにしています。

akr:r42740 2013-08-31 14:07:56 +0900

標準添付ライブラリ securerandom.rb で OpenSSL::Random を使う実装の時に seed を作るために使う時刻の取得を Time.now ではなく Process.clock_gettime を nanosecond 単位の CLOCK_REALTIME で取得するように変更しています。

charliesome:r42741 2013-08-31 14:45:10 +0900

vm_insnhelper.h の CALL_SIMPLE_METHOD() という関数マクロの引数の名前を recv から recv_ に改名しています。このマクロを使っているところではたいてい recv という変数が使われているだろうから、とのこと。まあかぶっていても大丈夫ではあるはずですけどね。

charliesome:r42742 2013-08-31 15:07:21 +0900

VM正規表現のマッチ(=~ 演算子)の最適化命令(レシーバが String の時に直接 rb_reg_match() 関数を呼び出す)で最適化がきかなかった時のメソッドの呼び出しがメソッドキャッシュが訊いていなかったので CALL_SIMPLE_METHOD() を使ってメソッド呼び出しするようにしています。またそのため opt_regexpmatch2 命令に callinfo を渡すようにしています。 [ruby-core:56916] [Bug #8847]

akr:r42743 2013-08-31 21:17:18 +0900

Bignum の乗算に多倍長整数ライブラリ GMP が利用可能なら使うようにしています。 bary_mul() で GMP が使える時は Toom3 アルゴリズムの実装のかわりに GMP を使うようにしています。またこのために configure で libgmp を検出するようにしています。 GMP を使わないようにする --without-gmp というオプションも configure に用意しています。ついに GMP を使うようになったんですねー。

akr:r42744 2013-08-31 22:21:48 +0900

クロック(タイマー)の精度を取得する Process.clock_getres メソッドを追加しています。 Process.clock_gettime と対になるもので同様に clock_id を受け取ってその精度を返すメソッドのようです。 [Feature #8809] [ruby-core:56780]
今日の開発者会議で採用されたようです。

akr:r42745 2013-08-31 22:25:05 +0900

r42744 の ChangeLog に Process.clock_getres は CRuby の(独自の)機能として採用されたことを追記しています。