String#start_with? should not construct MatchData or set $~
I am working on making $~ more thread-safe in JRuby and came across this unexpected behavior:
$ rvm ruby-3.0 do ruby -e '"foo".start_with?(/foo/); p $~' #<MatchData "foo">
start_with? method was added 11 years ago in https://bugs.ruby-lang.org/issues/3388 but I do not think the set of $~ was an intended feature. The
start_with? method could be much faster and more thread-safe if it did not use the frame-local backref slot and did not allocate a MatchData.
match? which was added specifically (without MatchData or backref setting) to provide a fast way to check if a Regexp matches.
I propose that
start_with? stop constructing MatchData, stop setting backref, and provide only its boolean result in the same way as