Tag: rubinius

MRI Ruby和jRuby之间的性能差异

在做一些基准测试以回答有关连接数组的最快方法的问题时,我很惊讶当我使用jRuby进行相同的基准测试时,测试速度要慢得多。 这是否意味着关于jRuby比MRI Ruby更快的旧的慢板已经消失了? 或者这是关于如何在jRuby中处理数组? 这里的基准测试结果和MRI Ruby 2.3.0和jRuby 9.1.2.0两者都运行在64位Windows 7盒子上,所有4个处理器忙于50-60%,内存使用±5.5GB。 必须使用参数-J-Xmx1500M启动jRuby以提供足够的堆空间。 由于堆栈级别太深,我不得不用推送删除测试,并且还删除了最慢的方法,以免使测试时间过长。 使用Jave运行时:1.7.0_21 require ‘Benchmark’ N = 100 class Array def concat_all self.reduce([], :+) end end # small arrays a = (1..10).to_a b = (11..20).to_a c = (21..30).to_a Benchmark.bm do |r| r.report(‘plus ‘) { N.times { a + b + c }} r.report(‘concat ‘) { N.times […]

跨实现确定性数组#shuffle

可以将随机数生成器传递给Array#shuffle ,使得shuffle确定性。 例如,在MRI 1.9.3p327中: [1, 2, 3, 4].shuffle(random: Random.new(0)) # => [1, 2, 4, 3] [1, 2, 3, 4].shuffle(random: Random.new(0)) # => [1, 2, 4, 3] 但是,未指定Random的随机数生成器实现。 因此,Ruby的其他实现具有不同的结果。 在Rubinius 2.0.0rc1(1.9.3发布2012-11-02 JI)中: [1, 2, 3, 4].shuffle(random: Random.new(0)) # => [1, 3, 2, 4] [1, 2, 3, 4].shuffle(random: Random.new(0)) # => [1, 3, 2, 4] 顺便提一下,jruby-1.7.1使用与MRI 1.9.3p327相同的随机数生成器,但这只是偶然的,不能保证。 […]

你如何为该语言的语言编写编译器?

可能重复: 如何用该语言编写语言编译器? 在“本身”中实现编译器 我在看Rubinius ,这是一个使用Ruby编写的编译器编译成字节码的Ruby实现。 我无法理解这一点。 你如何编写语言本身的语言编译器? 似乎只是文本没有任何东西可以将它编译成可执行文件,然后可以编译用Ruby编写的未来代码。 我只是输入那句话感到困惑。 有人可以帮忙解释一下吗?

如何在Ruby中重新定义Fixnum的+(plus)方法并保留原始+function?

这引发了我在1.9.2 Ruby中的SystemStackError( 但在Rubinius中工作 ): class Fixnum def +(other) self + other * 2 end end 但是没有super + (基于其他错误)。 如何访问原始+function?