Hatena::ブログ(Diary)

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

2018-05-22 ruby-trunk-changes r63476 - r63488

[][]ruby-trunk-changes r63476 - r63488

今日は主にメモリの realloc, free 時に malloc_size の管理をするバージョンを使うように強化する変更がありました。

nobu: r63476 2018-05-21 21:24:47 +0900

ruby.c の ruby_init_loadpath_safe() からプラットフォーム毎のパス名の変換処理を dladdr_path() の中に移動して runtime_libruby_path() という関数名に改名しています。主に Windows 環境でのパスのエンコーディングの扱いについての処理がまとめられています。

nobu: r63477 2018-05-21 21:25:45 +0900

ruby.c の static 変数 libdir が ruby_init_loadpath_safe() の一部のブロック中でのみ利用されているので、このスコープに移動しています。

usa: r63478 2018-05-21 21:32:40 +0900

make golfgorubyビルドされますが make goruby でもビルドできるようにしています。 sub make に GOLF=golf2 を渡してるのはなぜだろう。

usa: r63479 2018-05-21 21:36:22 +0900

make help で make goruby ターゲットも表示するようにしています。

k0kubun: r63480 2018-05-21 23:32:55 +0900

mjit_exec() で MJIT のオプション mjit_opts.wait のチェックを必要な時にまで遅延させるようにする最適化

normal: r63481 2018-05-22 06:21:23 +0900

