我对mruby项目非常感兴趣,但是与其他更完整的Ruby实现(最重要的是MRI)相比,我没有找到mruby中主要遗漏的摘要。
项目中的README表示mruby实现了Ruby的ISO standard的“部分”,但没有详细说明哪些功能被省略。
有没有人知道这些遗漏的清单,或者是否有任何熟悉实施的人员总结?
答案 0 :(得分:5)
所以我没有仔细阅读过这个来源,但是在构建了mruby并稍微运行了解释器之后,我发现以下的东西都丢失了(这绝不是一个完整的列表,也不知道这些是不是故意遗漏或只是尚未写入的事情):
eval
String#scan
(instance|module|class)_eval
参数的String
Module.constants
Regexp
Process
Bignum
IO
,File
和Dir
Encoding
Thread
和Mutex
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
不会在救援条款中引发当前异常。Array
不支持实例变量public
/ private
/ protected
)。defined?
缺失答案 3 :(得分:1)
我只是使用mruby运行简单的代码片段,并获得了与MRI不同的结果。
class Fixnum
def +(b)
self * b
end
end
puts 3+4
mruby输出7而MRI输出12