ruby-trunk-changes r63886 - r63912

今日は主に benchmark のドライバを benchmark_driver.gem に依存するように乗り換える変更や Pathname#glob の不具合修正、Object#clone と不正な initialize_copy で SEGV する不具合の修正などがありました。

k0kubun: r63886 2018-07-08 22:03:01 +0900

benchmark/ サブディレクトリの下には driver.rb のほかに run.rb, runc.rb, report.rb などのもう使われなくなったファイルが残っていてまぎらわしいので削除しています。 [ruby-core:87884] [Misc #14902]

k0kubun: r63887 2018-07-08 23:08:25 +0900

make benchmark および make benchmark-each のターゲットでベンチマークスクリプト実行する時に prelude.rb を読み込むようにしています。miniruby が IO#write_nonblock を実行できないので prelude.rb を読み込んでおかないといけないとのこと。

k0kubun: r63888 2018-07-08 23:38:05 +0900

benchmark に benchmark_driver.gem という外部の gem パッケージを利用することにしています。 make update-benchmark-driver でインストールするようになっているようです。 benchmark_driver.gem はベンチマークスクリプトYAML ファイル内に文字列として書くみたいで、一部の benchmark スクリプトYAML ファイルに書き換えられています。 [ruby-core:87884] [Misc #14902]

k0kubun: r63889 2018-07-09 00:05:18 +0900

benchmark/driver.rb で YAML のコメント行を削るための正規表現のミスを修正。

svn: r63890 2018-07-09 00:05:19 +0900

version.h の日付更新。

k0kubun: r63891 2018-07-09 00:12:24 +0900

ベンチマークスクリプトの bm_vm1_*.rb を YAML ファイルに書き換えています。

k0kubun: r63892 2018-07-09 00:35:22 +0900

ベンチマークスクリプトの bm_vm2_*.rb を YAML ファイルに書き換えています。

k0kubun: r63893 2018-07-09 01:28:34 +0900

r63891 で YAML に書き換えたベンチマークスクリプト vm1_*.yml で while ループを直書きしていたのを YAML ファイルの prelude や loop_count などの属性を使って書き直しています。なるほど benchmark_driver.gem はこのように本体部分と前処理やループの回数を分離して設定できるんですね。

k0kubun: r63894 2018-07-09 01:35:44 +0900

benchmark/vm1_*.yml は機械的に書き換えたものみたいで(そりゃそうでしょうね)、一部リテラルの書きかたを整形したりしています。

k0kubun: r63895 2018-07-09 01:46:49 +0900

よくわかりませんが benchmark/vm1_ensure.yml で loop_count を使って繰り返し回数を指定してたのをやめてベンチマーク本体の中で while ループを書くうようにしています。本体部分が速すぎて? 負の結果が出てしまうとのこと。

k0kubun: r63896 2018-07-09 02:03:23 +0900

ベンチマークスクリプト vm2_*.yml も同様に prelude や loop_count を利用するようにするリファクタリング

k0kubun: r63897 2018-07-09 02:19:57 +0900

そして vm2_*.yml も一部 YAML の文字列の記法を修正したりしています。

k0kubun: r63898 2018-07-09 02:22:58 +0900

で benchmark/vm2_struct_small_aset.yml も loop_count を使わず本体で while ループするようにしています。こっちは本体でループカウンタの i を参照していたので消せなかったようです。

k0kubun: r63899 2018-07-09 02:31:06 +0900

benchmark/gc/ の GC 絡みのベンチマークは AO Bench や pentomino など他のベンチマークスクリプトに依存していて require することで再利用していたのですが、YAML 化するためにコピーを持つようにしています。うーむ、YAML 化した後でまた共通化できるのかな。

k0kubun: r63900 2018-07-09 02:36:26 +0900

残りの benchmark/bm_*.rb も YAML ファイル化しています。

k0kubun: r63901 2018-07-09 02:47:32 +0900

benchmark/app_pentomino.yml の __END__ の後のスクリプトYAML に含まれてしまっていたので削除しています。

k0kubun: r63902 2018-07-09 02:48:58 +0900

benchmark/ 配下のベンチマークスクリプトYAML に変換されたので benchmark/driver.rb の ruby スクリプト実行のための機能は削除しています。

k0kubun: r63903 2018-07-09 03:08:26 +0900

benchmark/README.md を追加して benchmark_driver.gem に依存していることや実行方法などのドキュメントを追加しています。

svn: r63904 2018-07-09 03:08:27 +0900

r63903 の新規追加ファイルの svn property 設定。

k0kubun: r63905 2018-07-09 03:10:14 +0900

r63903 で追加した benchmark/README.md のサンプルコードの Markdown のハイライト指定を変更しています。

k0kubun: r63906 2018-07-09 03:33:43 +0900

benchmark/driver.rb のオプションを benchmark_driver.gem にあわせるように変更/追加しています。

stomar: r63907 2018-07-09 04:30:19 +0900

Range.new および Range#to_a などの rdoc 用コメントの文法やマークアップを修正しています。

normal: r63908 2018-07-09 08:43:14 +0900

addr2line.c で mmap(3) でファイルをメモリにマップした後に fd を struct obj_info に保持していたのですが、mmap() 後にすぐに fd を close するようにしています。

nobu: r63909 2018-07-09 10:20:20 +0900

Pathname#glob でパターンに最後に path separator ("/")が含まれているものを渡すと結果から 1文字欠けてしまうという不具合を修正しています。 pathname 特有の実装というわけではなくて Dir.glob でも使われている glob_helper() の修正です。 [ruby-dev:50588] [Bug #14899]

nobu: r63910 2018-07-09 10:50:12 +0900

make exe/rubyruby-runner をコンパイルする時にも POSTLINK コマンドがあれば実行するようにしています。 macOS での codesign 用の変数みたいですね。

normal: r63911 2018-07-09 12:07:59 +0900

addr2line.c の kprintf() が addr2line.c の中でしか使われていなかったので static 関数に変更しています。

ko1: r63912 2018-07-09 17:07:26 +0900

Object#clone は dup よりも freeze のフラグや特異メソッドなどより多くの情報をコピーするメソッドです。struct RBasic::flags の FL_USER* のフラグが過剰にコピーされていて、内部的に利用している情報が食い違って SEGV などを起こす可能性があったので、FL_PROMOTED0、FL_PROMOTED1、FL_FREEZE、FL_FINALIZE など一部のフラグのみ明示的にコピーしてあとはコピーしないように修正しています。 [ruby-dev:50575] [Bug #14847]