From: nobu@... Date: 2018-08-21T05:59:48+00:00 Subject: [ruby-core:88588] [Ruby trunk Feature#15010] Reduce allocation for rest parameters Issue #15010 has been updated by nobu (Nobuyoshi Nakada). chopraanmol1 (Anmol Chopra) wrote: > Moving method to internal.h breaks jit https://travis-ci.org/ruby/ruby/builds/418529271 , I'm not sure how to fix this failure. Define the function with `MJIT_FUNC_EXPORTED`. ---------------------------------------- Feature #15010: Reduce allocation for rest parameters https://bugs.ruby-lang.org/issues/15010#change-73645 * 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: