ruby-trunk-changes r41290 - r41302

今日は tool/config.guess, tool/config.sub という configure で使うツールの管理方法の変更や RGenGC で Class/Module も Write Barrier で保護されるようになって Normal オブジェクトになれるようにする変更などがありました。 GC の性能は向上したでしょうか。

shugo:r41290 2013-06-14 09:53:37 +0900

NEWS ファイルに $SAFE=4 の機能が削除されたこと、untrust, untrusted?, trust が deprecated になったことなどを追記しています。
また doc/security.rdoc から $SAFE = 4 についての記述を削っています。

shugo:r41291 2013-06-14 09:56:52 +0900

r41290 の ChangeLogtypo 修正。

nobu:r41292 2013-06-14 12:21:23 +0900

r41273 で rb_secure() の引数に 4 が渡されていたらコンパイル時にエラーにするようにする gcc 4.4 以降の拡張を使ったしくみで、コンパイラの警告を抑制するため修正しています。カンマで区切った式を書くと警告になっていた模様。

nobu:r41293 2013-06-14 13:01:54 +0900

tool/config.guess, tool/config.sub というファイルをリポジトリ内に含んでいたのを削除して、git.savannah.gnu.org のリポジトリから動的にダウンロードするように tool/get-config_files というツールと common.mk にルールを追加しています。
これはどういう動機なのでしょうね。 config.guess, config.sub の機能がよくわかってないので必要性がよくわかっていませんが、最新版をリポジトリに含めるわけにはいかないのでしょうか。ライセンス関係かな?

nobu:r41294 2013-06-14 13:40:32 +0900

Travis CI 上でビルドするために .travis.yml の設定で autoconf 前に tool/config.guess と tool/config.sub をダウンロードしてくるように make コマンドの実行を追加しています。また tool/config_files.rb のラッパとして tool/get-config_files を追加しています。

nobu:r41295 2013-06-14 14:10:12 +0900

r41294 で追加した tool/get-config_files でダウンロードするファイル名を標準出力に表示するようにしています。

nobu:r41296 2013-06-14 14:10:15 +0900

ちょっと動作原理はよくわかってないのですが、コミットログによると configure を使わないプラットフォームで(主に Windows だと思います) make up ターゲットで make update-cofig_files を実行して tool/config.{guess,sub} をダウンロードしないようにしているそうです。

nobu:r41297 2013-06-14 14:10:17 +0900

configure.in で tool/config.{guess,sub} のそれぞれが存在しなかったらその時に tool/get-config_files を使ってダウンロードするようにしています。

shugo:r41298 2013-06-14 14:35:11 +0900

r41261 で追加した Module#using を NEWS ファイルに追記しています。また untrust 系のメソッドの deprecated についてのエントリの位置をアルファベット順に並ぶようにソートしています。

ko1:r41299 2013-06-14 18:23:54 +0900

RGenGC で Class, Module や内部的に生成される IClass (Module を include した時に継承ツリー上に挿入される Module の代理のクラス)を Shady ではなく Normal なオブジェクトとして扱えるように Write Barrier を挿入しています。これに伴ない struct RClass のメンバには直接は存在しませんがそこからリンクされている構造体の VALUE 型のメンバに const を付けて直接更新することを禁止して、操作する場所で Write Barrier を挿入しています。 RClass は既に割と内部を直接触るのより API を通じて操作することを推奨してきていたので、新たに操作用のマクロを導入したりということはないので、拡張ライブラリからもこれまで通り API を経由して操作するようにすればいいと思います。

ko1:r41300 2013-06-14 18:54:58 +0900

TracePoint の B_RETURN_EVENT によるトレースがブロックから next を使って抜けた時に呼び出されない不具合を修正しています。 VM 命令列へコンパイルする時に trace 命令を挿入する位置がブロック終了のアンカーの前だったため next でジャンプすると trace 命令が飛ばされていたのを修正しています。 [ruby-core:55305] [Bug #8489]

akr:r41301 2013-06-14 20:13:16 +0900

bignum.c の bigdivrem() で ny == 1 の時(y つまり分母側の数値が BDIGIT 1つだけのサイズしかなかった時)に rb_bit_closen(x) で x のコピーを作成していたところを bignew() を使って、ついでに符号の処理も一緒にするようにしています。

akr:r41302 2013-06-14 21:05:38 +0900

bignum.c の bigdivrem() で作成する中間データの Bignum オブジェクトのバッファを、作成後に不要な上位のワードをスキップしていたのを、生成前に検出して無駄なメモリ確保を防ぐようにしています。