标签: rubinius

Rubinus或MRI 1.9.3(YARV)?

所以,我有一些问题要问我,我确实浏览了互联网,但没有太多可靠的答案.大多数博客帖子会相互取消,因为他们都赞扬了不同的东西,并有基准来"证明他们的观点"(在我的生活中,我从未见过如此多的矛盾基准).

无论如何,我的问题是:

  • 鲁宾尼斯真的快吗?这个显然诚实的亲Rubinius演讲让我印象深刻.另一件令我困惑的事情是,很多Rubinius都是用Ruby编写的,但不知何故它比C-Ruby更快?那一定是一个非常好的语言实现!
  • EventMachine是否与Ruinius一起使用?据我所知,EventMachine部分依赖Fibers(纠正我,如果我错了),直到1.9才实现.我知道Rubinius最终也会支持1.9; 我不介意等一下.
  • C扩展是否适用于Rubinius?我编写了一个C扩展,它将从TCP流接收的二进制消息"序列化"到Ruby对象中,反之亦然(我想这些细节并不重要,但如果它有助于回答这个问题,我会更新帖子).这可能是很多消息!我设法在Ruby中编写相同的代码(尽管在一个月之后它没有什么意义),但事实证明它在应用程序中是一个真正的瓶颈.所以,我不得不使用C作为我的问题的"解决方案". 编辑:我记得,我使用C进行另一项任务,它是阵列的命中测试方法.基本上它只是检查一个"点"是否在一个多边形内部,它在CRuby中是不可能的慢.
  • 如果之前的答案是"否",那么在Rubinus有C替代吗?我收集的VM是用C++编写的,那么.

一些"奖金"问题:

  • C-Ruby(2.0 +,YARV)是否会摆脱GIL?或者至少修改它以便CRuby支持真正的并行性?
  • 什么是mruby我看到matz正在研究它,就描述而言,它看起来非常棒.与CRuby(性能方面)有何不同?

我为你发动的这场文字风暴道歉!♥

ruby rubinius yarv ruby-1.9

17
推荐指数
1
解决办法
3948
查看次数

RUBY_ENGINE的哪些值对应于哪些Ruby实现?

我知道在运行时检测Ruby 实现(例如,MRI,JRuby,Rubinius等)的方法是检查全局常量RUBY_ENGINE:

$ ruby -e 'puts RUBY_ENGINE'
ruby
Run Code Online (Sandbox Code Playgroud)

什么是已知的Ruby实现的相当全面的列表及其对应的RUBY_ENGINE值?

ruby rubinius jruby macruby

12
推荐指数
1
解决办法
960
查看次数

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

可能的重复:
如何用该语言编写语言的编译器?
在"本身"中实现编译器

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

ruby compiler-construction bootstrapping rubinius

11
推荐指数
1
解决办法
1915
查看次数

9
推荐指数
1
解决办法
769
查看次数

您期待哪位红宝石翻译?

目前正在开发多种Ruby实现.您对此感到满意,为什么?您是否在生产中积极使用非MRI实施?

一些选项包括:

ruby ironruby rubinius yarv jruby

7
推荐指数
2
解决办法
1153
查看次数

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

这引发了我在1.9.2 Ruby中的SystemStackError(但在Rubinius中工作):

class Fixnum
  def +(other)
   self + other * 2
  end
end
Run Code Online (Sandbox Code Playgroud)

但没有super+(基于其他错误).

我如何访问原始+功能?

ruby rubinius yarv super

7
推荐指数
1
解决办法
5601
查看次数

为什么tail递归gcd比使用rubinius循环更快

我有这两个gcd函数的实现:

def gcd1(a,b)
  if a==b
    a
  elsif a>b
    if (a%b)==0
      b
    else
      gcd1(a%b,b)
    end
  else
    if (b%a)==0
      a
    else
      gcd1(a,b%a)
    end
  end
end
def gcd2(a,b)
  if(a==b)
    return a
  elsif b>a
    min,max=a,b
  else
    min,max=b,a
  end
  while (max%min)!=0
    min,max=max%min,min
  end
  min
end
Run Code Online (Sandbox Code Playgroud)

函数gcd1是尾递归的,而gcd2使用while循环.

我已经验证了rubinius通过对因子函数进行基准测试来进行TCO,只有基数函数,基准测试显示递归版本和迭代版本是"相同的"(我使用的是基准测试版).

但是对于上述情况,基准测试显示gcd1比gcd2快至少两倍(递归速度是迭代速度的两倍,甚至更快).

我用来进行基准测试的代码如下:

Benchmark.ips do |x|
  x.report "gcd1 tail recursive" do
    gcd1(12016,18016)
  end
  x.report "gcd2 while loop" do
    gcd2(12016,18016)
  end
  x.compare!
end
Run Code Online (Sandbox Code Playgroud)

结果 :

Warming up --------------------------------------
 gcd1 tail recursive    47.720k i/100ms
     gcd2 while loop    23.118k i/100ms
Calculating ------------------------------------- …
Run Code Online (Sandbox Code Playgroud)

ruby performance tail-recursion rubinius

6
推荐指数
1
解决办法
282
查看次数

语言如何被自己解释(如Rubinius)?

我已经使用Ruby的标准MRI实现在Ruby中编程了一段时间,但我一直对我听到的其他实现很好奇.

前几天我正在阅读Rubinius,一个用Ruby编写的Ruby解释器.我尝试在不同的地方查找它,但我很难弄清楚这样的事情究竟是如何起作用的.我在编译器或语言编写方面从未有过多少经验,但我真的很想知道它.

一种语言究竟如何被自己解释?编译中是否有一个基本步骤,我不明白这有什么意义?有人可以向我解释一下这就像我是一个白痴(因为那不会离基地太远)

ruby compiler-construction language-design rubinius self-interpreter

5
推荐指数
1
解决办法
597
查看次数

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.必须使用参数启动jRuby -J-Xmx1500M以提供足够的堆空间.由于堆栈级别太深,我不得不使用push删除测试,并且还删除了最慢的方法,使测试时间不长.使用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 { [].concat(a).concat(b).concat(c) }}
  r.report('splash     ') { N.times {[*a, *b, *c]} }
  r.report('concat_all ')  { N.times { [a, b, c].concat_all }}
  r.report('flat_map   ') { N.times {[a, …
Run Code Online (Sandbox Code Playgroud)

ruby benchmarking rubinius jruby

5
推荐指数
1
解决办法
1293
查看次数

从ASCII-8BIT转换为UTF-8时,"\ xC2"为UTF-8

我有一个轨道项目,运行良好的MRI 1.9.3.当我尝试使用Rubinius运行时,我收到此错误app/views/layouts/application.html.haml:

从ASCII-8BIT转换为UTF-8时,"\ xC2"为UTF-8

haml encoding ruby-on-rails rubinius

4
推荐指数
1
解决办法
6274
查看次数