From: chopraanmol1@... Date: 2018-08-21T04:46:04+00:00 Subject: [ruby-core:88585] [Ruby trunk Feature#15010] Reduce allocation for rest parameters Issue #15010 has been updated by chopraanmol1 (Anmol Chopra). normalperson (Eric Wong) wrote: > > New functions prototypes should go into internal.h, though. > ruby/intern.h ended up being part of the public API and external > libraries depend on it :< > > There's no reason for arg_rest_dup to be a macro instead of a > static inline function. Static inlines are preferred because > they make life easier for the compiler and debugger. > Updated. mame (Yusuke Endoh) wrote: > > First, the prefix `_m` is often used for an entry function of Ruby-level method that is passed to `rb_define_method`. Though it is just an internal function, it would be better to avoid the prefix. How about `rb_ary_remove_first`? > For now, I'm renaming the method to rb_ary_behead (suggested by nobu) ---------------------------------------- Feature #15010: Reduce allocation for rest parameters https://bugs.ruby-lang.org/issues/15010#change-73642 * Author: chopraanmol1 (Anmol Chopra) * Status: Open * Priority: Normal * Assignee: * Target version: ---------------------------------------- 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) 0001-Reduce-allocation-for-rest-parameters.patch (7.71 KB) -- https://bugs.ruby-lang.org/ Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe> <http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>