ruby-trunk-changes r52541 - r52550

今日は IO#read_nonblock と IO#write_nonblock の prelude.rb への wrapper メソッド配置や、magic comment parse の不具合修正などがありました。

normal: r52541 2015-11-12 11:00:41 +0900

IO#read_nonblock と IO#write_nonblock のキーワード引数の処理が遅いので、prelude.rb にキーワード引数を受け取るメソッド定義を移動して、そこからキーワード引数を通常の引数にした __read_nonblock と __write_nonblock という C 定義のメソッドを呼ぶようにしています。キーワード引数の解析については C 実装より Ruby 実装のほうが早いというのちょっとおもしろいですね。 [ruby-core:71439] [Feature #11339]

svn: r52542 2015-11-12 11:01:17 +0900

version.h の日付更新。

svn: r52543 2015-11-12 11:01:18 +0900

r52541 で新規追加されたファイルの svn property 設定。

akr: r52544 2015-11-12 12:50:22 +0900

r52518 で追加された Hash#>= や Hash#> などのメソッドで同じキーで値が異なる場合のテストメソッドを追加しています。 https://bugs.ruby-lang.org/issues/10984#note-13

akr: r52545 2015-11-12 12:50:58 +0900

Module#<=> メソッドの rdoc 用コメントに Comparable のメソッド群では利用できない(nil を返すことがある)ので Comparable のためにあるというような文を削っています。

hsbt: r52546 2015-11-12 13:50:06 +0900

RubyGems を 2.5.0 (commit hash db78980) に更新しています。

nobu: r52547 2015-11-12 14:16:03 +0900

parse.y で ripper 用の関数 ripper_dispatch_ignored_scan_event() と ripper_dispatch_delayed_token() の wrapper macro dispatch_scan_event() と dispatch_delayed_token() を定義して、ripper 用でない時も同じマクロ名で定義しておくことで #ifndef RIPPER での分岐を削るようにしています。

nobu: r52548 2015-11-12 14:17:06 +0900

obj&.meth の記法の "&." が行頭にある時に前の行の末尾の式へのメソッド呼び出しとして parse されるようにしています。 method chain を

obj.m1()
   .m2()
   .m3()

のように書けるのを &. でも

obj&.m1()
   &.m2()
   &.m3()

と書けるようにしています。この例だとメソッド名や引数が短いので改行する必要ないですけどね。

nobu: r52549 2015-11-12 16:16:23 +0900

template/prelude.c.tmpl で ruby コードの parse して実行する時に compile option を指定して実行するようにして、末尾再帰最適化(tailcall_optimization) を有効にして実行するようにしています。デフォルトは OFF なんでしたね。

nobu: r52550 2015-11-12 18:44:29 +0900

magic comment の parse でキーワードが前方一致したら有効になる(c で coding、f で frozen_string_literal と解釈される)ようになっていたので、全体マッチさせるようにしています。 [ruby-core:71460] [Bug #11679]