Hatena::ブログ(Diary)

PB memo このページをアンテナに追加 RSSフィード

2014-07-24 ruby-trunk-changes r46913 - r46926

[][]ruby-trunk-changes r46913 - r46926

今日は構造体を pack するマクロ修正や、標準添付ライブラリのサンプルコードをライブラリ自体のファイルから sample/ ディレクトリのファイルに分離する変更などがありました。

nobu: r46913 2014-07-23 23:50:00 +0900

r46382 の再修正である r46384 での configure.in の変更でカンマが抜けていたところがあったのを修正しています。 [ruby-core:62968] [Bug #9914]

nobu: r46914 2014-07-23 23:50:02 +0900

構造体を pack するコンパイラ拡張機能を使うための関数マクロ PACKED_STRUCT_UNALIGNED() の定義を configure で定義してたのを include/ruby/defines.h で条件分岐して定義するようにしています。 universal binary のためとのこと。

nobu: r46915 2014-07-23 23:50:12 +0900

r46914 で PACKED_STRUCT_UNALIGNED() の定義のために参照してた UNALIGNED_WORD_ACCESS というマクロの定義を ppc64 アーキテクチャでも 1 にするようにしています。 [ruby-core:63937] [Feature #10081]

hsbt: r46917 2014-07-24 04:31:18 +0900

標準添付ライブラリ pstore で if __FILE__ == $0 で括って書かれていたサンプルコードを sample/pstore.rb に分離しています。

svn: r46918 2014-07-24 04:31:30 +0900

version.h の日付更新。

svn: r46919 2014-07-24 04:31:36 +0900

r46917 で新規追加された sample/pstore.rb の svn property 設定。

hsbt: r46920 2014-07-24 04:44:23 +0900

標準添付ライブラリ tempfile でも if __FILE__ == $0 で括って書かれてたサンプルプログラムを sample/tempfile.rb に分離しています。

svn: r46921 2014-07-24 04:44:30 +0900

r46920 で新規作成した sample/tempfile.rb の svn property 設定。

hsbt: r46922 2014-07-24 04:45:09 +0900

標準添付ライブラリ benchmark でも if __FILE__ == $0 で括られたサンプルコードがあったのを sample/benchmark.rb に分離しています。

svn: r46923 2014-07-24 04:45:12 +0900

r46922 で新規作成した sample/benchmark.rb の svn property 設定。

nobu: r46924 2014-07-24 09:59:51 +0900

ext/rbconfig/sizeof/depend でソースツリー以外のディレクトリで nmake でビルトする時の対応で sizes.c のターゲットの書きかたを修正しています。

ngoto: r46925 2014-07-24 16:03:38 +0900

r46884 で rb_io_buffer_t に PACKED_STRUCT() を使って構造体サイズを切り詰めるようにしたところ Sparc64 で Bus error が発生するようになったとのことで、PACKED_STRUCT() ではなく PACKED_STRUCT_UNALIGNED() を使うように変更しています。 プラットフォームのことを考慮しているのは PACKED_STRUCT_UNALIGNED() で PACKED_STRUCT() は直接は使うべきではないとのこと。そうなのか…。 [ruby-core:63988] [Bug #10088]

nobu: r46926 2014-07-24 17:22:17 +0900

r35489 で parse.y に不要な ";" が残ってたのを削除しています。

2014-07-23 ruby-trunk-changes r46899 - r46907

[][]ruby-trunk-changes r46899 - r46907

今日は CentOS 7 の OpenSSL では MD5署名検証機能がサポートされなくなったようなのでそれにまつわるテストの修正と、Time#zone の返す文字列エンコーディングの仕様の変更がありました。

naruse: r46899 2014-07-23 01:02:05 +0900

x86_64 の CentOS 7 のテストが RubyCI に追加されたところ OpenSSLMD5 署名機能がサポートされなくなっているらしくテストが失敗するようになっていたので、テストメソッドを検証アルゴリズム毎に分割しています。

svn: r46900 2014-07-23 01:02:09 +0900

version.h の日付更新。

hsbt: r46901 2014-07-23 04:06:12 +0900

標準添付ライブラリ drb/extserv の if __FILE__ == $0 で括られたサンプルスクリプトを削除しています。 sample/drb にもあるから不要でしょうとのこと。 https://github.com/ruby/ruby/pull/679

kazu: r46902 2014-07-23 07:48:19 +0900

r46901 の ChangeLog エントリの typo 修正

naruse: r46903 2014-07-23 11:35:06 +0900

r46899 の続き。 OpenSSLMD5 署名検証機能がサポートされなくなった環境のために OpenSSL::X509::CertificateError 例外を許容するようにしています。

nobu: r46904 2014-07-23 14:37:09 +0900

r46903 の OpenSSL::X509::Request のテストで rescue する例外を OpenSSL::X509::RequestError に修正しています。

nobu: r46905 2014-07-23 15:23:05 +0900

test/lib/minitest/unit.rb の MiniTest::Unit#_run_suite でテストメソッド毎に標準出力へのバッファを flush して書き出すようにしています。

nobu: r46906 2014-07-23 16:20:38 +0900

Time のテストで Time#zone の Encoding のチェックを assert_zone_encoding というメソッドに切り出し、locale encoding だけでなく default_internal のエンコーディングの場合も考慮するようにしています。

nobu: r46907 2014-07-23 16:20:39 +0900

Time#zone が 7bit ASCII 文字しか含まない時には文字列の Encoding は ASCII-8BIT にするように変更しています。

2014-07-22 ruby-trunk-changes r46894 - r46898

[][]ruby-trunk-changes r46894 - r46898

今日は String#count の Shift JIS 文字列での不具合の修正などがありました。

normal: r46894 2014-07-22 01:56:13 +0900

r46892 の rb_io_buffer_t での PACKED_STRUCT() マクロの使いかただと今度は gcc で有効になっていなかったので、struct の宣言と typedef での型の別名の宣言を分けるようにしています。 [ruby-core:63912] [Bug #10079]

これマクロ定義にコメント書いてないとわからないな。

svn: r46895 2014-07-22 01:56:24 +0900

version.h の日付更新。

nobu: r46896 2014-07-22 12:56:26 +0900

文字コードが Shift JIS文字列で後続のバイトが ASCII 文字のような(8bit 目が 0 の)数値を取り得ることがあり、String#count が誤動作していたのを修正しています。 [ruby-dev:48442] [Bug #10078]

nobu: r46897 2014-07-22 13:33:38 +0900

String#count でレシーバか引数文字列が Encoding に対して不正なバイト列を含んでいたら例外を発生させるようにしています。 [ruby-dev:48442] [Bug #10078]

nobu: r46898 2014-07-22 14:22:32 +0900

String#count で引数文字列オブジェクトについてのチェックは1回だけ実行されればいいので、ループの外に括り出して不要な処理をくりかえさないように最適化しています。

2014-07-21 ruby-trunk-changes r46888 - r46893

[][]ruby-trunk-changes r46888 - r46893

今日は optparse の ARGV.getopts の機能追加などがありました。

headius: r46888 2014-07-21 07:42:47 +0900

prepend で追加したモジュールメソッドの可視性を変更した時のテストで子プロセスを起動して実施するところでタイムアウトを延ばしています。起動の遅い実装(ってつまり JRuby の時ってことでしょうけど)は時間がかかる可能性があるので 3秒だと足りないことがあるみたいです。まあ子プロセスの起動というなら assert_separately を使っているところ全体的にそうなんでしょうけど、ここはデフォルトの10秒よりも明示的に短く 3秒に設定されてたからでしょう。

svn: r46889 2014-07-21 07:43:13 +0900

version.h の日付更新。

nobu: r46890 2014-07-21 15:29:53 +0900

rake のテストで make test-all で実行すると起動条件などの考慮が足りてなくて失敗するとこを修正しています。

nobu: r46891 2014-07-21 15:55:44 +0900

標準添付ライブラリ optparse の ARGV.getopts でオプション記法に "z:Z;description of z" のように ";" で区切ってヘルプメッセージを指定することができるような機能を追加しています。 https://github.com/ruby/ruby/pull/676

nobu: r46892 2014-07-21 16:04:21 +0900

r46884 で rb_io_buffer_t の宣言に PACKED_STRUCT() をつけていますが、typedef までマクロ引数に含めるようにしています。 VC でのビルド時のためとのこと。

nobu: r46893 2014-07-21 21:13:07 +0900

win32/Makefile.sub で PACKED_STRUCT() が古い VC で利用できない機能を使っていたので空の定義を追加しています。

2014-07-20 ruby-trunk-changes r46876 - r46887

[][]ruby-trunk-changes r46876 - r46887

今日は構造体のサイズを小さくする最適化などがありました。

nobu: r46876 2014-07-20 00:32:46 +0900

IO.new の引数の mode の説明の rdoc 用コメントを修正しています。 これ、知らなかったのですが、"a" の append モードって、開いた時に末尾にファイルポインタを移動しておくんじゃなくて、書き込みの都度ファイル末尾への書き込みになるようにしているんですね。ってことは、複数プロセスで開いてた時も(多分ある程度タイミング問題でしょうが)末尾に追記になるんですね。 [ruby-core:63747] [Bug #10039]

svn: r46877 2014-07-20 00:32:58 +0900

version.h の日付更新。

hsbt: r46878 2014-07-20 01:00:51 +0900

拡張ライブラリ thread の undumpable() 関数に rdoc の nodoc タグをつけています。 https://github.com/ruby/ruby/pull/672

hsbt: r46879 2014-07-20 01:10:58 +0900

拡張ライブラリ opensslOpenSSL::Cipher の rdoc 用コメントのサンプルコードの変数typo (?) を修正しています。 https://github.com/ruby/ruby/pull/663

nobu: r46880 2014-07-20 09:13:15 +0900

thread.c の割り込みをチェックする処理が vm_core.h で定義されている RUBY_VM_CHECK_INTS() と全く同じ処理だったのでマクロでおきえています。

normal: r46881 2014-07-20 13:18:49 +0900

鬼雲の構造体 struct re_pattern_buffer のメンバの順番をアライメントを意識して入れ替えて 64bit 環境でのサイズを小さくしています。 しかし "This breaks the ABI" とのこと。ふーむ。 [ruby-core:63708] [Feature #10034]

svn: r46882 2014-07-20 13:18:51 +0900

r46870 の ChangeLog エントリの行末の空白除去。

normal: r46883 2014-07-20 13:18:58 +0900

構造体 rb_io_t のメンバも順序を入れかえて 64bit 環境での構造体サイズを小さくしています。 こちらも ABI の互換性はなくなるとのこと。 [ruby-core:63781] [Feature #10050]

normal: r46884 2014-07-20 13:19:06 +0900

rb_io_buffer_t の宣言に PACKED_STRUCT() をつけて可能ならコンパイラ拡張機能で構造体の padding を抑制してより小さいサイズに詰め込むようにしています。これでこの構造体をキャッシュにのせるためのキャッシュラインがもうひとつ減るのだ、ということで、すごい執念ですね。 [ruby-core:63781] [Feature #10050]

normal: r46885 2014-07-20 13:51:35 +0900

さらに transcode.c の構造体 rb_econv_t もメンバの順序を入れかえてサイズを節約しています。

normal: r46886 2014-07-20 14:34:32 +0900

vm_core.h で定義されている構造体 rb_proc_t の int 型のメンバで決まった小さい範囲(0..3 コメントは 4までになっているけど次で修正されています。)か真偽値しか格納しないため int8_t を使ってサイズを節約するようにしています。ついに型を変えはじめましたね。

nobu: r46887 2014-07-20 21:28:48 +0900

r46886 の rb_proc_t のメンバの型変更で追記したコメントを修正。 safe_level の範囲は今は 0..3 でした。