ruby-trunk-changes r47765 - r47773

今日は matrix の不具合修正や新規メソッド追加、IO#advise のテストの修正などがありました。

normal: r47765 2014-10-03 05:59:40 +0900

TracePoint の実装の構造体 rb_tp_t のメンバの順番を入れかえて 64bit 環境でのサイズ削減を図っています。

svn: r47766 2014-10-03 05:59:53 +0900

version.h の日付更新。

normal: r47767 2014-10-03 06:17:13 +0900

st_table のリサイズ時に指定のサイズよりも大きい最小の2の累乗を計算する処理をビットシフトとビットORを使った next_pow2() という実装に変更しています。なるほどー最上位ビットより下の全ビットを1にしてから+1することで最上位ビットのひとつ上のビットだけ立った整数を作ってるんですね。Hacker's Delight にありそうなイディオムです。このほうが速いというより、コードサイズが少し小さくなるので icache が効率的に使われていいのではないか、とのこと。いつもながら細かいチューニングポイントをみつけてきますね。

marcandre: r47768 2014-10-03 12:38:06 +0900

標準添付ライブラリ matrix の Matrix.rows の第2引数 copy の指定が効かない不具合があったのを修正しています。うーん、こりゃまた単純な……というかこんな引数があったの知らなかった。 https://github.com/ruby/ruby/pull/707

marcandre: r47769 2014-10-03 12:44:20 +0900

標準添付ライブラリ matrix に Matrix.hstack と Matrix.vstack という、Matrix をそれぞれ横や縦に連結した新しい dimension の Matrix を返すメソッドを追加しています。 もちろん連結する Matrix はそれぞれ行や列の数が一致していないといけません。(不一致だと ErrDimensionMismatch 例外が発生) https://github.com/ruby/ruby/pull/344

hsbt: r47770 2014-10-03 18:22:50 +0900

.travis.yml で Travis-CI 上でビルドする時の configure に --disable-install-doc と --disable-install-rdoc を追加してドキュメントの生成を抑制するようにしています。

hsbt: r47771 2014-10-03 18:52:21 +0900

r47763 でエラー時の表示する情報を追加のみしていた IO#advice のテストで古い Linux(3.6 より前。ってそんなに古くないような気も)の場合は tmpfs 上での fadvice(2) が 未サポートなので、Errno::EINVAL を無視させるようにしています。これ else 節で retry しているのは意図的なんですかね? カウンタとかないので無限ループになる可能性があるような気が(別のプラットフォームで Errno::EINVAL が常に発生する場合など)。 [ruby-core:65355] [Bug #10313]
[追記]fadvise(2) が tmpfs でサポートされないのは Linux カーネルのバージョンによる問題ではないのですが、EINVAL を返すという挙動は古いバージョンだけなのでそれを対処しているということだそうです。コメント欄参照[/追記]

hsbt: r47772 2014-10-03 21:02:46 +0900

.travis.yml で Linux のテスト結果も無視しないようにしています。 IO#advise のテストが Linux でたまに失敗して不安定だったみたいですね。

hsbt: r47773 2014-10-03 21:02:49 +0900

r47771 の IO#advise のテストで古い Linux じゃない時に retry していたのを再raiseするように修正しています。