ruby-trunk-changes 2021-05-07

今日は T_PAYLOAD 型という新たなオブジェクトの内部的な型の追加をしてオブジェクトの heap 上に複数の slot をまとめて確保する方法の追加や、RubyVM::AbstractSyntaxTree::Node から node_id を取得できるようにする機能の実験的実装の追加などがありました。

[ddc29e2989] Nobuyoshi Nakada 2021-05-06 13:04:14 UTC

364044e0909692315bd6c2f0e1d968ede9c2beb8 で標準添付ライブラリ net/http が stringio を require しなくなったので、rubyspec の net/http のテストで逆に StringIO を使ってるところで明示的に require を追加しています。

[8bbd319806] Matt Valentine-House 2021-03-30 12:34:14 UTC

オブジェクトの種類に T_PAYLOAD というのを追加して、ここを先頭にして(?) heap 内の連続した slot をまとめて確保するというのに使っているようです。struct RPayload の先頭メンバーの flags の一部のビット範囲を使って確保する slot 数を持つようにしています。Ractor 毎の slot 範囲を事前に予約する実装のために導入したのかな。複雑になってきたなぁ。ただし USE_RVARGC というマクロが定義された時だけ有効になるようにしているようです。

[d1bd4e233c] Matt Valentine-House 2021-03-30 12:36:58 UTC

8bbd3198068f5e8335ab01f0b29cdae225b25b5b の続きで class_alloc() で T_PAYLOAD を利用して rb_classext_t のためのメモリ領域をオブジェクト用の heap 上に slot と連続した領域に確保するようにしているようです。あーなるほどオブジェクトのための slot としてではなくて、オブジェクトに追加で必要になる領域も heap 上に置いちゃおうということなのか。

[b0b7751f3b] Matt Valentine-House 2021-04-28 13:56:02 UTC

misc/lldb_cruby.py の lldb_inspect で T_PAYLOAD 型オブジェクトの表示の対応を追加しています。

[99644514db] Nobuyoshi Nakada 2021-05-06 14:53:26 UTC

8bbd3198068f5e8335ab01f0b29cdae225b25b5b の変更の C のスタイルの修正や USE_RVARGC が定義されてる時だけ使われる関数の宣言を preprocessor の分岐でかこむ変更。

[0bbab1e515] Nobuyoshi Nakada 2021-05-06 15:04:36 UTC

無引数の関数の宣言などで明示的に f(void) のように void を書くスタイルに統一しています。

[550b02e479] git 2021-05-06 15:13:45 UTC

version.h の日付更新

[578e6416e7] Peter Zhu 2021-05-06 15:51:47 UTC

misc/lldb_cruby.py に 5a451c4b1f7f7bbd6607cb3f32f3ddd98e064971 で導入した dump_page の page 指定が正常かどうかチェックする is_valid メソッドで / による除算の結果が float になる(Python 3 系では)ので明示的に int に直すようにしています。

[ff69ef27b0] Yusuke Endoh 2021-04-30 09:54:46 UTC

compile.c の ADD_INSN() などのマクロに行番号を渡す時に行番号そのものを渡すのではなくて、対応する NODE を渡して、new_insn_core() の中で nd_line() で行番号を取り出すようにしています。さらに INSN::insn_info::node_id という構造体メンバーを追加してこの NODE の node_id の値も格納しておくようにしています。また EXPERIMENTAL_ISEQ_NODE_ID というマクロを定義してビルドすると RubyVM::AbstractSyntaxTree::Node#node_id メソッドを追加して ruby レベルでも node_id が取り出せるようにしています。NoMethodError の位置をより細かく取得できるようにするための布石だそうです。