[#71815] [Ruby trunk - Bug #11768] [Open] Add a polymorphic inline cache — tenderlove@...
Issue #11768 has been reported by Aaron Patterson.
tenderlove@ruby-lang.org wrote:
On Thu, Dec 03, 2015 at 10:51:08PM +0000, Eric Wong wrote:
Aaron Patterson <tenderlove@ruby-lang.org> wrote:
[#71818] [Ruby trunk - Feature #11769] [Open] optimize case / when for `nil` — tenderlove@...
Issue #11769 has been reported by Aaron Patterson.
tenderlove@ruby-lang.org wrote:
[#71931] [Ruby trunk - Feature #11786] [Open] [PATCH] micro-optimize case dispatch even harder — normalperson@...
Issue #11786 has been reported by Eric Wong.
Oops, I forgot to free the table when iseq is destroyed :x
On 2015/12/08 12:43, Eric Wong wrote:
SASADA Koichi <ko1@atdot.net> wrote:
On 2015/12/08 13:53, Eric Wong wrote:
[#72028] [Ruby trunk - Feature #11405] [Assigned] [PATCH] hash.c: minor speedups to int/fixnum keys — mame@...
Issue #11405 has been updated by Yusuke Endoh.
mame@ruby-lang.org wrote:
[#72045] Ruby 2.3.0-preview2 Released — "NARUSE, Yui" <naruse@...>
We are pleased to announce the release of Ruby 2.3.0-preview2.
Please add your optimizations before RC1.
SASADA Koichi <ko1@atdot.net> wrote:
On 2015/12/11 18:06, Eric Wong wrote:
SASADA Koichi <ko1@atdot.net> wrote:
[#72069] [Ruby trunk - Feature #11405] [PATCH] hash.c: minor speedups to int/fixnum keys — mame@...
Issue #11405 has been updated by Yusuke Endoh.
[#72115] Re: [ruby-cvs:60264] duerst:r53112 (trunk): * enc/ebcdic.h: new dummy encoding EBCDIC-US — "U.NAKAMURA" <usa@...>
Hi,
On 2015/12/14 22:34, U.NAKAMURA wrote:
Hi,
[ruby-core:71818] [Ruby trunk - Feature #11769] [Open] optimize case / when for `nil`
Issue #11769 has been reported by Aaron Patterson.
----------------------------------------
Feature #11769: optimize case / when for `nil`
https://bugs.ruby-lang.org/issues/11769
* Author: Aaron Patterson
* Status: Open
* Priority: Normal
* Assignee:
----------------------------------------
Hi,
I've noticed that when there are certain values in a case / when statement it gets optimized to a hash lookup. For example, code like this:
~~~
def foo socket
case str = socket.read_nonblock(10, exception: false)
when :wait_readable
# do something
else
str
end
end
puts RubyVM::InstructionSequence.of(method(:foo)).disasm
~~~
The above code will use `opt_case_dispatch` instruction with a hash. However, if I use `nil` in the case statement like this:
~~~
def foo socket
case str = socket.read_nonblock(10, exception: false)
when :wait_readable
# do something
when nil
# got an EOF
else
str
end
end
puts RubyVM::InstructionSequence.of(method(:foo)).disasm
~~~
Then the optimization is lost.
I've attached a patch that adds `nil` to the optimized case such that the above code will use `opt_case_dispatch`. My patch defines `===` on `nil`, then adds nil to the list of "optimizable literals".
---Files--------------------------------
0001-optimize-case-when-for-nil.patch (3.4 KB)
--
https://bugs.ruby-lang.org/