ruby-trunk-changes r46499 - r46517

今日は struct RFloat, struct RComplex, struct RHash の構造体を外部に公開しないようにするという割と大きめの変更がありました。拡張ライブラリを作っている人などは要チェックです。

nobu: r46499 2014-06-23 11:11:31 +0900

昨日の r46495 に続き signal.c の check_stack_overflow() でオーバフロー検出した時に、最後の TAG の rb_vm_tag_t が stack pointer と同じメモリページにあったらそれを pop しておくようにしています。 ruby_thread_stack_overflow() で巻き戻す時に再度 SEGV が発生して無限ループ状態に陥るのを防ぐためということですが、このへん TH_PUSH_TAG() の時に fault page に構造体を配置しそうになったらすぐ失敗するようにする変更が前入っていたような…。コンパイラやオプションによってはそれでも push できてしまうことがあるみたいですね。 [ruby-dev:48312] [Bug #9971]

svn: r46500 2014-06-23 11:11:41 +0900

version.h の日付更新。

nobu: r46501 2014-06-23 11:33:15 +0900

init_copy() から T_OBJECT 型のオブジェクトのインスタンス変数をコピーする処理を rb_obj_copy_ivar() という関数に切り出すリファクタリング。 rb_obj_copy_ivar() のプロトタイプ宣言は internal.h に追加されています。

nobu: r46502 2014-06-23 11:35:18 +0900

SystemStackError はあらかじめ用意した例外オブジェクトを利用して raise していたのですが、新たなオブジェクトを割り当てて、r46501 で切り出した rb_obj_copy_ivar() を利用して複製したものを raise するようにしています。 backtrace の情報をセットするために、元の sysstack_error は freeze しておいて、複製にセットすることで使いまわした時に古い backtrace が残ってしまわないようにしているようです。 チケットをみるとどうも backtrace が1行しか設定されなくなっていたので全部セットするようにしたみたいです。全部あったらそれはそれで長くて大変ですけどね… [ruby-core:43794] [Feature #6216]

naruse: r46503 2014-06-23 12:18:17 +0900

obsolete になったため警告が出るようになった URI.extract のテストで EnvUtil.suppress_warning を使って警告を抑制するようにしています。

naruse: r46504 2014-06-23 12:18:51 +0900

標準添付ライブラリ uriURI#port= に文字列を渡すことができるようにしています。

shyouhei: r46505 2014-06-23 13:12:19 +0900

先日の開発者会議で決定された方針として、組み込みクラスのオブジェクトの struct RVALUE の内容を遮蔽するようにするというのがあったようで、ここでは struct RFloat の内容を internal.h に移動して include/ruby/ruby.h では Float の内部実装はみえないようにしています。 [ruby-core:62748]

shyouhei: r46506 2014-06-23 13:41:27 +0900

同じく struct RComplex を internal.h へ移動して、T_COMPLEX 型のオブジェクトの内部構造を遮蔽しています。 [ruby-core:62880] [Feature #9888]
rb_complex_set_real() および rb_complex_set_imag() という関数が追加されていますがいきなり DEPRECATED にマークされていて、コメントにも do not use this. とか書かれているので、直接 real/imag を操作するなってことみたいです。メソッド呼び出しを経由しろってことかなぁ。

shyouhei: r46507 2014-06-23 16:26:03 +0900

struct RHash も internal.h に移動して内部構造を遮蔽されています。おっと RHash もなんですね。デフォルト値(ifnone) やイテレータのネスト回数にアクセスするためのマクロは関数で実装され、rb_hash_iter_lev() と rb_hash_ifnone() は DEPRECATED にマークされています。 rb_hash_size() は今回公開API 化されていますがこれはさすがに使っていいみたいですね。 [ruby-core:62884] [Feature #9889]

knu: r46512 2014-06-23 17:46:11 +0900

標準添付ライブラリ net/imap の Net::IMAP#fetch の rdoc 用コメントに引数 set で範囲を指定する方法について追記しています。

hsbt: r46513 2014-06-23 18:13:14 +0900

tool/rbinstall.rb で bundle gem パッケージをインストールするようにしています。今はまだ存在しないのですが、ソースディレクトリの gems/*.gem があったらインストールするようにしているようです。標準添付で gemspec も持っているライブラリとはまた別の扱いですね。

hsbt: r46517 2014-06-23 18:49:42 +0900

git.savannah.gnu.org から config.guess と config.sub をダウンロードするためのツール tool/config_files.rb を tool/downloader.rb に改名して、クラス名もそれにあわせて変更しています。