2021/10/14 今回の気になった bugs.ruby のチケット
今週は feature チケットに関するトリアージのガイドラインの提案などがありました。
[Bug #18250] Anonymous variables seem to break Ractor.make_shareable
- 以下のようなコードを実行すると
Ractor.make_shareable
でTypeError
が発生するというバグ報告
def foo(*); ->{ super };end # error: `make_shareable': wrong argument type false (expected Symbol) (TypeError) Ractor.make_shareable(foo) # expected Symbol
TypeError
ではなくてRactor::IsolationError
が発生するのが期待する挙動らしい- ちなみに
Ractor.make_shareable
は Ractor 間でオブジェクトを使用するために引数を不変にするメソッド #freeze
とは違ってネストしてオブジェクトをfreeze
する
# freeze は配列の中身までは freeze しない ary = [{ a: 1, }, { b: 2 }] ary.freeze pp ary.frozen? # => true pp ary[0].frozen? # => false pp ary[1].frozen? # => false # freeze は配列の中身までは freeze しない ary = [{ a: 1, }, { b: 2 }] Ractor.make_shareable(ary) pp ary.frozen? # => true pp ary[0].frozen? # => true pp ary[1].frozen? # => true
[Bug #18246] send does not work for unary ! operator when operator isn't a literal symbol
!
単項演算子をsend
で呼び出すとエラーになるというバグ報告
# これは + 二項演算子を呼ぶ 1.send(:+, 2) # => 3 1.send(:"+", 2) # => 3 # これは - 単項演算子を呼ぶ 1.send(:-@) #=> -1 1.send(:"-@") #=> -1 # これは ! 単項演算子を呼び出してほしい false.send(:!@) #=> true # error: undefined method `!@' for false:FalseClass (NoMethodError) false.send(:"!@")
- これは期待する挙動で
!
単項演算子を呼び出す場合は!
メソッド名で呼び出す必要があるfalse.send(:"!") # => true
- 逆に
false.send(:!@)
がなぜ動くのかと言うと:!@
は:!
になるのでfalse.send(:!)
と同じ意味になるから
p :!@ # => :! p :"!@" # => :"!@"
- 知らんかった
[Misc #18248] Add Feature Triaging Guide
- feature チケットに対するトリアージのガイドラインを追加する提案
- チケットの優先順位やどういう時に Close するのかの決めごとなどのガイドライン
- チケットの内容を機械翻訳すると以下のような感じ
Rubyは2019年6月にバグトリアージガイドを追加しましたが、それ以降はそれを使ってトラッカーのオープンバグを1400以上から300程度まで減らしました。Rubyでは現在、課題トラッカーに1200以上のオープンな機能リクエストがあります。ざっと見たところ、これらの多くはすでに実装されており、多くは望まれていないと思われます。私はRubyに機能トリアージガイドを追加し、機能リクエストのトリアージを開始したいと考えています。オープンな機能リクエストは、まだ実装されていない機能のうち、Rubyコアチームが実装を希望したり、パッチを検討したりするものを目標としています。そうすることで、潜在的なRubyへの貢献者が、自分ができる貢献の可能性を簡単に知ることができるようになります。
- 関連として 2019年に bug チケットのトリアージのガイドラインを追加している
- https://bugs.ruby-lang.org/issues/15943
- 結果的に 1400以上あった bug チケットが300程度まで減ったらしい、すごすぎる
- ガイドライン自体は PR にかかれているので気になる人は見てみるとよいかも