【发布时间】:2013-09-14 23:37:11
【问题描述】:
我对@987654321@ 项目非常感兴趣,但与其他更完整的 Ruby 实现(最重要的是 MRI)相比,我没有找到 mruby 中主要遗漏的总结。
项目中的自述文件说 mruby 为 Ruby 实现了 ISO standard 的“一部分”,但没有详细说明哪些功能被省略了。
是否有人知道此类遗漏的列表,或者是否有人对实现足够熟悉以进行总结?
【问题讨论】:
我对@987654321@ 项目非常感兴趣,但与其他更完整的 Ruby 实现(最重要的是 MRI)相比,我没有找到 mruby 中主要遗漏的总结。
项目中的自述文件说 mruby 为 Ruby 实现了 ISO standard 的“一部分”,但没有详细说明哪些功能被省略了。
是否有人知道此类遗漏的列表,或者是否有人对实现足够熟悉以进行总结?
【问题讨论】:
可在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 不带参数不会在救援子句中引发当前异常。Array 不支持实例变量public/private/protected)。defined? 不见了Kernel#binding。def foo(a, b, **k)) 以不同的方式解析。def foo(a, (b,c), d=b) 无效)。nil? 方法的任何重新定义。【讨论】:
我只是用 mruby 运行了简单的代码片段,并从 MRI 得到了不同的结果。
class Fixnum
def +(b)
self * b
end
end
puts 3+4
mruby 输出 7 而 MRI 输出 12
【讨论】:
看看所谓的 mrbgems (https://github.com/mruby/mruby/tree/master/mrbgems)。您缺少的一些功能(即 RegExp、eval、File)可作为附加 GEM 使用。
【讨论】:
所以我没有仔细阅读源代码,但是在构建了 mruby 并运行了一点解释器之后,我发现缺少以下内容(这绝不是一个完整的列表,我也不知道这些是否是故意遗漏或只是还没有写的东西):
evalString#scan(instance|module|class)_eval 和 String 参数Module.constantsRegexpProcessBignumIO、File 和 Dir
EncodingThread 和 Mutex
Marshal如果有人有更完整的列表,或者知道这些位是否尚未实现或故意省略的详细信息,我仍然很想知道。
【讨论】: