ruby-trunk-changes r58532 - r58541

今日は fd のイベント待ちの関数の不具合(?)修正などがありました。

nobu: r58532 2017-05-02 00:17:32 +0900

fill_thread_id_string() という rb_thread_t を文字列化するマクロで何もしない定義の時に警告除去のために (void*) へキャストするようにしています。

svn: r58533 2017-05-02 00:17:33 +0900

version.h の日付更新。

kosaki: r58534 2017-05-02 11:19:32 +0900

fd が操作可能になるまで GVL を離して待つ nogvl_wait_for_single_fd() で poll(2) を使う時に、第3引数の timeout に 0 を指定していたのですぐに処理がかえってきていたので -1 を指定してイベント発生まで待つようにしています。これずっと待ってもいいのかな…。signal を受信したら EAGAIN で起こされるからいいのかな。別 Thread からの raise の時とかって signal が飛ぶんだっけ。ああ、それは ubf (unblocking function) によるけど、IO待ちの時は ubf_select() なので SIGVTALRM を使うようにしていますね(pthread 版の時)。

normal: r58535 2017-05-02 11:40:46 +0900

SizedQueue や ConditionVariable など元 thread ライブラリのクラスのベンチマークスクリプトを追加しています。

svn: r58536 2017-05-02 11:40:47 +0900

r58535 で新規追加したファイルの svn property 設定。

duerst: r58537 2017-05-02 14:15:04 +0900

lib/unicode_normalize/normalize.rb 内で UnicodeNormalize.unicode_normalize の呼び出しを String#unicode_normalize として呼び出せるようにメソッド追加して、lib/unicode/normalize.rb でそれを期待して UnicodeNormalize が未定義の時は require "unicode_normalize/normalize" してから再度 String#unicode_normalize を呼び出すようにしています。うーん、トリッキーな感じがしてちょっと、わざわざ UnicodeNormalize のメソッドを明示的に呼び出すのをやめる必要があるのか疑問ですね。

duerst: r58538 2017-05-02 14:34:25 +0900

unicode_normalize! や unicode_normalized? も同様に lib/unicode_normalize/normalize.rb で String にメソッドを追加するようにして lib/unicode_normalize.rb で同じメソッドを再度呼び出すようにしています。

duerst: r58539 2017-05-02 14:46:31 +0900

r58537 および r58538 の lib/unicode_normalize.rb で String#unicode_normalize{!?} の中で require "unicode_normalize/normalize" しているところで UnicodeNormalize が定義済みかどうかで分岐していましたが、require は重複しても無視されるので条件分岐をやめています。確かに UnicodeNormalize という名前の定数に何か値が入ってたらただの無限再帰になってしまいますしね。

nobu: r58540 2017-05-02 16:35:20 +0900

C の文字列リテラルによるメッセージ(rb_str_new_static() を使ってヒープを消費しない文字列オブジェクトを使う)の例外を発生させる rb_raise_static() というマクロを導入して、special_const_to_float() でこれを利用するようにして不要なメモリ消費を抑えるようにしています。

kazu: r58541 2017-05-02 20:26:28 +0900

sample/dir.rb というサンプルでファイル名をチェックする正規表現で ^$ のかわりに \A\z を利用するように修正しています。