小编kos*_*goe的帖子

为什么Ruby 2.5.0会在Alpine Linux中引发SystemStackError,即使堆栈级别不是太深?

这是重现问题的示例代码.

# test.rb
n = 100000
res = {}
1.upto(n).to_a.inject(res) do |r, i|
  r[i] = {}
end

def f(x)
  x.each_value { |v| f(v) }
end

f(res)
Run Code Online (Sandbox Code Playgroud)

使用Docker Hub提供的Docker镜像运行此代码.

  • Alpine Linux中的Ruby 2.5.0是意想不到的(不太深)
  • Alpine Linux中的Ruby 2.4.3是预期的
  • Debian中的RUby 2.5.0是预期的

有什么区别?

补充说明

(对不起,我的英语不好.)

这是一个补充说明.

我知道示例代码导致SystemStackError.我编写了示例代码以导致SystemStackError.

我想知道"水平"差异的原因.

  • Alpine Linux中的Ruby 2.5.0 - >"...... 137级..."
  • 在ALpine Linux中使用RUby 2.4.3 - >"...... 10067级......"
  • Debian中的RUby 2.5.0 - >"...... 9866级......"

Ruby 2.5.0 + Alpine Linux(ruby:2.5.0-alpine3.7)

在这种情况下,堆栈级别为137.

% docker container run -v (pwd):/mnt/my --rm -it ruby:2.5.0-alpine3.7 ruby -v …
Run Code Online (Sandbox Code Playgroud)

ruby

13
推荐指数
1
解决办法
505
查看次数

标签 统计

ruby ×1