ruby-trunk-changes 2020-09-08

今日は主に Random の内部実装をリファクタリングして新しい乱数生成器の C 実装クラスを追加するのをサポートするマクロや構造体を追加する変更などがありました。

[f4d5273989] Nobuyoshi Nakada 2016-05-12 07:52:34 UTC

Random の親クラスとして Random::Base というクラスを追加して rand, bytes などのメソッドは Random::Base に生やすようにしています。Random::Base は名前空間的に Random の下なので、最初 ID で無名クラスを作ってから rb_const_set() で Random::Base にセットするようにしています。

[af5e87ab21] Nobuyoshi Nakada 2016-05-07 02:51:14 UTC

Random に使う rb_random_t の宣言や rb_random_interface_t という新しい型を宣言する include/ruby/random.h というヘッダを追加しています。また RB_RANDOM_INTERFACE_DECLARE() や RB_RANDOM_INTERFACE_DEFINE() といったマクロを追加して独自の乱数生成器を C で定義するためのヘルパーを追加しています。 random.c での MT の実装もこのマクロを使って宣言するようにしています。

[c449b9b02f] Nobuyoshi Nakada 2020-04-14 15:45:38 UTC

random.c の random_real() から rb_int_pair_to_real_exclusive() と rb_int_pair_to_real_inclusive() を呼び分ける部分を rb_int_pair_to_real() という関数に切り出しています。

[d6ec0ef59b] Nobuyoshi Nakada 2020-04-14 15:52:08 UTC

af5e87ab218c5f4e34c6cdb54ae119a7f0f9033f で追加された Random のための乱数生成器を定義するのに使う構造体 rb_random_interface_t にメンバー get_real を追加してこれがセットされてたらその関数を使って乱数を得るようにしています。

[4924011262] Nobuyoshi Nakada 2020-09-07 09:51:58 UTC

d6ec0ef59b4c7c95beaad09f77cb5f86a0901b97 で追加した構造体メンバ rb_random_interface_t::get_real つきで宣言する RB_RANDOM_INTERFACE_DEFINE_WITH_REAL() というマクロを追加しています。

[2b07b24bdf] Nobuyoshi Nakada 2020-09-07 09:56:39 UTC

構造体メンバ rb_random_t::seed に値をセットする rb_random_base_init() という C API を追加しています。

[5be75aad37] Kazuhiro NISHIYAMA 2020-09-08 01:30:07 UTC

af5e87ab218c5f4e34c6cdb54ae119a7f0f9033f で追加した ext/-test-/random/loop.c の switch 文の break のない case に FALLTHROGH コメントを追加しています。 Coverity Scan の検出を抑制するためとのこと。

[4530bea88c] git 2020-09-08 01:31:51 UTC

version.h の日付更新

[0168094da2] Hiroshi SHIBATA 2020-09-08 10:35:15 UTC

test/fiddle/helper.rb で macOS の最新版 BigSur で /usr/lib/libc.dylib や /usr/lib/libm.dylib がなくなったそうで fiddle のテストで使うライブラリのパスを /usr/lib/libSystem.dylib に変更しています。元々 /usr/lib/libc.dylib や /usr/lib/libm.dylib は libSystem.dylib への symbolic link になってたようです。