Каковы основные упущения в 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

Другие вопросы по тегам