12

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

项目中的自述文件说 mruby 实现了 Ruby 的ISO 标准的“一部分” ,但没有详细说明哪些特性被省略了。

有谁知道此类遗漏的列表,或者是否有人对实现足够熟悉以进行总结?

4

4 回答 4

5

所以我没有仔细阅读源代码,但是在构建了 mruby 并运行了一点解释器之后,我发现缺少以下内容(这绝不是一个完整的列表,我也不知道这些是故意遗漏还是只是还没有写的东西):

  • 反引号
  • eval
  • String#scan
  • (instance|module|class)_evalString论据
  • Module.constants
  • Regexp
  • Process
  • Bignum
  • IO, File, 和Dir
  • Encoding
  • ThreadMutex
  • Marshal

如果有人有更完整的列表,或者知道这些位是否尚未实现或故意省略的详细信息,我仍然很想知道。

于 2013-09-12T05:05:57.770 回答
4

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

截至 2020 年 3 月,这些是列出的差异:

  • 1/2给出Float(0.5)是因为 mruby 不支持 Bignum。
  • 将数组传递给puts会产生不同的输出。
  • Kernel.raise没有参数不会在救援子句中引发当前异常。
  • Fiber 执行不能跨越 C 函数边界
  • Array不支持实例变量
  • 不支持方法可见性 ( public/ private/ protected)。
  • defined?不见了
  • 为全局变量取别名在 CRuby 中有效,但不是 ISO 标准的一部分。
  • 操作员不能被用户覆盖。
  • Kernel#binding不支持。
  • 关键字参数 splats ( def foo(a, b, **k)) 以不同的方式解析。
  • 参数不能默认为其他def foo(a, (b,c), d=b)已破坏的参数(无效)。
  • nil?在条件表达式中忽略方法的任何重新定义。
于 2018-02-02T10:49:20.907 回答
3

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

于 2013-10-01T18:09:25.293 回答
1

我只是用 mruby 运行简单的代码片段,并从 MRI 得到不同的结果。

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

mruby 输出 7 而 MRI 输出 12

于 2014-03-18T03:07:15.537 回答