array.c の ary_resize_capa() および ary_shrink_capa() でバッファのメモリ realloc および free を SIZED_REALLOC_N() や ruby_sized_xfree() を使うようにして malloc 済みの容量を記録するようにしています。 malloc_usable_size の依存をやめるためってあるけど malloc_usable_size ってこの記録してる malloc 済みサイズと関係してるやつじゃなかったっけ、と思ったけどこれはライブラリ関数で確保済みメモリ容量を得るものを wrap してる関数みたいです。これらのライブラリ関数を呼ばなくてすむようにできるだけ正確に管理しよう、ってことですかね。 [Feature #10238]

svn: r63482 2018-05-22 06:21:25 +0900

version.h の日付更新。

normal: r63483 2018-05-22 06:40:54 +0900

r63481 と同様に load.c の loaded_features_index_clear_i() でも xfree() のかわりに ruby_sized_xfree() を利用するようにしています。

normal: r63484 2018-05-22 09:44:22 +0900

parse.y でも xfree() のかわりに ruby_sized_xfree() を、REALLOC_N() のかわりに SIZED_REALLOC_N() を使うようにしています。

normal: r63485 2018-05-22 10:13:08 +0900

string.c でも xfree() のかわりに ruby_sized_xfree() を、REALLOC_N() のかわりに SIZED_REALLOC_N() を利用するようにしています。

normal: r63486 2018-05-22 10:42:21 +0900

gc.c の rb_objspace_call_finalizer() で T_DATA 型オブジェクトの free 関数が未設定かどうかのチェックに -1 をキャストして使ってたのを RUBY_DEFAULT_FREE というそのための定数マクロを使うようにしています。内容は同じですが readability のために。

normal: r63487 2018-05-22 10:58:47 +0900

string.c の tr_trans() で未使用の警告が出る old という変数を MAYBE_UNUSED() マクロをつけて宣言して警告抑制するようにしています。

naruse: r63488 2018-05-22 16:31:36 +0900

rb_hash_bulk_insert() の宣言を internal.h から include/ruby/st.h に移動しています。 msgpack-ruby で使いたいとのこと。

2018-05-21 ruby-trunk-changes r63469 - r63475

[][]ruby-trunk-changes r63469 - r63475

今日は gorubyビルド修正や、gorubyFizzBuzz 用の新メソッド f の追加などがありました。

usa: r63469 2018-05-21 03:09:36 +0900

gc_sweep() で未初期化変数(コミットログだと unused variable だけど list_for_each() マクロの展開するループで条件によっては利用されないってことかな)の初期化を追加しています。

svn: r63470 2018-05-21 03:09:37 +0900

version.h の日付更新。

usa: r63471 2018-05-21 03:13:08 +0900

code golf 用の gorubyビルドが壊れてたので依存関係というかソースファイルパスの指定を修正しています。

usa: r63472 2018-05-21 03:36:42 +0900

make golfgoruby ビルド時にビルドプロセスのログ強化する V 変数を子 make に伝播させるようにしています。

usa: r63473 2018-05-21 03:36:53 +0900

r63471 の続きで gorubyビルドがまだうまくいっていなかったようなので purify やリンカに渡すオブジェクトファイルの指定を修正しています。

shyouhei: r63474 2018-05-21 09:41:57 +0900

parse.y のデバッグ用メッセージの出力でフォーマット文字列の %p 指示子で出力するポインタを明示的に (void*) にキャストするようにしています。

usa: r63475 2018-05-21 15:20:24 +0900

code golf 用の goruby の prelude に f というメソッドを追加しています。いわゆる FizzBuzz を1文字で実現するためのメソッドみたいですね。

2018-05-19 ruby-trunk-changes r63465 - r63468

[][]ruby-trunk-changes r63465 - r63468

今日は get_insn_info_succinct_bitvector() の SEGV する可能性があった不具合修正などがありました。

nobu: r63465 2018-05-19 09:22:39 +0900

標準添付ライブラリ fileutils の Windows 環境かどうか判定する fu_windows? というメソッドですが、判定方法は RbConfig::CONFIG["host_os"] か RUBY_PLATFORM の値で、これはプロセス内で変化しないはずのものなので、メソッド内で分岐して判定していたのをメソッド定義自体を分岐して true or false のリテラルで返すメソッドを定義するようにしています。あと bccwin と emx というプラットフォームは判定から削っています。 emx って先日特別処理を削った OS/2 emx ですよね。OS/2 って Windows とか DOS系譜なのか。

svn: r63466 2018-05-19 09:22:40 +0900

version.h の日付更新。

yui-knk: r63467 2018-05-19 11:47:26 +0900

vm_core.h で struct rb_execution_context_struct の前方宣言が重複していたので後のほうのを削除しています。

yui-knk: r63468 2018-05-19 12:43:00 +0900

get_insn_info() の succinct bitvector による実装の時(今はデフォルトはこれです)のデバッグ用の出力が有効な時に VM_CHECK_MODE が 0 だと body->insns_info.positions が解放済みなのにメモリを参照してしまっていた不具合を修正しています。

2018-05-18 ruby-trunk-changes r63454 - r63464

[][]ruby-trunk-changes r63454 - r63464

今日は rubygems の 2.7.7 への更新などがありました。

nobu: r63454 2018-05-17 21:36:33 +0900

rb_parser_printf() の宣言に PRINTF_ARGS() をつけて引数のフォーマット文字列を解釈してチェックさせるようにしています。また呼び元で1箇所明示的なキャストの追加を行っています。

k0kubun: r63455 2018-05-18 02:11:07 +0900

r63212 で入って r63249 で一旦 revert されて r63333 で再度入った attr_reader によるメソッドの MJIT コンパイル時の inline 化の一部、opt_send_without_block 命令の VM スタック消費量を調整しているところを revert しています。

svn: r63456 2018-05-18 02:11:08 +0900

version.h の日付更新。

nobu: r63457 2018-05-18 09:36:24 +0900

if や unless などの条件部にリテラルが書かれてる時の警告に、true と false が直に書かれてるケースは除外するようにしています。 while true ... end で無限ループというのは(あまりしないけど)普通の書きかただし、デバッグコードなんかを一時的に on/off するのに if false みたいな書きかたはありますからね。

nobu: r63458 2018-05-18 09:37:59 +0900

r63457 の変更をうけて(というかこっちを修正しようとして警告に気がついたのかも) tool/redmine-backporter.rb の無限ループが while 1 だったのを while true に書き直しています。

nobu: r63459 2018-05-18 09:38:00 +0900

tool/ の下の各種スクリプトの未使用のローカル変数の削除。たぶん警告除去ですね。

nobu: r63460 2018-05-18 09:40:06 +0900

tool/ の下の各スクリプトでブロックパラメータで外の変数を shadowing している警告の除去。

hsbt: r63461 2018-05-18 10:39:13 +0900

標準添付されている rubygems を 2.7.7 に更新しています。リリースノートはこちら。 https://blog.rubygems.org/2018/05/18/2.7.7-released.html

normal: r63462 2018-05-18 17:01:07 +0900

thread.c の errno の EINTR や ERESTART などリトライ対象のエラーを判定する retryable() をタイムアウトの期限も引数に渡してこのタイマーを 0 にセットしなおしてリトライするようにして wait_retryable() という関数名に変更しています。EINTR などのエラーが do_select() などからかえらないようにしているみたいです。

normal: r63463 2018-05-18 17:29:28 +0900

gc.c の rb_objspace_t::malloc_params::increase というメンバーを size_t から size_t の2つのメンバー(add, sub)をもつ構造体による表現に変更し、減算時に sub を増やすことで表現するようにしています。ATOMIC_SIZE_CAS() を利用した atomic な減算がコストが高いのでこれでシンプルに減算を行なえるようにしてパフォーマンスを改善しているそうです。 [ruby-core:87096] [Feature #14767]

normal: r63464 2018-05-18 17:40:16 +0900

r63463 を revert しています。 かえって遅くなることがあったみたいです。

2018-05-17 ruby-trunk-changes r63445 - r63453

[][]ruby-trunk-changes r63445 - r63453

今日は URI::Generic.use_proxy? の no_proxy の指定の拡張や Range#=== が内部的に cover? も利用するようにする仕様変更などがありました。

stomar: r63445 2018-05-17 03:55:28 +0900

標準添付ライブラリ optparse の rdoc 用コメントでコマンドラインのサンプルの shell のプロンプトを簡素なものにしています。

svn: r63446 2018-05-17 03:55:29 +0900

version.h の日付更新。

normal: r63447 2018-05-17 05:39:30 +0900

gc.c の struct heap_page の linked list の実装を ccan/list を利用するようにしています。 [ruby-core:87067] [Misc #14762]

normal: r63448 2018-05-17 06:54:42 +0900

thread.c のマクロ GVL_UNLOCK_BEGIN()/GVL_UNLOCK_END() や BLOCKING_REGION() が導入するブロックで rb_thread_t を変数に格納するのをやめてマクロ引数で指定するようにしています。マシンスタックの消費を抑えるためみたいですね。

normal: r63449 2018-05-17 12:48:27 +0900

vm_trace.c の enum 定数 PJRR_SUCESS → PJRR_SUCCESS に変更(typo 修正)。

normal: r63450 2018-05-17 12:48:32 +0900

構造体 rb_postponed_job_t の flags メンバーを削除しています。 reserved ってコメントついてるけどいいのかな。 5年も reserved されっぱなしだらかもういいやろ、ということみたいですけど。まあ確かに公開されてない構造体だし必要なら追加すればいいですね。 [ruby-core:87052] [Misc #14764]

normal: r63451 2018-05-17 13:20:33 +0900

rb_vm_t のメンバー postponed_job_buffer を独自の型 rb_postponed_job_t の配列で持ってたのを st_table を利用するように変更しています。

naruse: r63452 2018-05-17 16:40:01 +0900

標準添付ライブラリ uriURI::Generic.use_proxy? で no_proxy のドメインの先頭を "." ではじめてサブドメインにマッチさせることもできるようにしています。 https://github.com/ruby/ruby/pull/1748 [ruby-core:84789] [Bug #14345]

nobu: r63453 2018-05-17 19:46:21 +0900

Range#=== は Range#include? メソッドでチェックしていたのですが、rb_funcall() で実際にメソッド呼び出しはやめて range_include_internal() で include? 相当のチェックをしてみて、include? で判定不能だった時には cover? 相当の処理で判定するようにしています。 Range#include? は始点が整数に変換可能か、文字列かでないと処理できないのでこれ以外の要素による Range の時には <=> メソッドの大小関係のみで判定できる cover? のほうがより汎用的に使えるということのようです。 [ruby-core:85918] [Feature #14575]