ruby-trunk-changes r44700 - r44707

今日は最近の最適化命令時の仕様の再現不足の修正や fork/spawn などのメソッドでのタイミング依存のデッドロックの恐れのあった部分の追加修正などがありました。

nobu: r44700 2014-01-25 10:55:44 +0900

class.c の rb_obj_methods() を goto 文を使わない書き方にリファクタリング

svn: r44701 2014-01-25 10:55:49 +0900

version.h の日付更新。

nobu: r44702 2014-01-25 11:16:20 +0900

キーワード引数の取り出しを行うユーティリティ関数 rb_extract_keywords() で第1引数の keyword_hash が Qnil の時は 0 (Qfalse) に上書きしておくようにしています。この関数内では keyword_hash が存在しない時は 0 を前提としているのですが、rb_scan_args() が nil を返した時に nil が渡される可能性があった模様。

nobu: r44703 2014-01-25 12:15:30 +0900

insns.def のコーディングスタイルの統一。

nobu: r44704 2014-01-25 14:17:17 +0900

compile.c で obj[key] = のような式を最適化した命令にコンパイルするあたりでキーが文字列の時に fstring にしているのですが、この文字列を mark 対象として登録しておくようにしています。

nobu: r44705 2014-01-25 14:21:07 +0900

同じく obj[key]= のコンパイル時の最適化命令へのコンパイルの際、メソッドの戻り値ではなくて代入の右辺値を評価値にするようにしています。
これは obj[key]= 型のメソッドのルールで、以下のような挙動をするはずが、最適化時に対応漏れてたということですね。 [ruby-core:60071] [Bug #9448]

class A
  def []=(key, val)
    p [key, val]
    :ok
  end
end

a = A.new
a[:key] = 42
[:key, 42]
=> 42
>> a.send(:[]=, :key, 72)
[:key, 72]
=> :ok

nobu: r44706 2014-01-25 14:50:44 +0900

r44687 の修正と同様に fork, spwan, popen などの子プロセスを起動するメソッド類で pipe を通じてエラーをやりとりする時の EINTR の考慮がまだ足りてなかったようで EINTR がかえってきたらリトライする関数 write_retry() と read_retry() を導入して利用するように修正しています。

kazu: r44707 2014-01-25 22:18:47 +0900

実はメーリングリストの操作用のメールアドレスが変化していたそうで、README.md と README.ja.md の説明を変更しています。
これまでは ruby-core-ctl@ruby-lang.org など xxx-ctl@ruby-lang.org のアドレスでコマンドを受け付けてましたが xxx-request@ruby-lang.org で受け付けるようになっているそうです。