与MRI相比,mruby的主要遗漏是什么?

与MRI相比,mruby的主要遗漏是什么?,ruby,mruby,Ruby,Mruby,我对这个项目很感兴趣,但与其他更完整的Ruby实现(最重要的是MRI)相比,我没有幸运地找到mruby中主要遗漏的总结 该项目中的自述文件说mruby实现了Ruby的“部分”,但没有详细说明省略了哪些功能 是否有人知道此类遗漏的列表,或者是否有人对实现足够熟悉以进行总结 因此,我没有仔细阅读源代码,但在构建了mruby并运行了一点解释器之后,我发现缺少了以下内容(这绝对不是一个完整的列表,我也不知道这些内容是故意遗漏还是尚未编写): 背虱 eval String#scan (实例|模块|类)_

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

该项目中的自述文件说mruby实现了Ruby的“部分”,但没有详细说明省略了哪些功能


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

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

  • 背虱
  • eval
  • String#scan
  • (实例|模块|类)_eval
    带有
    字符串
    参数
  • Module.constants
  • Regexp
  • 过程
  • Bignum
  • IO
    文件
    Dir
  • 编码
  • 线程
    互斥体
  • Marshal

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

看看所谓的mrbgems()。您缺少的一些功能(即RegExp、eval、File)可以作为额外的GEM提供。

我只是用mruby运行了简单的代码剪辑,并从MRI获得了不同的结果

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

mruby输出7,而MRI输出12

Ruby MRI和mruby之间的部分但最新的差异列表可在中找到

截至2020年3月,以下是列出的差异:

  • 1/2
    给出了
    Float(0.5)
    ,因为mruby不支持Bignum
  • 将数组传递给
    puts
    会产生不同的输出
  • Kernel.raise
    不带参数不会在rescue子句中引发当前异常
  • 光纤执行无法跨越C函数边界
  • 数组
    不支持实例变量
  • 不支持方法可见性(
    public
    /
    private
    /
    protected
  • 已定义?
    缺失
  • 全局变量的别名在CRuby中有效,但不是ISO标准的一部分
  • 操作员不能被用户覆盖
  • 不支持内核绑定
  • 关键字参数splat(
    def foo(a,b,**k)
    )的解析方式不同
  • 参数不能默认为其他析构函数参数(
    def foo(a,(b,c),d=b)
    无效)
  • 在条件表达式中忽略对
    nil?
    方法的任何重新定义

这些东西是已经完全消除了,还是将被推出可选的“mrbgems”?3和4是固定的吗?上课了吗?这个例子本身告诉我们的很少,这是正确的行为。请参见此处的mruby限制: