ruby-trunk-changes r47625 - r47644

今日は RubyKaigi 2日目でした。 rb_utf8_str_new()/rb_utf8_str_new_cstr() の追加、rb_freeze_singleton_class() の追加などいくつか公開 API を追加しています。

nobu: r47625 2014-09-18 23:51:08 +0900

rb_utf8_str_new_cstr() という C-API を追加して Encoding に UTF-8 を指定した文字列オブジェクト作成のショートカット関数を作成しています。

nobu: r47626 2014-09-18 23:51:45 +0900

拡張ライブラリ json の fbuffer_to_s() で rb_str_new() の引数を FBUFFER_PAIR(fb) で多値みたいに展開していたのでそれぞれの引数毎のマクロにまで展開しています。 rb_str_new() もマクロなのでまずかったらしい。

normal: r47631 2014-09-19 05:37:52 +0900

NEWS ファイルに configure --with-jemalloc オプションの追加について追記しています。

svn: r47632 2014-09-19 05:38:08 +0900

version.h の日付更新。

nobu: r47633 2014-09-19 10:45:45 +0900

r47551 および r47557 あたりからの続きで特異クラスを freeze した時にそこから継承ツリーを遡って freeze してしまわないようにしています。 rb_freeze_singleton_class() という公開 C-API が追加されています。
[追記]ただし rb_freeze_singleton_class() は OBJ_FREEZE() の詳細実装の一部として使うものであって直接使うものではないとのことです[/追記]

nobu: r47634 2014-09-19 10:46:42 +0900

freeze したオブジェクトを変更しようとして発生する例外のメッセージでクラス名のエンコーディングを保持するようにしています。

nobu: r47635 2014-09-19 10:47:06 +0900

test_math.rb で定義している assert_infinity で Float#finite? は NaN についても true を返すため infinite? を利用するようにしています。 [ruby-core:65117] [Feature #10261]

nobu: r47636 2014-09-19 11:01:15 +0900

tainted をチェックする Check_SafeStr() の定義を obsolete にしてエラーメッセージで代替として SafeStringValue() を利用するように表示しています。

nobu: r47637 2014-09-19 11:40:58 +0900

r47633 で追加された rb_freeze_singleton_class() の実装で内部的に利用していて ObjectSpace から隠されているオブジェクトの freeze の時に klass が NULL であることがありえるのを対応するようにしています。

nobu: r47638 2014-09-19 13:55:21 +0900

README.EXT(.ja) に r47625 で追加した rb_utf8_str_new() と rb_utf8_str_new_cstr() について追記しています。

nobu: r47639 2014-09-19 14:53:00 +0900

String オブジェクトでバッファに静的領域を利用するものを作成する rb_str_new_static() と rb_{usascii,utf8,enc}_str_new_static() を追加しています。 struct RBasic::flags に解放不要であることを表すフラグ STR_NOFREE を追加して、書き換えや GC 時に free 処理をスキップするようにしています。C 言語の文字列リテラルを String オブジェクトにする時にそのままその文字列をバッファにすることで不要なメモリ確保を避けるようになっています。 mruby にはあったのでそれを取り込んでみたということだそうです。

nobu: r47640 2014-09-19 14:53:05 +0900

rb_str_new_literal() や rb_{usascii,utf-8,enc}_str_new_literal() を追加して r47639 で追加した rb_str_new_static() を使って実装しています。

usa: r47641 2014-09-19 15:49:56 +0900

Windows 用の make の win32/Makefile.sub で make up が svn もしくは git で管理されていないディレクトリ(パッケージファイルから展開した時などにエラーになってたのでなにも実行しないようにしています。

nobu: r47642 2014-09-19 16:04:35 +0900

r47641 の typo 修正。

nobu: r47643 2014-09-19 20:06:04 +0900

send を使って foo= のような代入記号つきメソッドを呼び出した時に undefined method になっていた不具合を修正しています。 "foo=" のような Symbol を得る時に "foo" の部分が既に static symbol として登録されていたら同じく static symbol 化するようにしています。 "foo=" のような Symbol は :"foo" の ID に対して特定のビットのフラグを立てて表現しているので…というより、attr_writer で定義する時に :foo の部分の Symbol のみ渡すからということかな。 [ruby-dev:48559] [Bug #10259]

usa: r47644 2014-09-19 23:57:33 +0900

r47641 の ChangeLog エントリの typo 修正。