ruby-trunk-changes 2021-04-13

今日は MSVC でのビルドエラー対策や String#crypt の Multi Ractor 対応などがありました。

[df7efdcb6b] Nobuyoshi Nakada 2021-04-12 13:47:07 UTC

string.c の crypt.h または missing/crypt.h の #include する位置を ruby 内部のヘッダ群の #include 後に移動しています。 LONG_LONG マクロの再定義対策とのこと。

[12f7ba5ed4] Nobuyoshi Nakada 2021-04-12 13:56:15 UTC

String#crypt の実装で呼ぶ crypt(3) は MT-safe ではないみたいで複数 Ractor から呼ばないようにするため排他するため専用の mutex を追加しています。その初期化を利用時にするためにさらに rb_atomic_t なメンバーも作って RUBY_ATOMIC_CAS() で二重に初期化しないようにするなど結構手が込んでます。

[6878d51731] git 2021-04-13 04:12:52 UTC

version.h の日付更新

[f411fcd145] 卜部昌平 2021-04-09 08:56:43 UTC

include/ruby/internal/token_paste.h で定義されていた RBIMPL_TOKEN_PASTE() という引数を連結したトークンに展開するマクロを削除して、それを使っていたところを単に "x ## y" のような構文で連結するようにしています。

[6413dc27dc] 卜部昌平 2021-04-09 09:01:15 UTC

f411fcd14587cfbf1efb86944134b993c04b050e の include/ruby/internal/token_paste.h の削除に伴なう #include directive の削除と common.mk および各種拡張ライブラリの depend ファイルの依存関係の更新。

[f8e1bf283d] 卜部昌平 2021-04-12 02:37:01 UTC

include/ruby/internal/core/rdata.h で定義しているマクロで rb_data_object_xxx_ のような名前のマクロを同じ名前に展開するように定義していたのが MSVC で再帰的な展開になってビルドエラーになるとのことで、マクロ名を rb_data_object_xxxx_2 に改名しています。最終的に rb_data_object_wrap_0 が rb_data_object_wrap に展開されるようになってて循環はしているので、改名すると直るのがよくわからないですが、直るそうです。

[393923b50d] Nobuyoshi Nakada 2021-04-13 05:49:49 UTC

RB_LL2NUM()/RB_ULL2NUM()/RB_NUM2ULL() などのマクロを RB_NUM2LL() と同様に inline 関数版に展開するようにしています。