Каковы основные упущения в Mruby по сравнению с МРТ?
Я весьма заинтересован в проекте mruby, но мне не повезло найти обобщение основных упущений в mruby по сравнению с другими, более полными реализациями Ruby (наиболее важно, MRI).
README в проекте говорит, что mruby реализует "часть" стандарта ISO для Ruby, но не вдавается в подробности о том, какие функции опущены.
Кто-нибудь знает список таких упущений, или кто-то достаточно знаком с реализацией, чтобы подвести итог?
4 ответа
Поэтому я не читал внимательно источник, но после того, как я собрал mruby и немного запустил интерпретатор, я обнаружил, что отсутствуют следующие вещи (ни в коем случае это не полный список, и я не знаю, являются ли они преднамеренными упущениями или только то, что еще не написано)
- обратные кавычки
eval
String#scan
(instance|module|class)_eval
сString
аргументыModule.constants
Regexp
Process
Bignum
IO
,File
, а такжеDir
Encoding
Thread
а такжеMutex
Marshal
Если у кого-то есть более полный список, или он знает подробности относительно того, были ли эти биты еще не реализованы или намеренно опущены, мне все равно было бы интересно узнать.
Частичный, но актуальный список различий между Ruby MRI и MRuby можно найти по адресу https://github.com/mruby/mruby/blob/master/doc/limitations.md.
По состоянию на февраль 2018 года это перечисленные различия:
1/2
даетFloat(0.5)
потому что mruby не поддерживает Bignum.- Передача массива в
puts
приводит к другому выводу. Kernel.raise
без аргументов не вызывает текущее исключение в предложении спасения.- Исполнение волокна не может пересечь границу функции C
Array
не поддерживает переменные экземпляра- Нет видимости метода (
public
/private
/protected
) поддерживается. defined?
пропал, отсутствует- Псевдоним глобальной переменной работает в CRuby, но не является частью стандарта ISO.
- Оператор не может быть перезаписан пользователем.
Посмотрите на так называемые mrbgems ( https://github.com/mruby/mruby/tree/master/mrbgems). Некоторые из ваших отсутствующих функций (например, RegExp, eval, File) доступны в качестве дополнительного GEM.
Я просто запустил простой кодовый клип с mruby и получил другой результат от МРТ.
class Fixnum
def +(b)
self * b
end
end
puts 3+4
Mruby выводит 7, а MRI выводит 12