Hatena::ブログ(Diary)

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

2014-12-19 ruby-trunk-changes r48888 - r48898

[][]ruby-trunk-changes r48888 - r48898

今日というか昨日 ruby 2.2.0-rc1 がリリースされていました。もうすぐ 2.2.0 がリリースされますので、ぜひ rc1 を試してみてください。

usa: r48888 2014-12-19 11:52:17 +0900

ruby --version の出力をチェックするテストで rc (release candidate)を許容するようにしています。2.2.0-rc1 がリリースされたからですね。

svn: r48889 2014-12-19 11:52:29 +0900

version.h の日付更新。

nobu: r48891 2014-12-19 15:36:05 +0900

Hash#equal の実装で rb_eql() の戻り値(int)を VALUE 型の戻り値としてそのまま返してしまっていたので、明示的に Qtrue と Qfalse を返すように修正しています。 https://github.com/ruby/ruby/pull/789

nobu: r48892 2014-12-19 20:00:22 +0900

include/ruby/ruby.h の PRIsVALUE の定義で、文字列リテラルの連結のところで、後ろに定数マクロを置く時に間に空白がないと C++11 のユーザー定義リテラルの suffix と混同されるということで警告が出ることがあるらしく、間に空白をはさむようにしています。 なるほどーそんな機能があるのか。 https://github.com/ruby/ruby/commit/a9f3eb7#commitcomment-9040169 http://en.cppreference.com/w/cpp/language/user_literal

nobu: r48893 2014-12-19 20:02:10 +0900

Struct の高速化のための ISeq 生成の関数 rb_method_for_self_aref() と rb_method_for_self_aset() にコメントを付加しています。

usa: r48894 2014-12-19 22:03:36 +0900

r48888 と同様にもう一箇所 ruby -v の出力の rc を許容するようにテストを修正しています。

akr: r48895 2014-12-19 22:11:34 +0900

tool/update-deps で common.mk の依存関係の記述を更新しています。

mrkn: r48896 2014-12-19 22:15:28 +0900

拡張ライブラリ bigdecimalgem パッケージとして独立して配布する時にビルドできるように depend の依存関係の ruby.h の書きかたを修正しています。

akr: r48897 2014-12-19 22:34:37 +0900

r48896 の修正を受けて tool/update-deps で拡張ライブラリの depend ファイルを更新するときに可能なら $(hdrdir) のほうを使うように対応しています。

akr: r48898 2014-12-19 22:34:54 +0900

r48897 の tool/update-deps の変更を受けて再度 common.mk と各種 depend ファイルの依存関係を更新しています。

2014-12-18 ruby-trunk-changes r48880 - r48886

[][]ruby-trunk-changes r48880 - r48886

今日は Windows でのシグナル処理の修正などがありました。

normal: r48880 2014-12-18 09:03:30 +0900

test/ruby/test_iseq.rb のテストメソッド名の typo 修正。

svn: r48881 2014-12-18 09:03:40 +0900

version.h の日付更新。

nobu: r48882 2014-12-18 10:14:09 +0900

.travis.yml で OS X での エラー時のクラッシュダンプ表示を after_failure: の項目にまとめています。便利。

nobu: r48883 2014-12-18 11:44:56 +0900

拡張ライブラリ io/console の extconf.rb での古いバージョンでの互換性のための関数チェックをコメントアウトしています。2.0.0 用とされているものもコメントアウトされていますが gem としてリリースするものも 2.1 以降サポートとするんですかね?

usa: r48884 2014-12-18 14:26:57 +0900

