ruby-trunk-changes 2020-02-06

今日は起動時の処理をちょっと軽くするためのチューニングなどがありました。

[26ffd6e409] Jean Boussier 2020-01-15 13:40:01 UTC

rb_vm_t::frozen_strings に作る fstring を登録しておく st_table の初期サイズを 1000 から 10000 に増やしています。コミットログをみるとたんに ruby 起動して拡張ライブラリ objspace をロードした状態で既に 6000 近く fstring が作られてるので 1000 だと起動時に必ず拡張が入るからとのこと。なるほど。オプションなしで rubygems など組込まれていますしね。

[d16f4220da] git 2020-02-06 01:38:41 UTC

version.h の日付更新

[7c20a2c83c] 卜部昌平 2020-02-04 02:47:04 UTC

.dir-locals.el に C++ 用ヘッダファイルを emacs で開いた時のスタイル指定を有効にするための記述追加。

[3b69552a5c] 卜部昌平 2019-12-21 08:14:20 UTC

template/Doxyfile.tmpl の PREDEFINED という変数にいくつかマクロ定義のスタブを追加して MACRO_EXPANSION を ON にしています。マクロ展開後のソースコードからドキュメント生成するのかな。

[72bbf60f3a] 卜部昌平 2020-01-30 08:49:51 UTC

tool/m4/ruby_setjmp_type.m4 で builtin 関数 __builtin_setjmp() を使う条件に GCC 以外の場合も追加しています。 Sun C Compiler で使えた模様。

[34fd7241e4] 卜部昌平 2020-01-31 06:07:40 UTC

ruby_atomic.h のマクロ定義を分岐する preprocessor の条件で sizeof(long) と sizeof(size_t) を比較してたところをかわりに _LP64 と _I32LPx というマクロをチェックするようにしています。これも Solaris 上での警告抑制のためみたいです。

[b223a78a71] 卜部昌平 2020-01-31 06:25:09 UTC

iseq.c の rb_iseq_new_with_opt() で条件演算子を使って実質代入文の分岐をしていたのを、条件によって値の型が変わるので未定義挙動になるとのことで if 文を使って書きかえています。

[ce4ea956d2] 卜部昌平 2020-01-31 06:53:03 UTC

8427fca49bd85205f5a8766292dd893f003c0e48 と同様に coroutine/ucontext/Context.c と mjit.c で関数ポインタ型の変数に void * 型の変数を代入する時に明示的にキャストするようにしています。

[34f8e75f93] 卜部昌平 2020-01-31 07:15:28 UTC

blocking region (GVL 解放している状態)などで ruby の呼び出しができない状態で処理を遅延させるための postponed job の管理に使う rb_vm_t::postponed_job_index の型を int から rb_atomic_t に変更しています。 ATOMIC_CAS() にこのメンバーのポインタを渡してるので rb_atomic_t にしておくべきとのこと。

[3d83e641b1] Nobuyoshi Nakada 2020-02-06 04:36:02 UTC

rubyspec のマルチスレッドを使うテストで Thread が停止しているかを Thread#status が "sleep" になってるかでチェックしていたのを Thread#stop? を使って判定するようにリファクタリングしています。