From: "k0kubun (Takashi Kokubun) via ruby-core" Date: 2023-04-16T04:51:44+00:00 Subject: [ruby-core:113265] [Ruby master Bug#4040] SystemStackError with Hash[*a] for Large _a_ Issue #4040 has been updated by k0kubun (Takashi Kokubun). > It would be good to get benchmark results from Linux, so if someone could contribute that, I would appreciate it. I have a linux-x86_64 environment with CPU frequency scaling disabled, so I benchmarked [your PR](https://github.com/ruby/ruby/pull/7522) with yjit-bench. I used `--category headline` because other benchmarks are less important in practice. ``` before: ruby 3.3.0dev (2023-04-14T03:43:46Z master 3733ee835b) [x86_64-linux] after: ruby 3.3.0dev (2023-04-15T06:35:36Z large-array-splat-.. a0eb73211c) [x86_64-linux] -------------- ----------- ---------- ---------- ---------- ------------ ------------- bench before (ms) stddev (%) after (ms) stddev (%) before/after after 1st itr activerecord 65.6 0.4 65.8 0.3 1.00 0.99 erubi_rails 18.7 1.3 18.7 12.4 1.00 1.02 hexapdf 2164.2 0.4 2181.5 0.8 0.99 0.98 liquid-c 57.0 1.6 57.0 1.9 1.00 0.99 liquid-compile 52.6 0.6 52.4 0.6 1.00 1.00 liquid-render 139.8 1.3 140.2 1.1 1.00 1.00 mail 118.1 0.1 118.7 0.2 1.00 1.00 psych-load 1707.5 0.2 1750.9 0.1 0.98 0.97 railsbench 1907.4 0.8 1929.4 0.8 0.99 0.99 ruby-lsp 59.5 10.3 59.4 11.9 1.00 0.98 sequel 65.6 0.2 65.6 0.2 1.00 1.00 -------------- ----------- ---------- ---------- ---------- ------------ ------------- ``` I tried running them a few times. In `before/after`, psych-load is stably 2% slower. hexapdf and railsbench show a 1% slowdown, which may be insignificant. Other benchmarks seem to have no difference. ---------------------------------------- Bug #4040: SystemStackError with Hash[*a] for Large _a_ https://bugs.ruby-lang.org/issues/4040#change-102826 * Author: runpaint (Run Paint Run Run) * Status: Open * Priority: Normal * Assignee: ko1 (Koichi Sasada) * ruby -v: ruby 1.9.3dev (2010-11-09 trunk 29737) [x86_64-linux] * Backport: 2.2: UNKNOWN, 2.3: UNKNOWN, 2.4: UNKNOWN ---------------------------------------- =begin I've been hesitating over whether to file a ticket about this, so please feel free to close if I've made the wrong choice. I often use Hash[*array.flatten] in IRB to convert arrays of arrays into hashes. Today I noticed that if the array is big enough, this would raise a SystemStackError. Puzzled, I looked deeper. I assumed I was hitting the maximum number of arguments a method's argc can hold, but realised that the minimum size of the array needed to trigger this exception differed depending on whether I used IRB or not. So, presumably this is indeed exhausting the stack... In IRB, the following is the minimal reproduction of this problem: Hash[*130648.times.map{ 1 }]; true I haven't looked for the minimum value needed with `ruby -e`, but the following reproduces: ruby -e 'Hash[*1380888.times.map{ 1 }]' I suppose this isn't technically a bug, but maybe it offers another argument for either #666 or an extension of #3131. =end -- https://bugs.ruby-lang.org/ ______________________________________________ ruby-core mailing list -- ruby-core@ml.ruby-lang.org To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org ruby-core info -- https://ml.ruby-lang.org/mailman3/postorius/lists/ruby-core.ml.ruby-lang.org/