ruby-trunk-changes r50662 - r50675

今日は拡張ライブラリ objspace にデバッグ用というか内部的な情報を取得するためのメソッドが追加されたり、標準添付ライブラリで Process.clock_gettime を利用する最適化が入ったり、潜在的メモリリークの修正があったりという感じでした。

ko1: r50662 2015-05-29 04:40:04 +0900

拡張ライブラリ objspace に普通は Ruby スクリプトからは直接取り出すことができない T_ICLASS 型のクラス(IClass)を取り出す Objespace.internal_class_of と Objspace.internal_super_of というメソッドを追加しています。

svn: r50663 2015-05-29 04:40:26 +0900

version.h の日付更新。

normal: r50664 2015-05-29 10:40:26 +0900

標準添付ライブラリ net/http と resolv で Time.now のかわりに Process.clock_gettime(Process::CLOCK_MONOTONIC) を利用する最適化(Time.now はオブジェクトを生成するのに対して Process.clock_gettime は即値である Fixnum を返すので GC pressure がないのです)。CLOCK_MONOTONIC が全てのプラットフォームで利用可能のはず、ということで標準添付ライブラリに導入されています。 [ruby-core:69384] [Feature #11124]

normal: r50665 2015-05-29 11:16:50 +0900

r50664 の ChangeLog エントリに ML とチケットの番号を追記。 [ruby-core:69384] [Feature #11124]

normal: r50666 2015-05-29 11:24:18 +0900

拡張ライブラリ socket で MSG_DONTWAIT が利用できる時は fd に fcntl(3) で O_NONBLOCK フラグをセットしなくても non-blocking I/O が利用できるので、冗長な rb_io_set_nonblock() の呼び出しをスキップするようにしています。 [ruby-core:69154] [Feature #11145]

nobu: r50671 2015-05-29 14:39:03 +0900

正規表現の capture の参照を行う $1, $2... などの特殊変数の数字の部分を atoi(3) で数値化していたので、非常に大きな数を渡すとオーバフローしていたので、オーバフローチェックをして大きすぎる時は単に nil の参照にする AST を生成するようにしています。 [ruby-core:69393] [Bug #11192]

nobu: r50672 2015-05-29 14:44:01 +0900

拡張ライブラリ psych でオブジェクト確保と wrap する構造体のメモリ確保の順番を TypedData_Make_Struct() を利用して変更することで潜在的メモリリークの修正をしています。
upstream にも取り込み済みのようですね。 https://github.com/tenderlove/psych/commit/fdf4677ce96f6d73510a76dacbbcdc7e9a7366f5

nobu: r50673 2015-05-29 14:55:02 +0900

拡張ライブラリ openssl でも全体的に wrap する構造体のメモリ確保の前にオブジェクト確保するようにする修正を行っています。 こっちは https://github.com/ruby/openssl には未反映みたいですね。あれってどういう扱いなんだろ。

ko1: r50674 2015-05-29 17:39:50 +0900

tool/make_hgraph.rb というツールを追加しています。IClass や Singleton Class を含むオブジェクトのクラスの instance_of や super の関係を表すグラフを生成する Graphviz 用の dot ファイルを生成するものみたいです。

svn: r50675 2015-05-29 17:40:37 +0900

r50674 で新規追加された tool/make_hgraph.rb の svn property 設定。