ruby-trunk-changes r32248 - r32272

今日は先週末のチケットアサインパーティの影響か多くのコミッタのみなさんのコミットがあってにぎやかです。 irb, drb, debug.rb などの不具合修正、rdoc のマージ、rake や benchmark.rb のリファクタリングなどがありました。

kosaki:r32248 2011-06-27 21:18:00 +0900

thread_pthread.c の GVL 取得、解放の関数名がアンダースコア2つで始まるのをアンダースコアを削る改名をしています。アンダースコア2つで始まる名前は標準ライブラリのために予約されているのでアプリケーションは避けます。

kosaki:r32249 2011-06-27 21:59:08 +0900

構造体 rb_global_vm_lock_struct の waiting メンバに volatile 修飾子を付けています。GVL取得、解放する時には同構造体の lock で排他処理していますがタイマースレッドはロックせずに参照しているので race condition があるのかも。たぶんあっても一度 polling の動作するだけなのであまり害はないと思われます。

kosaki:r32250 2011-06-27 22:05:22 +0900

thread_pthread.c で返り値を利用しない関数の型を void に変更しています。

kosaki:r32251 2011-06-27 22:10:26 +0900

同じく consume_communication_pipe() で配列の宣言で配列のサイズに変数を使うのをやめています。

keiju:r32252 2011-06-28 00:10:28 +0900

irb で直に next と打つとブロック内ではないので Syntax Error になりますが、その時 frozen な文字列を書き換えようとして例外が発生する不具合を修正しています。 [ruby-dev:43594] [Bug #4793]

svn:r32253 2011-06-28 00:10:32 +0900

version.h の日付更新。

seki:r32254 2011-06-28 00:18:22 +0900

dRuby で DRbObject で包んだオブジェクト(の参照)をリモートに渡したものが、さらにコールバックなどで自分のところに返ってきた時に、ローカルのオブジェクトだという判定に失敗して DRbObject のまま扱う(つまりメソッド呼び出しが RMI になる)という不具合を修正しています。これは DRbObject に格納する uri をメソッドを受け付けたインタフェースから決めるようにしていて、それと DRbServer の uri とが違っているために誤判定していたので、DRbObject を返す時にそれに使った uri を記憶しておいて判定に利用するようにしています。 詳しい解説は seki さんがブログに書いてくださっています。 参考URL: http://d.hatena.ne.jp/m_seki/20110628#1309194998 [ruby-core:35301] [Bug #4409]

marcandre:r32255 2011-06-28 00:42:37 +0900

Random#bytes の rdoc の間違いを修正しています。

marcandre:r32256 2011-06-28 00:42:50 +0900

Kernel#rand と Random.rand が Range オブジェクトを引数に受け付けるようになったことを NEWS ファイルに追記しています。 [ruby-dev:43427] [Bug #4605]

keiju:r32257 2011-06-28 01:20:56 +0900

irb でシングルクオート内の #{} のようなダブルクオートの時に有効な文字列への式の埋め込みが有効になっているのを修正しています。 [ruby-core:34083] [Bug #4232]

mrkn:r32258 2011-06-28 01:26:09 +0900

BigMath.log の実装を Ruby 版から C の拡張ライブラリ内での実装に移植しています。

naruse:r32259 2011-06-28 03:36:55 +0900

r32251 で配列の宣言のサイズに変数を使わないようにしたものが FreeBSD では問題なようで #ifdef で __FreeBSD__ の時だけ元の宣言に戻しています。コミットログによると miniruby で SIGILL が発生するそうです。

nahi:r32260 2011-06-28 05:09:59 +0900

Thread#[] (Thread Local Storage の参照)のサンプルコードが実行時のタイミングに依存する結果を表示していて誤解を与えそうなので、確実な結果を得られる書きかたに変更しています。 [Bug #4480]

drbrain:r32261 2011-06-28 07:51:42 +0900

BasicObject のドキュメントを修正。また bootstrap で特別扱いで作られる BasicObject, Object, Class, Module が rdoc で解析できないので #if 0 で括ったところに rb_define_class() で定義を書いています。逆に言うと rdoc は #if を認識しないんですね。

marcandre:r32262 2011-06-28 08:38:31 +0900

Dir.glob のドキュメントの戻り値についての記述を追記しています。

naruse:r32263 2011-06-28 10:20:23 +0900

rb_daemon() の条件コンパイルで return 文が #endif より中に入っているため daemon(3) を使う環境で正しく返り値を返していなかったのを修正。

drbrain:r32264 2011-06-28 11:28:25 +0900

RDoc 3.7 をマージしています。いくつか小さなバグ修正とクラスツリーの解析処理の書き直しなどがあるようです。

drbrain:r32265 2011-06-28 11:45:29 +0900

rake を 0.9.2.1 に更新しています。
rdoc 用コメントの更新(コミットログによると deprecated な機能を rdoc の整形対象にしないようにしている)や verbose フラグの指定の検出方法の修正など小さな変更のようです。

ko1:r32266 2011-06-28 11:53:15 +0900

thread_pthread.c にてタイマースレッドに polling モードへの移行を通知するための pipe からの read のためのバッファを static 変数にしています。このpipeは書き込まれたというイベント自体が重要で内容は今のところなんでも良いので、バッファは共有してもかまわないということです。またバッファサイズをマクロ定数にしています。

ko1:r32267 2011-06-28 11:57:02 +0900

r32266 の ChangeLog のエントリにもう少し詳しいコメントを追加しています。つまり FreeBSD でエラーになっていたのはスタック上に 1024バイトの領域を確保することでスタックオーバフローが発生していたということのようです。

usa:r32268 2011-06-28 13:45:05 +0900

r32244 で native_stop_timer_thread() の引数を追加したのに windows 版の関数定義が追随していなかったのを修正しています。

naruse:r32269 2011-06-28 15:09:46 +0900

benchmark.rb のリファクタリングや表示の整形の修正を取り込んでいます。 [ruby-core:37593] [Bug #4940]
ChangeLog とコミットログにかなり細かく修正点が書き込まれています。 github で細かい修正毎のコミットをした状態で渡してくれていたのでレビューしやすくて良いですね。

kosaki:r32270 2011-06-28 19:42:25 +0900

シグナルマスクの処理を利用するかどうかの条件コンパイルを USE_TRAP_SIGMASK に集約して、pthread_sigmask(3) が利用できるかどうかで切り替えるようにしています。元々コードは pthread_sigmask() を利用していて sigprocmask() は使わなくなっていましたが configure でのチェックや #ifdef の分岐が古いままになっていたのを整理したようです。

nahi:r32271 2011-06-28 20:45:50 +0900

debug.rb で var コマンドが実行できなくなっていたのを修正しています。 1.9 から ??_variables 系のメソッドが文字列のかわりに Symbol を返すようになったのでそれをそのまま eval に渡してエラーになっていました。to_s で文字列化して渡すようにしています。 [ruby-dev:43946] [Bug #4931]

keiju:r32272 2011-06-28 21:52:21 +0900

irb で \1 などの後方参照用の記法がパースできなかったのを修正しています。