ruby-trunk-changes r38513 - r38538

Rake の 0.9.6 へバージョンアップ、ISeq の最近追加されたメソッドの削除、TracePoint の不具合修正やドキュメントの追加などがありました。

tarui:r38513 2012-12-21 08:58:16 +0900

vm_trace.c の rb_suppress_tracing() の未使用のローカル変数を削除しています。

drbrain:r38514 2012-12-21 11:34:37 +0900

Rake を 0.9.5 から 0.9.6 にバージョンアップしています。
まず doc/rake/ にドキュメントと、0.8.7 以降のリリースノートが含まれています。これはすごい。そこに 0.9.6 のリリースノートもあるのでそれを見てみると

  • マルチスレッド化された Rakefile でのトレース出力の改善
  • task と multitask での引数の解析の統一
  • テストで Ruby のバージョンによってうまくいかないものを skip
  • Ruby のソースツリーに統合するための修正

Ruby のテスト時の云々というのが書かれていて、もしかして rake でビルドやテストができるんでしょうか。
実際このコミットにはドキュメントの追加とテストの修正だけなので上に列挙されているうち機能的な追加はこれ以前に入っていたものだと思います。

zzak:r38515 2012-12-21 14:45:50 +0900

irb の rdoc ドキュメントを全体的に追記しています。かなり分量があって労力がかかっていそうです。お疲れさまです。

nobu:r38517 2012-12-21 16:31:28 +0900

r38514 で新規追加されたファイルの svn property 設定。ひとつ前で追加されたものではないのでご注意を(誰となく)。

nobu:r38518 2012-12-21 16:35:42 +0900

vm_trace.c の if 文の開きかっこの前に空白を入れるスタイルの修正のみです。

nobu:r38519 2012-12-21 16:35:47 +0900

r38478 で追加した、わざと再帰呼び出しVM スタックやマシンスタックをあふれさせて SystemStackError をおこすテストで、再帰呼び出しするメソッド内で "." をひとつずつ出力することで何回再帰呼び出しできるかを取得しようとしています。ここでで出力後に IO#flush を呼び出して確実に出力されるようにしてより正確に再帰回数を取得できるようにしています。

nobu:r38520 2012-12-21 16:35:49 +0900

test/ruby/test_thread.rb の assertion で素の assert を使って書かれていたところを assert_operator や assert_predicate を使って書くことで失敗時のメッセージがよりわかりやすくなるようにしています。

nobu:r38521 2012-12-21 16:38:03 +0900

自動生成する id.h/id.c で定義する ID に predefined, attr という区別の他にインスタンス変数用、グローバル変数用、定数用、クラス/モジュール名用という分類をして命名規則によって定数を定義するようにしています。

nobu:r38522 2012-12-21 16:38:07 +0900

defs/id.def で同じ名前が重複して登録されていたらソースの自動生成時にエラーにするようにしています。

nobu:r38523 2012-12-21 16:38:11 +0900

ID2ATTRSET() という関数マクロを追加しています。 ID のビットフラグ領域の ID_ATTRSET を立てるというもの。 今のところ追加されただけで実際に使ってはいません。foo= のようなメソッドのための ID を作るために使うもので、こういうシンボルの ID は foo に ID_ATTRSET のフラグを立てたものにすべきということみたいです。

ko1:r38524 2012-12-21 18:33:44 +0900

