Project

General

Profile

Actions

Feature #15010

closed

Reduce allocation for rest parameters

Added by chopraanmol1 (Anmol Chopra) about 3 years ago. Updated about 3 years ago.

Status:
Closed
Priority:
Normal
Assignee:
-
Target version:
-
[ruby-core:88555]

Description

Currently multiple arrays are allocated while making a call to method with rest parameter.

E.g.

def rest_method(*args) #-> This will create 2 arrays
end

def post_method(*args,last) #-> This will create 3 arrays
end

Applying following set of changes will reduce creation of array to 1

https://github.com/ruby/ruby/pull/1935

Benchmark Result:

trunk

                                  user     system      total        real
benchmark_method              0.340000   0.000000   0.340000 (  0.337035)
rest_method                   0.964000   0.000000   0.964000 (  0.964660)
lead_method                   0.976000   0.000000   0.976000 (  0.976011)
post_method                   2.424000   0.000000   2.424000 (  2.421732)
lead_post_method              1.800000   0.000000   1.800000 (  1.799500)
rest_with_named_parameter     2.040000   0.000000   2.040000 (  2.040323)
lead_proc underflow_args      1.224000   0.000000   1.224000 (  1.225237)
opt_post_proc overflow_args   1.056000   0.000000   1.056000 (  1.057402)

modified

                                  user     system      total        real
benchmark_method              0.336000   0.000000   0.336000 (  0.336911)
rest_method                   0.708000   0.000000   0.708000 (  0.706142)
lead_method                   0.720000   0.000000   0.720000 (  0.717971)
post_method                   1.896000   0.000000   1.896000 (  1.894426)
lead_post_method              1.560000   0.000000   1.560000 (  1.560495)
rest_with_named_parameter     1.464000   0.000000   1.464000 (  1.467313)
lead_proc underflow_args      0.864000   0.000000   0.864000 (  0.863980)
opt_post_proc overflow_args   0.772000   0.000000   0.772000 (  0.770364)

Files

bench_method_arg.rb (1.32 KB) bench_method_arg.rb chopraanmol1 (Anmol Chopra), 08/20/2018 10:14 AM
Reduce-allocation-for-rest-parameters-v2.patch (3.57 KB) Reduce-allocation-for-rest-parameters-v2.patch Patch 2 chopraanmol1 (Anmol Chopra), 08/21/2018 07:34 AM
bench_method_arg_v2.rb (3.15 KB) bench_method_arg_v2.rb chopraanmol1 (Anmol Chopra), 08/21/2018 07:34 AM
Reduce-allocation-for-rest-parameters-v1.patch (5.43 KB) Reduce-allocation-for-rest-parameters-v1.patch Patch 1 chopraanmol1 (Anmol Chopra), 08/27/2018 09:36 AM
Actions

Also available in: Atom PDF