Состоялся релиз mruby 3.0, встраиваемого интерпретатора динамического объектно-ориентированного языка программирования Ruby. Mruby обеспечивает совместимость синтаксиса на уровне Ruby 1.9, но также поддерживает отдельные возможности из более новых версий. Интерпретатор отличается низким потреблением памяти и возможностью встраивания в другие приложения. Кроме того, поддерживается компиляция Ruby-программ в байткод при помощи развиваемого проектом компилятора “mrbc”. Код mruby распространяется под лицензией MIT.
В новом выпуске значительно сокращено потребление памятя, используемой в mruby VM. Предыдущие версии требовали нескольких сотен КБ оперативной памяти, а mruby 3.0 потребляет около 100 КБ ОЗУ. Основные улучшения:
- Уменьшено потребление оперативной памяти за счет оптимизации выделения памяти для объектов класса Symbols. Уменьшено потребление памяти объектами класса Hash. Проведена оптимизация вызова методов.
- Добавлена поддержка однострочного определения метода без использования ключевого слова “end”: def square(x) = x * x
- Добавлен оператор “=>” (значения => переменная), который используется для правостороннего присваивания значений. 0 => a p a #=> 0 {b: 0, c: 1} => {b:} p b #=> 0
- Поддержка конструкции heredocs.
- Обновлены файлы сборки интерпретатора. Добавлена компиляция с gprof. GCC теперь может собирать в режиме 32 бита на 64 битных платформах. Появилась поддержка Address Sanitizer в clang.
- Изменение, нарушающее совместимость: константа RITE_VM_VER теперь имеет значение 0300, а RITE_BINARY_FORMAT_VER – 0200, что исключает возможность исполнения байткода от прошлых версий.
- Класс Fixnum стал частью Integer, так же как в Ruby 3.0.
Удален класс Integral.