Я предлагаю вам прочитать перевод третьей части доклада автора Руби, 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 часто отсутствуют за ненадобностью.
Так как производительность встраиваемых систем в последнее время значительно возросла, то зачастую выполнением в реальном времени можно пренебречь в пользу использования языка более высокого уровня.
Итак, мы разрабатываем новый интерпретатор.
Кроме того, профессор 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, а я продолжу работать как архитектор языка и лидер сообщества.
Перевод второй части доклада тоже опубликован на Хабре.
Перевод дополнен материалом презентации.
В первый же день 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, а я продолжу работать как архитектор языка и лидер сообщества.
Перевод второй части доклада тоже опубликован на Хабре.