今日は Rational や Complex の新たなリテラルの追加、def 文の戻り値の変更など 2.1 の新機能の追加がありました。あとは主に bignum.c のリファクタリング/最適化。
akr:r42310 2013-08-01 23:57:21 +0900
bignum.c の rb_big2str1() から不要なローカル変数を削除しています。
mrkn:r42311 2013-08-01 23:58:54 +0900
数値リテラルに r を後置すると Rational に、i を後置すると Complex になる新たな記法が追加されました。[ruby-core:55096] [Feature #8430]
'i' はほぼ全ての数値リテラルのうしろに付けることができます。1+1i のようにも書けますがこれは (1) + (1i) のように "+" メソッド呼び出しとしてパースされます。
r もだいたいの数値リテラルのうしろに付けることができ、小数表記の浮動小数点数リテラルにつけることができますが、指数表記のうしろにはつけられないようです。またやはり 4/3r のようにも書けますが、これも (4) / (3r) のようにパースされるので、リテラルとして直接サポートされているわけではないようです。
>> 1r => (1/1) >> 4/3r => (4/3) >> 0xfr => (15/1) >> 077r => (63/1) >> 0b11r => (3/1) >> 0.33r => (33/100) >> 1e-1r SyntaxError: (irb):18: syntax error, unexpected tIDENTIFIER, expecting end-of-input >> 1i => (0+1i) >> 1+1i => (1+1i) >> 0.1i => (0+0.1i) >> 0xfi => (0+15i) >> 077i => (0+63i) >> 0b11i => (0+3i) >> 1e-2i => (0+0.01i)
スゴイ! 便利! Cool!
開発者会議での成果だそうです(参考: http://bugs.ruby-lang.org/projects/ruby/wiki/DevelopersMeeting20130727Japan http://d.hatena.ne.jp/nurse/20130730#1375151654 )。2.1 の目玉機能のひとつになりそうですね。
nobu:r42312 2013-08-02 00:01:13 +0900
r42311 で新規追加したファイルの svn property 設定。
svn:r42313 2013-08-02 00:01:17 +0900
version.h の日付更新。
naruse:r42314 2013-08-02 00:04:13 +0900
テストで NoMemoryError が発生したらメモリ状況を出力するようにした対応に、/bin/ps があったら ps でメモリの情報を出力するようにコマンドの起動を追加しています。 [ruby-dev:47559] [Bug #8711]
チケットをみるとどうやらメモリ使用量の setrlimit での制限と ASLR *1のため仮想メモリ空間の断片化が原因でメモリが確保できなくなるんじゃないかということで、制限を緩めることで安定したようです。
mrkn:r42315 2013-08-02 00:14:45 +0900
bootstraptest/test_literal_suffix.rb に "1if true" や "1rescue nil" などのこれまでも動いていた分がパースできることを確認するテストを追加しています。 r42311 で数値リテラルの suffix に r i をつけられるようにしたので、その影響を受けていないことを確認するテストを追加したようです。
naruse:r42316 2013-08-02 02:11:27 +0900
r42314 にさらに追加して、テストが NoMemoryError になった時の ps の表示オプションを追加/変更しています。 [ruby-dev:47559] [Bug #8711]
mrkn:r42317 2013-08-02 02:33:29 +0900
r42311 で追加した数値リテラルの r と i の suffix 追加について NEWS ファイルに追記しています。
eregon:r42318 2013-08-02 05:46:01 +0900
r42317 の NEWS ファイルの記述の typo 修正。
akr:r42319 2013-08-02 07:49:12 +0900
bignum.c の big2str_orig() の引数から len を削除しています。元々未初期化で渡して、ローカル変数的にしか使ってなかったみたいですね。
drbrain:r42320 2013-08-02 09:14:58 +0900
doc/syntax/refinements.rdoc の using による Refinements の影響のスコープの解説を修正しています。クラスやモジュールのスコープでは activate できないって書いてあるような気がしますけど、Module#using は r41261 で復活してたんではないんでしたっけ?
naruse:r42321 2013-08-02 10:15:29 +0900
test/rubygems/test_gem_commands_uninstall_command.rb で Windows で警告メッセージが出るため失敗していたテストを修正しています。
naruse:r42322 2013-08-02 10:15:32 +0900
test/rubygems/test_gem_ext_builder.rb で RubyGems の拡張ライブラリビルドのテストで nmake が意図した出力をしないので、nmake で実行した時には assertion を実行しないようにしています。
このテストの失敗は 2.0.0 のブランチでも RubyGems 2.0.6 で起きてて、こちらの Github の issue で調整中です。 nmake が使える人はみてみてください。 https://github.com/rubygems/rubygems/issues/609
charliesome:r42323 2013-08-02 10:40:27 +0900
マイナス符号付きの数値リテラルのパース時の処理にオブジェクトの型をチェックしていたところに T_RATIONAL と T_COMPLEX を追加しています。 suffix 追加に伴ないこれらの型のオブジェクトが渡ってくることがありえるようになったため。 [ruby-core:56316] [Bug #8717]
akr:r42324 2013-08-02 12:28:33 +0900
bary_mul() で x と y で x のほうを小さい数にするようにひっくり返して再帰呼び出しするようにしています。 [ruby-dev:47565] [Bug #8719]
akr:r42325 2013-08-02 18:36:23 +0900
桁の多い Bignum の文字列化 big2str_karatsuba() で一回の再帰呼び出し内でできるだけ桁を処理してネストを軽減するようにする最適化だそうです。 そしてさり気に rb_big2ulong_pack() に deprecated というコメントを付けています。
nobu:r42329 2013-08-02 23:10:51 +0900
bignum.c の rb_cstr_to_inum() の未使用の変数を除去。
nobu:r42330 2013-08-02 23:13:20 +0900
r42311 で数値リテラルの suffix を追加したのに対応して拡張ライブラリ ripper でもシンボルを追加しています。
nobu:r42332 2013-08-02 23:14:55 +0900
r42311 の変更では 1.0000000000000001r のように Float で表現できない精度の小数点表記に r の suffix をつけて Rational にしても、一旦浮動小数点数にしてから Float#to_r で Rational 化していたので、表記上の数値から変化してしまう可能性があったので、表記のとおりの精度を保って Rational 化するようにしています。
nobu:r42333 2013-08-02 23:24:17 +0900
parse.y で 拡張ライブラリ ripper 用の ripper_validate_object() でも新規にリテラルが取りうるオブジェクトの種別に T_RATIONAL と T_COMPLEX を追加しています。
nobu:r42334 2013-08-02 23:48:55 +0900
r42332 で r つきリテラルの精度を改善したのですが、文字列を切り出してから小数点の位置を見付けて計算していたのを、1文字ごとに計算するようにする最適化のようです。
akr:r42335 2013-08-02 23:53:22 +0900
bignum.c の power_cache_get_power() で結果の Bignum のサイズ調整を bigtrunc() で行なうようにするリファクタリングと、big2str_karatsuba() で 0埋めする桁の長さの計算間違いを修正しています。
glass:r42336 2013-08-02 23:56:39 +0900
Array#zip でブロックパラメータが2つ以上ある時の呼び出しで、中間データに配列オブジェクトを要素数ぶん毎回確保していたのを、バッファを用意して rb_yield_values2() を使うようにする最適化。
usa:r42337 2013-08-02 23:58:11 +0900
メソッドを定義する def 文はこれまで nil を返していましたが、定義したメソッド名の Symbol オブジェクトが返るように変更されました。 [ruby-dev:42151] [Feature #3753]
glass:r42338 2013-08-03 00:13:42 +0900
NEWS ファイルに IO#seek の引数に指定できる定数 SEEK_DATA, SEEK_HOLE を追加したことを追記しています。
svn:r42339 2013-08-03 00:13:47 +0900
version.h の日付更新。