TracePoint にマルチスレッドで使うと別のスレッドのイベントが見えてしまうという問題があり、rb_tp_t::trace_arg という TracePoint のオブジェクトが内包する構造体のメンバに保有していた情報を rb_thread_t::trace_arg にスレッド毎の情報として持つように移動しています。またこのメンバをみればスレッドがトレース中かどうかわかるので rb_thread_t::trace_running を削除しています。 [ruby-dev:46766] [Bug #7590]

ko1:r38525 2012-12-21 18:37:31 +0900

r38524 の ChangeLog エントリにチケット番号の参照を追記しています。

ko1:r38526 2012-12-21 18:48:15 +0900

struct rb_trace_arg_struct を include/ruby/debug.h で rb_trace_arg_t として typedef して(これまでも vm_core.h で typedef されていたのですが)、こちらを宣言等に利用するようにしリファクタリングしています。

ko1:r38527 2012-12-21 18:51:03 +0900

r38526 の ChangeLog のエントリを修正しています。

ko1:r38529 2012-12-21 19:39:59 +0900

ruby の -r オプションで require したスクリプト内で TOPLEVEL_BINDING で参照した Binding が本体のスクリプトの TOPLEVEL_BINDING と同じものを参照していないらしく、-r オプションでロードしたスクリプト内で TOPLEVEL_BINDING.eval でローカル変数を定義しても未定義のままになってしまう不具合を修正しています。 TOPLEVEL_BINDING に含まれている rb_env_t の内容は変更されることがあるので必要な時は毎回 TOPLEVEL_BINDING 定数に格納されているオブジェクトから再取得するようにしています。 [ruby-core:50701] [Bug #7536]

naruse:r38530 2012-12-21 19:53:57 +0900

r38529 の TOPLEVEL_BINDING の不具合の件のテストを追加しています。

ko1:r38531 2012-12-21 20:22:54 +0900

TracePoint.new の第1引数に Thread を渡すことで特定の Thread でだけ有効なトレースを実施できるようにしています。これまでも target_th という引数を C の関数では定義していたのですが、常に 0 を渡していたのを渡せるようにしたというもので、この機能は unofficial でテストもしていないので使って何が起きても知らんよというステータスみたいです。

ko1:r38532 2012-12-21 20:44:09 +0900

r38076 で追加した RubyVM::InstructionSequence(以下 ISeq)の #line_trace_all および #line_trace_specify メソッドの定義を削除しています。これは TracePoint と組み合わせて行単位で指定した位置の TracePoint の :line イベントを有効にする便利機能ですが、名前を変更したりまだ流動的なので一旦削除ということだそうです。残念。 C の API は残しているので C 拡張ライブラリから使うことはできるとのこと。

tarui:r38533 2012-12-21 21:17:03 +0900

チケットが(日本語だし)詳しい現象を説明されているのでそちらを読めばすむと思います。 $0 に代入してプログラム名を変更すると rb_bug() などから呼び出される rb_bm_bugreport() でそれを実行形式ファイルだと思って操作してしまってまた SEGV するという不具合があり、とりあえず直接の原因である rb_dump_backtrace_with_lines() の呼び出しをコメントアウトすることで対処しています。 [ruby-dev:46786] [Bug #7597]

usa:r38534 2012-12-21 22:06:17 +0900

Windows 版の rb_w32_readdir() という実装を削除して、rb_w32_readdir_with_enc() を rb_w32_readdir() として使うようにしています。 ずいぶん前のチケットですね。 [ruby-core:24864] [Feature #1927]

ko1:r38535 2012-12-21 22:36:17 +0900

r38532 でメソッド定義を削除した ISeq#line_trace_all, #line_trace_specify のテストだけ残っていたので if false で実行されないようにしています。

kou:r38536 2012-12-21 22:44:44 +0900

拡張ライブラリ fiddle の ext/fiddle/lib/fiddle/import.rb に dl からコピーしてきた時の名残りで CPtr のままだった定数参照があったので Pointer に修正しています。

kou:r38537 2012-12-21 23:12:57 +0900

同じく拡張ライブラリ fiddle の ext/fiddle/lib/fiddle/struct.rb にも CPtr を参照していたところが残っていたので Pointer に修正しています。

kou:r38538 2012-12-21 23:16:02 +0900

もう一ヶ所 ext/fiddle/lib/fiddle/struct.rb に CPtr を参照していたところが残っていたのを Pointer に修正。