与MRI相比,mruby有哪些主要遗漏?

时间:2013-09-11 04:41:36

标签: ruby mruby

我对mruby项目非常感兴趣,但是与其他更完整的Ruby实现(最重要的是MRI)相比,我没有找到mruby中主要遗漏的摘要。

项目中的README表示mruby实现了Ruby的ISO standard的“部分”,但没有详细说明哪些功能被省略。

有没有人知道这些遗漏的清单,或者是否有任何熟悉实施的人员总结?

4 个答案:

答案 0 :(得分:5)

所以我没有仔细阅读过这个来源,但是在构建了mruby并稍微运行了解释器之后,我发现以下的东西都丢失了(这绝不是一个完整的列表,也不知道这些是不是故意遗漏或只是尚未写入的事情):

  • 反引号
  • eval
  • String#scan
  • 带有(instance|module|class)_eval参数的
  • String
  • Module.constants
  • Regexp
  • Process
  • Bignum
  • IOFileDir
  • Encoding
  • ThreadMutex
  • Marshal

如果有人有更完整的清单,或者知道这些位是否只是尚未实施或有意遗漏的细节,我仍然很想知道。

答案 1 :(得分:3)

看一下所谓的mrbgems(https://github.com/mruby/mruby/tree/master/mrbgems)。您缺少的一些功能(即RegExp,eval,File)可作为额外的GEM使用。

答案 2 :(得分:2)

可以在https://github.com/mruby/mruby/blob/master/doc/limitations.md找到Ruby MRI和MRuby之间的部分但最新的差异列表。

截至2018年2月,这些是列出的差异:

  • 1/2提供Float(0.5),因为mruby不支持Bignum。
  • 将数组传递给puts会产生不同的输出。
  • 不带参数的
  • Kernel.raise不会在救援条款中引发当前异常。
  • 光纤执行无法跨越C功能边界
  • Array不支持实例变量
  • 不支持方法可见性(public / private / protected)。
  • defined?缺失
  • 全局变量的别名在CRuby中有效,但不属于ISO标准。
  • 操作员无法被用户覆盖。

答案 3 :(得分:1)

我只是使用mruby运行简单的代码片段,并获得了与MRI不同的结果。

class Fixnum
  def +(b)
    self * b
  end
end
puts 3+4 

mruby输出7而MRI输出12