Pull to refresh

RubyConf 2010: настоящее и будущее Руби (II)

Reading time4 min
Views1K
Original author: Yukihiro Matsumoto
Я предлагаю вам прочитать перевод третьей части доклада автора Руби, Yukihiro Matsumoto, на RubyConf 2010, опубликованных в его блоге на японском языке, в которой он рассказывает о Rite, минималистичной и модульной реализации Ruby, предназначенной для встраиваемых систем — «умного дома», телевизора или роботов.

Перевод дополнен материалом презентации.


В первый же день Dave Thomas в своем докладе упомянул три важные вещи и, конечно, среди них было разнообразие. Разнообразие важно.

Если говорить о Ruby, то к настоящему дню появилось множество различных реализаций.

Кроме перечисленных полных реализаций языка, есть еще и частичные реализации, «Ruby-подобные» языки, и мне сложно даже предположить, сколько их на самом деле может быть.


Программисты, предпочитающие Python, раньше говорили: «посмотрите на CPython, и Jython, и IronPython. Разве появится что-нибудь подобное для Ruby (и Perl)? Эти языки слишком сложны для появления альтернативных реализаций». Теперь же реализаций Ruby даже больше. (Впрочем, хорошо, что развиваются и такие новые интерпретаторы Python, как PyPy.)

С другой стороны, разнообразие требует жертв. Поддержка множества различных платформ требует вложения большого количества сил, особенно если это новые реализации, еще не достигшие такого уровня совместимости, как JRuby, CRuby, MacRuby и Rubinius.

Я знаю цену, которую приходится платить за разнообразие, и оно того стоит.

На самом деле, я так хвалю разнообразие потому, что хочу еще больше его увеличить, написав новый интерпретатор.

Он называется RiteVM, и предназначен для встраиваемых устройств.


Ruby изначально разрабатывался для Unix, однако во встраиваемых системах интерфейсы Unix и POSIX часто отсутствуют за ненадобностью.

Так как производительность встраиваемых систем в последнее время значительно возросла, то зачастую выполнением в реальном времени можно пренебречь в пользу использования языка более высокого уровня.

Итак, мы разрабатываем новый интерпретатор.
  • Интерпретатор будет поддерживать минимальное подмножество языка Ruby. Большая часть функций ввода-вывода и работы с файлами будет убрана (но, возможно, будет добавлена впоследствии).
  • Реализация будет похожа на Lua (но с языком получше).
  • Интерпретатор будет модульным. Например, можно реализовать транслятор без eval. Многие параметры можно будет установить при компиляции: Float может быть реализован как float или double, Fixnum — как int, long, long long или еще как-нибудь. Строковые функции будут работать с ASCII или UTF-8. Интерпретатор будет намного меньше абстрагирован от платформы, например, в реализации для простых устройств может отсутствовать файловый ввод-вывод.
  • Числа с плавающей точкой будут реализованы как непосредственные значения, что существенно ускорит вычисления. (прим. пер.: в Ruby MRI целые числа реализованы так, что они занимают в памяти один платформенный указатель; Float же является объектом и занимает существенно больший объем памяти.)
  • Минимальные требования включают в себя компилятор C99. Rite будет работать на PC, в рамках RTOS или сама по себе, и использовать меньше памяти и ресурсов процессора.
  • Будет использоваться регистровая виртуальная машина с 32-битным словом и набором инструкций, сходным с Lua.
  • Для уменьшения задержек mark&sweep сборщик мусора будет плавным [incremental — здесь и далее прим. перев.], и, вероятно, с учетом поколений [generational].

Кроме того, профессор Tanaka из Технологического института Kyushi разрабатывает «Ruby-чип»: MIPS-подобный процессор на основе FPGA, в который добавлены несколько инструкций, облегчающие поиск метода и сборку мусора.


Rite — это кодовое имя проекта на время его разработки, которая проводится в рамках «Регионального проекта по исследованиям и разработке» [Regional Innovation Research and Development Project] 2010 года, проводимом министерством экономики [Японии].

В результате получится реализация подмножества Ruby, которую можно будет применять, как:
  • Скриптовый движок для игр,
  • Программное обеспечение для системы «Умный дом»,
  • Интерпретатор в прошивке цифрового телевизора,
  • Для управления роботами и в других встраиваемых системах, где не требуется реакция в реальном времени.

Конечно, я не думаю, что все это появится прямо сейчас, но через несколько лет в случае успеха нашего бизнеса это вполне возможно.

Да, чуть не забыл.

Часто задаваемые вопросы


Когда Rite будет готова?
Я не знаю. Как я уже упоминал, это двухлетний (2010-2011) проект, финансируемыемый правительством Японии.

Будет ли исходные коды RiteVM открыты?
Да. Скорее всего, под лицензией MIT. Однако, по контракту с правительством нам необходима бизнес-модель. Вероятно, мы выберем GPL плюс подписку (так, как распространяется MySQL).

Заменит ли RiteVM CRuby?
Вовсе нет. Rite имеет лишь небольшую часть часть возможностей полной реализации, такой, как CRuby.

Как будет выглядеть C API?
API RiteVM будет значительно отличаться от CRuby. Интерфейс CRuby очень легко использовать, но он сложнее для реализации [во встраиваемом окружении]. Теоретически разработка слоя совместимости возможна, но мы не планируем этим заниматься.

Будет ли RiteVM поддерживать несколько языков [Multilingualization]?
Нет, можно будет лишь выбрать ACSII или UTF-8 при компиляции. Стандартных библиотек для преобразования кодировок тоже не будет.

Будут ли поддерживаться потоки операционной системы [native threads]?
Нет, RiteVM сама по себе не будет поддерживать потоки. Если вы хотите использовать потоки ОС, вы можете запустить в каждом по интерпретатору. В виртуальной машине могут быть реализованы нити [fibers], но пока мы это не планировали.

Будет ли RiteVM быстрее YARV / JRuby / Rubinius?
Вряд ли. Улучшения в основном коснутся операций с плавающей точкой, как как они будут реализованы через непосредственные значения [immediates].

Как я могу содействовать разработке RiteVM?
Пожалуйста, подождите, пока исходный код не будет открыт. Мы опубликуем его на github.

Rite? Звучит знакомо.
В 2003 году Rite предлагалось как кодовое имя для реализации Ruby 2.0 в моем докладе на RubyConf. В конце концов была использована виртуальная машина YARV, и я просто использую старое название. Оно образовано от «Ruby» и «lite».

CRuby — это Matz. Вы собираетесь прекратить работу над CRuby?
С одной стороны, я уже не вношу значительного вклада в разработку CRuby, но не собираюсь ее прекращать. CRuby останется главной реализацией Ruby, а я продолжу работать как архитектор языка и лидер сообщества.

Перевод второй части доклада тоже опубликован на Хабре.
Tags:
Hubs:
Total votes 22: ↑20 and ↓2+18
Comments17

Articles