ruby-trunk-changes r48275 - r48285

今日は String#lstrip!, rstrip! の終端文字の扱いの修正や、いくつか C-API の関数の deprecated に指定する変更などがありました。

nobu: r48275 2014-11-05 10:54:22 +0900

文字列オブジェクトのバッファの実装が、エンコーディングUTF-16 などの時は終端のNUL文字も多バイトでないといけないのに、String#lstrip! や String#rstrip! の実装が終端文字を '\0' 固定にしていたので修正しています。

svn: r48276 2014-11-05 10:54:35 +0900

version.h の日付更新。

nobu: r48277 2014-11-05 12:13:55 +0900

String#lstrip で dup してから lstrip! したり、String#strip で lstrip と rstrip の関数を呼び出したりして無駄なコピーが行われていたのをそれぞれのメソッド定義の関数で必要な部分のコピーだけ行われるようにしています。

nobu: r48278 2014-11-05 14:11:33 +0900

ビルド時に BASERUBY が使えない時は lib/unicode_normalize/tables.rb の自動生成をしないようにしています。Unicode データの更新のために拡張ライブラリが必要なので実行できないそうです。

nobu: r48279 2014-11-05 14:19:15 +0900

標準添付されている rake の lib/rake/cpu_counter.rb で Etc.nprocessors が使える時はクラスの実装自体を大幅にすげかえて他の不要なメソッド群の定義もしないようにしています。

nobu: r48280 2014-11-05 15:05:14 +0900

r48275 の続き。 String の実装では rb_str_substr() で文字列の途中の部分文字列を作った時に NUL-終端させない文字列ができてもいいようにしようとしていて、SHARABLE_MIDDLE_SUBSTRING というマクロが非0に定義されていたら String#lstrip!, rstrip! などでも終端文字の書き込みをしないようにしています。

nobu: r48281 2014-11-05 16:27:02 +0900

rb_clear_cache() という C-API を deprecated にマークしています。

nobu: r48282 2014-11-05 16:55:54 +0900

deprecated として警告を出力していた C-API の rb_f_lambda() の定義を削除しています。ヘッダの宣言は既に削除されてたみたいですね。

nobu: r48283 2014-11-05 17:20:31 +0900

C-API の rb_disable_super() と rb_enable_super() を deprecated にマークして実行時でなくコンパイル時の警告にするようにしています。 rb_{enable,disable}_super() ってなんだっけ。まったく思い出せない…。 日記にもないので ruby-trunk-changes 書きはじめる前に既に deprecated になってたっぽいですね。 doc/ChangeLog-1.8.0 に書いてあるから 1.8 系の時か。

akr: r48285 2014-11-05 19:24:53 +0900

標準添付ライブラリ webrickWEBrick::GenericServer#start で shutdown 時にループから return で抜けてたのを break 文に修正しています。 まあ while ループから抜けたら ensure 節の後始末処理だけなので実際の処理の流れは同じだと思うのですが…と思ったら JRuby では LocalJumpError が発生する場合があるみたいですね。 [ruby-core:66085] [Bug #10478]