ruby-core@ruby-lang.org archive (unofficial mirror)
 help / color / mirror / Atom feed
* [ruby-core:100239] [Ruby master Feature#17206] Introduce new Regexp option to avoid MatchData allocation
@ 2020-09-30 15:42 fatkodima123
  2020-09-30 15:58 ` [ruby-core:100240] " zn
                   ` (6 more replies)
  0 siblings, 7 replies; 8+ messages in thread
From: fatkodima123 @ 2020-09-30 15:42 UTC (permalink / raw)
  To: ruby-core

Issue #17206 has been reported by fatkodima (Dima Fatko).

----------------------------------------
Feature #17206: Introduce new Regexp option to avoid MatchData allocation
https://bugs.ruby-lang.org/issues/17206

* Author: fatkodima (Dima Fatko)
* Status: Open
* Priority: Normal
----------------------------------------
Originates from https://bugs.ruby-lang.org/issues/17030

When this option is specified, ruby will not create global `MatchData` objects, when not explicitly needed by the method.

If the new option is named `f`, we can write as `/o/f`, and `grep(/o/f)` is faster than `grep(/o/)`.

This speeds up not only `grep`, but also `all?`, `any?`, `case` and so on.

Many people have written code like this:
```ruby
IO.foreach("foo.txt") do |line|
  case line
  when /^#/
    # do nothing 
  when /^(\d+)/
    # using $1
  when /xxx/
    # using $&
  when /yyy/
    # not using $&
  else
    # ...
  end
end
```

This is slow, because of the above mentioned problem.
Replacing `/^#/` with `/^#/f`, and `/yyy/` with `/yyy/f` will make it faster.

Some benchmarks - https://bugs.ruby-lang.org/issues/17030#note-9 which show `2.5x` to `5x` speedup.

PR: https://github.com/ruby/ruby/pull/3455



-- 
https://bugs.ruby-lang.org/

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2020-10-28 22:43 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-09-30 15:42 [ruby-core:100239] [Ruby master Feature#17206] Introduce new Regexp option to avoid MatchData allocation fatkodima123
2020-09-30 15:58 ` [ruby-core:100240] " zn
2020-09-30 16:22 ` [ruby-core:100241] " fatkodima123
2020-09-30 18:18 ` [ruby-core:100242] [Ruby master Feature#17206] Introduce new Regexp option to avoid global MatchData allocations eregontp
2020-10-24  1:34 ` [ruby-core:100519] " scivola20
2020-10-24 14:30 ` [ruby-core:100523] " eregontp
2020-10-24 14:51 ` [ruby-core:100524] " eregontp
2020-10-28 22:43 ` [ruby-core:100626] " scivola20

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).