Windows 版でのシグナル処理で signal(3) に SIGKILL を指定しようとした時に呼び出す前にチェックして errno=EINVAL でエラーにするようにしています。 [ruby-dev:48762] [Bug #10615]

usa: r48885 2014-12-18 14:31:09 +0900

r48884 の ChangeLog エントリの typo 修正。

nobu: r48886 2014-12-18 17:45:28 +0900

configure で実行形式ファイルの先頭のマジックナンバーの確認のため cat -e を使っていたのですが、 BusyBox というミニマルUnix コマンドのツールで提供される cat が -e をサポートしていないため tr を使う書き方に変更しています。 [ruby-core:64824] [Bug #10210]

2014-12-17 ruby-trunk-changes r48867 - r48879

[][]ruby-trunk-changes r48867 - r48879

今日は先日の r48748 あたりの Struct の高速化のためのしくみのリファクタリングや、最適化命令による不具合を回避するための変更などがありました。

usa: r48867 2014-12-17 01:08:16 +0900

拡張ライブラリ win32 の Win32API.rb で引数引数を * で配列展開して渡さないといけないところがそのまま渡されていたのを修正しています。 git の履歴だと r41936 で dl/fiddle から移動してきた時からなので結構前から壊れてたみたいですね。

svn: r48868 2014-12-17 01:08:28 +0900

version.h の日付更新。

normal: r48869 2014-12-17 09:54:13 +0900

文字列の freeze や Hash の [] のアクセスの最適化命令がブロック渡しされている場合にそれを打ち消してしまうらしいので、ブロック付きのこれらのメソッド呼び出しは(実際にメソッドが再定義されているかどうかにはかかわらず)コンパイル時に最適化命令を生成しないようにしています。うーむ、よくぞリリース前にこれ気がついてくれましたね。 Thank you Bartosz!! [ruby-core:66595] [Bug #10557]

ko1: r48870 2014-12-17 10:20:22 +0900

r48869 の続きで、さらに specialized_instructions というコンパイルオプション(実は RubyVM の命令列へのコンパイルにはオプションがあるのです)をチェックして、これが有効な時だけ最適化命令を生成するようにしています。

hsbt: r48871 2014-12-17 10:50:14 +0900

拡張ライブラリ gdbm の each_key が Enumerator を返すかどうかというテストを追加しています。 https://github.com/ruby/ruby/pull/783

nobu: r48872 2014-12-17 11:52:19 +0900

r48851 の Struct の高速化のための ISeq 生成の処理で caller_location() という関数を切り出したものに、さらに絶対パスを返させて prepare_iseq_build() への引数に使うようにしています。

nobu: r48873 2014-12-17 11:57:51 +0900

rb_iseq_new_with_opt() で option 引数が NULL だった時にデフォルトコンパイルオプションを参照するようにしています。 だいたい渡されてそうなのですが compile.c の method_for_self() という関数から呼び出される時は 0 が渡されています。これ親から引き継げたほうがいいんじゃないかなぁと思いますが、Struct の最適化のために動的に呼ばれている部分なので引き継げないんですね…。

nobu: r48874 2014-12-17 11:57:53 +0900

compile.c の static 関数 iseq_set_local_table() の第2引数 ID *tblconst を追加しています。

nobu: r48875 2014-12-17 12:08:20 +0900

vm.c の rb_vm_get_binding_creatable_next_cfp(), rb_vm_get_ruby_level_next_cfp(), vm_get_ruby_level_caller_cfp() および vm_insnhelper.c の vm_get_ruby_level_caller_cfp() などの関数の rb_thread_t * の引数const を付加しています。

nobu: r48876 2014-12-17 12:20:58 +0900

Struct のattribute アクセスの高速化のために ISeq を生成する関数を iseq.c から compile.c に移動して、Array を作って rb_iseq_build_from_ary() でロードするのではなくて通常のコンパイルと同様に rb_iseq_t のリストを生成するように変更しています。だいぶスッキリしましたね。

nobu: r48877 2014-12-17 17:17:46 +0900

ext/io/console/console.c から古いバージョンとの互換性のための条件コンパイルなどを削除しています。多分 1.8 サポートを止める感じですかね。

nobu: r48878 2014-12-17 17:17:49 +0900

ext/io/console/io-console.gemspec のバージョンを 0.4.2 から0.4.3 に上げています。

kazu: r48879 2014-12-17 20:12:23 +0900

r48866 での NEWS ファイルの更新の typo 修正。

2014-12-16 ruby-trunk-changes r48847 - r48866

[][]ruby-trunk-changes r48847 - r48866

今日は先日の Struct の高速化で入った非互換性の修正のため ISeq まわりに変更がありました。

headius: r48847 2014-12-16 03:56:30 +0900

IO#read に第2引数としてバッファに使う文字列オブジェクトを渡した場合に、ascii_only? のチェックが再取得されることを確認するテストを追加しています。 JRuby に ascii_only? が読み込み前の状態が残ってしまう不具合があったようでそれに対応したテストみたいです。 https://github.com/jruby/jruby/issues/2316

svn: r48848 2014-12-16 03:56:44 +0900

version.h の日付更新。

nobu: r48849 2014-12-16 04:09:25 +0900

compile.c で ISeq のコンパイルや disasm に TS_FUNCPTR という最適化命令の種類を対応するようにしています。はて、なんだろうこれ…。

nobu: r48850 2014-12-16 04:13:07 +0900

iseq.c で内部的に利用する一時的な配列を klass を 0 にして ObjectSpace から隠すようにしています。

nobu: r48851 2014-12-16 04:13:15 +0900

r48748 あたりで Struct の高速化のために動的に ISeq を作るようにした rb_method_for_self_aref() や rb_method_for_self_aset() でファイル名や行番号の設定を caller_location() という関数に括り出して、可能なら呼び出し元を設定するようにしています。

headius: r48852 2014-12-16 04:59:12 +0900

Time.getlocal(nil) と明示的に nil引数を与えた時のテストを追加しています。 これも JRuby の不具合に対応するテストみたいです。 https://github.com/jruby/jruby/issues/2310

normal: r48853 2014-12-16 05:44:54 +0900

tool/vcs.rb で 1.8 で使えない &:to_i などでブロック化する記法をやめています。

headius: r48854 2014-12-16 07:33:44 +0900

古い Linux では ioctl(2) が pipe に対して errno=ENOTTY で返るべきところで EINVAL で返ることがあるそうで、テストで捕捉する例外を追加しています。 [ruby-core:66191] [Bug #10494]

normal: r48855 2014-12-16 07:39:33 +0900

GC 用の環境変数のドキュメントの文法修正と man/ruby.1 に環境変数について追記しています。 [ruby-core:64717] [Feature #10197]

normal: r48856 2014-12-16 09:08:14 +0900

tool/vcs.rb の ruby 1.8 対応で Time.new への引数で * で配列展開して渡した後で通常の引数を渡す記法は 1.8 では使えないのであらかじめ配列に入れておくようにしています。 そういえばそうだったなぁ…。

nobu: r48857 2014-12-16 10:14:20 +0900

RubyVM::InstructionSequence(通称 ISeq)#to_a でダンプする時にも TC_FUNCPTR という命令タイプに対応しています。 って言っても nil を入れてるんですけど。

nobu: r48858 2014-12-16 10:14:27 +0900

TS_FUNCPTR タイプの命令を文字列化する時に可能ならば(dladdr(3) が利用可能でかつ関数ポインタのシンボルが取得できたら)関数名を表示するようにしています。 あーなるほど、命令が C の関数になっているものなのですね。

ko1: r48859 2014-12-16 12:03:24 +0900

fork 時のシグナルハンドラの挙動のテストで試行回数が多いのでタイムアウトをのばしています。

nobu: r48860 2014-12-16 13:39:17 +0900

SEGV を発生させるテストで Mac OS X で ~/Library/Logs/DiagnosticReports に残るバックトレースなどの情報の入ったファイルの内容をチェックして削除もするようにしています。

nobu: r48861 2014-12-16 13:59:31 +0900

.travis.yml に Mac OS X では ~/Library/Logs/DiagnosticReports/ のクラッシュダンプも表示させるようにコマンドを追加しています。

nobu: r48862 2014-12-16 14:05:00 +0900

r48861 の修正。 エスケープが不十分だったのを修正しています。

nobu: r48863 2014-12-16 14:54:32 +0900

ISeq の to_a および配列からの load 関数での TS_FUNCPTR の扱いの修正。 ダンプする時に VALUE に関数ポインタをそのまま入れていましたが、Integer に変換して入れるように修正しています。

nobu: r48864 2014-12-16 15:18:25 +0900

r48748 の Struct の属性アクセスの高速化で ISeq を構築する時に直接対象の関数を呼び出すopt_call_c_function 命令を生成するようにしています。なるほどーこのための布石だったのですね。チケットのほうをみると Struct から生成したクラスで []= メソッドを再定義した時の挙動に問題があったようです。 [ruby-core:66846] [Bug #10601]

nobu: r48865 2014-12-16 16:38:52 +0900

iseq.c の rb_method_for_self_aref() から不要な行を削除しています。

usa: r48866 2014-12-16 16:48:22 +0900

NEWS ファイルの Windows での IO#flush でのメタデータ更新の抑制の変更点に IO#fsync なら書き込みを待つことを追記しています。

2014-12-15 ruby-trunk-changes r48836 - r48846

[][]ruby-trunk-changes r48836 - r48846

今日は tool/make-snapshot や tool/vcs.rb の変更の他、ObjectSpace.memsize_if に struct RVALUE のサイズも追加して返されるようになる変更がありました。

nobu: r48836 2014-12-15 10:02:32 +0900

tool/make-snapshot の未初期化グローバル変数の参照の警告除去。

nobu: r48837 2014-12-15 10:02:41 +0900

tool/vcs.rb で svngit などのコマンドラインツールを呼び出して出力を取り込むのに `cmd` ではなくて popen を使って、さらにあらかじめ引数を分割して配列で渡すことで shell を中継させないようにしています。

svn: r48838 2014-12-15 10:02:45 +0900

version.h の日付更新。

nobu: r48839 2014-12-15 10:02:46 +0900

tool/vcs.rb の VCS#get_revisions と VCS::SVN.get_revisions で引数path に to_path で変換できるオブジェクト(Pathname など)も受け付けるようにしています。

nobu: r48840 2014-12-15 10:02:52 +0900

tool/make-snapshot から tool/vcs.rb に svn 操作部分を切り出しているようです。 リリース時に vcs.rb も必要になりますな。

nobu: r48841 2014-12-15 10:28:58 +0900

make dist で tool/make-snapshot に -srcdir オプションを渡してローカルの working copy を指定できるようにしています。

nobu: r48842 2014-12-15 10:30:30 +0900

tool/make-snapshot で -srcdir 指定時にダウンロードしてある config.guess, config.sub や bundled gems のパッケージファイルなどをコピーして再度ダウンロードしないですむようにしています。

naruse: r48843 2014-12-15 15:02:58 +0900

tool/vcs.rb の VCS::SVN#url での svn info --xml の解析が間違っていたのを修正しています。

naruse: r48844 2014-12-15 15:17:58 +0900

Kernel#sprintf のテストで %a での Float の丸めのテストが x86 に依存していたのでコメントアウトしているとのこと。 [ruby-dev:42551]

nobu: r48845 2014-12-15 16:19:25 +0900

ダミーエンコーディング(UTF16 や UTF32 のような、エンディアンの指定のないやつ)の文字列が acsii_only? が偽になるようにしています。 チケットでは Symbol が作れないってなっていますが根本原因は ascii_only? の誤判定だったようです。 [ruby-core:66835] [Bug #10598]

ko1: r48846 2014-12-15 17:54:07 +0900

拡張ライブラリ objspace の ObjectSpace.memsize_of が返すメモリ使用量に sizeof(RVALUE) を追加しています。つまり slot 占めているサイズも加味して返すということですね。即値は 0 のまま(struct RVALUE の slot を消費しないので)ですね。 [ruby-core:57666] [Bug #8984]