ruby-trunk-changes r63674 - r63684

今日は Integer#** の実装でメソッド呼び出しを迂回するようにする変更などがありました。

nobu: r63674 2018-06-17 08:22:42 +0900

macOS 環境において MJIT の時間計測に mach_absolute_time() というシステムコール(?)を使うようにしています。精度が良くなるみたいです。

svn: r63675 2018-06-17 08:22:44 +0900

version.h の日付更新。

nobu: r63676 2018-06-17 10:07:27 +0900

Integer#** の実装 fix_pow() でも rb_funcall() でメソッド呼び出ししていたところを直接計算して Rational を生成するようにしています。

nobu: r63677 2018-06-17 10:24:25 +0900

rubyspec の Rational#** のテストで結果の Complex が数学的に計算した結果ではなく実際の結果(誤差がある)になってたのを、理想的な結果と指定の誤差範囲内で一致することを確認するようにしています。

nobu: r63678 2018-06-17 11:37:32 +0900

double で絶対値と偏角を指定して Complex オブジェクトを作る rb_dbl_complex_polar() という関数を追加しています。これを使って rb_big_pow() や fix_pow()、rb_float_pow() から利用してメソッド呼び出しを迂回するようにしています。

nobu: r63679 2018-06-17 11:40:32 +0900

MJIT の実行時の共有ライブラリ生成時のリンカオプションにも -arch オプションをコピーするように Makefile.in に MJIT_DLDFLAGS という変数を追加して生成する mjit_config.h に埋め込むようにしています。

nobu: r63680 2018-06-17 11:41:26 +0900

現在通常のコンパイルでは Float の一部の値は flonum といって即値(VALUE 型に値が埋め込まれるもの)で表現されていて、0.0 も即値なのですが USE_FLONUM というマクロで off にもでき(そうなのか)、この時 RFLOAT_0 というマクロが毎回 DBL2NUM() で値を変換するようになっていたので、USE_FLONUM をチェックして未使用時には RFLOAT_0 を static 変数として定義するようにしています。

nobu: r63681 2018-06-17 11:42:46 +0900

common.mk の libruby.a のビルド時のオブジェクトの指定から $(EXTOBJS) を削っています。 EXTOBJS は DLDOBJS に含まれてるはずなので冗長とのこと。

normal: r63682 2018-06-17 11:56:28 +0900

timer thread が複数のスレッドがある時だけ定期的に wakeup するようにする USE_SLEEPY_TIMER_THREAD というマクロが偽の時に USE_SLEEPY_TIMER_THREAD が真の時だけ定義される変数へのアクセスがあったのを #if の分岐内にしています。

normal: r63683 2018-06-17 12:27:45 +0900

gvl_acquire_common() で ruby_vm_t::gvl.waining のインクリメントと条件判定をまとめたり、デクリメントを前置演算子を使うようにする細かい最適化を行なっています。gvl.waining は volatile に宣言されてるので自動で最適化されないから、とのことですが前者のほうはこれまでインクリメント後 1 の時だけ分岐に入ってたのが 2以上になる時も rb_thread_wakeup_timer_thread_low() を呼ぶようになってるけどいいのかな。二重に呼んで悪いってことはなさそうだけどコメントをみるにここでは必要な時に最小限の回数呼び出したいみたいに思えるけど。

nobu: r63684 2018-06-17 19:17:39 +0900

ext/openssl/openssl_missing.h の IMPL_KEY_ACCESSOR2 および IMPL_KEY_ACCESSOR3 というマクロで宣言される関数の引数に const 修飾子を追加しています。