ruby-trunk-changes r53376 - r53387

今日は標準添付ライブラリ forwardable.rb の不具合修正と最適化、定数テーブルの内部実装の変更、新たな HTTP ステータス 451 "Unavailable For Legal Reasons" の標準添付ライブラリでの対応の追加などがありました。

normal: r53376 2015-12-30 05:19:14 +0900

クラスの定数を管理するテーブル rb_classext_t::const_tbl を st_table から rb_id_table による実装に変更しています。 若干メモリ使用量を削減する効果がある模様。 [ruby-core:72112] [Feature #11614]

normal: r53377 2015-12-30 05:21:17 +0900

r53376 の ChangeLog エントリを追加しています。 [ruby-core:72112] [Feature #11614]

nobu: r53378 2015-12-30 08:44:01 +0900

拡張ライブラリ stringio の StringIO.new の引数についてのテストを追加しています。 [ruby-core:72585] [Feature #11920]

nobu: r53379 2015-12-30 09:20:03 +0900

Kernel#open のテストに不正な mode 引数を渡した時の assertion を追加しています。 "b" と "t" は排他的なので同時に指定すると ArgumentError になります。 [ruby-dev:49465] [Feature #11921]

nobu: r53380 2015-12-30 09:58:58 +0900

Module#prepend で Module を差し込んだ時に Module#< や Module#> で比較した時の結果がおかしかったのを修正しています。 Module#include は対象の Module/Class の上流に別の Module を差し込みますが、Module#prepend は前に入れるので、順序を逆に判定します。つまり A.prepend B したら B < A が true。 [ruby-core:72493] [Bug #11878]

nobu: r53381 2015-12-30 11:18:44 +0900

標準添付ライブラリ forwardable.rb で動的に生成するメソッドが args と block が引数として受け取るようになっているため、accessor に args や block があるとメソッドのほうでなく引数(ローカル変数)のほうを参照してしまう不具合を修正しています。 accessor の呼び出しにかっこをつけて明示的にメソッド呼び出しとして parse されるようにしています。 [ruby-core:72579] [Bug #11916]

nobu: r53382 2015-12-30 11:26:15 +0900

r53381 の修正についてのテストを追加しています。

nobu: r53383 2015-12-30 11:28:59 +0900

標準添付ライブラリ forwardable.rb で module_eval や instance_eval で動的メソッドを定義する時に文字列をそのまま使うのではなくて、RubyVM::InstructionSequence.compile で一旦 ISeq にコンパイルしてから eval するようにしています。またこの時 trace_instruction: false で trace 命令の除去や tailcall_optimization: true で末尾呼び出し最適化の有効化などを行うようにしています。 またこれにあわせて accessor の呼び出しで例外が発生した時のバックトレースの調整を delegate しているメソッド自体の呼び出しでの例外発生時には行わないようにしています。

nobu: r53384 2015-12-30 16:43:25 +0900

String#ord のテストを追加しています。今までなかったみたいですね。 https://github.com/ruby/ruby/pull/1181

hsbt: r53385 2015-12-30 20:26:09 +0900

doc/syntax/calling_methods.rdoc の safe navigation operator の説明が .? の記法のままになっていたので &. に修正しています。 https://github.com/ruby/ruby/pull/1182

hsbt: r53386 2015-12-30 20:45:52 +0900

標準添付ライブラリ webrickWEBrick::HTTPStatus::StatusMessage に HTTP ステータス 451 Unavailable For Legal Reasons を追加しています。法的/政治的な理由で検閲によりレスポンスが返せないということを表すために最近追加されたってやつですね。 https://github.com/ruby/ruby/pull/1167 参考URL: https://tools.ietf.org/html/draft-tbray-http-legally-restricted-status-00

hsbt: r53387 2015-12-30 20:53:15 +0900

標準添付ライブラリ net/http でも 451 を表すクラス Net::HTTPUnavailableForLegalReasons を導入しています。