ruby-trunk-changes r48748 - r48764

今日は Struct で作ったクラスの属性アクセスのメソッドの高速化、文字列のメソッドの実装で終端文字をワイド文字エンコーディングの時に意識するようにする修正などがありました。

normal: r48748 2014-12-10 00:43:49 +0900

Struct クラスから生成したクラスでの attribute のアクセス(参照、代入)を VM 命令を生成することで高速化しています。元は属性の配列をループして探していたので attribute 数が多いと O(n) で遅くなっていたのを、O(1) でアクセスできるようにしています。 VM 命令を動的に構築するとはまた随分思いきった最適化ですね。 [ruby-core:66729] [Feature #10575]

svn: r48749 2014-12-10 00:44:01 +0900

version.h の日付更新。

svn: r48750 2014-12-10 00:44:05 +0900

r48748 で新規追加されたベンチマークファイルの svn property 設定。

usa: r48751 2014-12-10 02:51:43 +0900

open-uri と net/http のテストで SSL の検証失敗した時に Windows 環境では Errno::ECONNRESET が発生して期待したログがダミーのサーバ側で残らない可能性があるのでチェックを省くようにしています。

nobu: r48752 2014-12-10 09:38:43 +0900

thread.c の再帰チェックで、メソッド名の ID の取得を recursive_list_access() から exec_recursive() に引き上げて recursive_pop() のエラー時のメッセージに同じ名前を利用するようにしています。 r48744 の続きだと思います。 [ruby-core:66742] [Bug #10579]

nobu: r48753 2014-12-10 09:40:17 +0900

ワイド文字のエンコーディングの文字列の chomp などの操作の C API のテストで失敗時のメッセージにエンコーディング名を出すようにしています。

nobu: r48754 2014-12-10 13:39:29 +0900

r48748 の Struct の高速化で rb_method_for_self_aref() と rb_method_for_self_aset() で rb_iseq_t で構築した ISeq を返していたのを VALUE 型で返すようにして GC から保護するようにしています。 RB_GC_GUARD() はローカル変数にしか意味がないとのこと。そうだったのか…。 [Feature #10575]

nobu: r48755 2014-12-10 13:39:45 +0900

ワイド文字エンコーディングの文字列操作関数のテストで lstrip! rstrip! のテストが UTF_16BE でのみ実施されていたので全てのワイド文字エンコーディングについて実施するようにしています。

nobu: r48756 2014-12-10 16:48:17 +0900

r48753 および r487535 でテストをいじっていたあたりのワイド文字エンコーディングの文字列の操作で rb_str_chomp_bang() から chompped_length()、chomp_rs() などの関数を切り出すリファクタリング

nobu: r48757 2014-12-10 16:48:21 +0900

String#+ や String#split の実装で中間データとして文字列オブジェクトを余分に生成せずに最終的な文字列オブジェクトを生成してそのバッファに結果を詰めるように最適化しています。

nobu: r48758 2014-12-10 16:48:34 +0900

String#+ の実装で終端文字がワイド文字エンコーディングを意識しないで nul 文字を入れていたのを修正しています。

nobu: r48759 2014-12-10 16:48:43 +0900

String#* の実装でも終端文字のワイド文字対応をしています。

nobu: r48760 2014-12-10 16:48:48 +0900

String#chomp! の実装でも終端文字のワイド文字対応をしています。

nobu: r48761 2014-12-10 16:48:56 +0900

String#chop! の実装でも終端文字のワイド文字対応をしています。

nobu: r48762 2014-12-10 16:49:10 +0900

String#slice などの実装でも終端文字のワイド文字エンコーディング対応をしています。

nobu: r48763 2014-12-10 21:09:49 +0900

String#sub! の実装でも終端文字のワイド文字エンコーディング対応。

nobu: r48764 2014-12-10 21:26:11 +0900

String#delete!の実装でも終端文字のワイド文字エンコーディング対応をしています。