Project

General

Profile

Actions

Feature #17291

open

Optimize __send__ call

Added by mrkn (Kenta Murata) over 3 years ago. Updated about 3 years ago.

Status:
Assigned
Target version:
-
[ruby-core:100631]

Description

I made a patch to optimize a __send__ call. This optimization replaces a __send__ method call with a call of the method whose name is the first argument of __send__ method. The patch is available in this pull-request.

By this change, the redefined __send__ method is no longer called when it is called by a symbol method name. I guess it is no problem because the following warning message is displayed for a long time.

$ ruby -e 'def __send__; end'
-e:1: warning: redefining `__send__' may cause serious problems

This proposal introduces two new instructions: sendsym and opt_sendsym_without_block. These instructions handle the cases that the first argument of __send__ method is not a symbol literal. I think I can combine these two instructions into one if prefered.

This proposal includes the change proposed in #17288. I'll mark it as a duplicate of this proposal.

I don't handle send method in this proposal. The reason is that we need to examine the redefinition of send method in the instruction execution time. I want to discuss only __send__ method in this ticket.

The benchmark result is below:

# Iteration per second (i/s)

|                 |compare-ruby|built-ruby|
|:----------------|-----------:|---------:|
|vm_send_sym      |     18.001M|  112.208M|
|                 |           -|     6.23x|
|vm_send_var      |     17.779M|   30.922M|
|                 |           -|     1.74x|
|vm_send_var_alt  |      3.817M|    6.817M|
|                 |           -|     1.79x|

Related issues 1 (1 open0 closed)

Has duplicate Ruby master - Feature #17288: Optimize __send__ call with a literal method nameOpenmatz (Yukihiro Matsumoto)Actions
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0Like0