Рубин или МРТ 1.9.3 (ЯРВ)?
Итак, у меня есть несколько вопросов, которые я должен задать, я просматривал Интернет, но не было слишком много надежных ответов. В основном посты в блогах, которые будут взаимно отменять друг друга, потому что они оба хвалили разные вещи и имели ориентиры, чтобы "доказать свою точку зрения" ( Я никогда не видел столько противоречивых ориентиров в моей жизни ).
Во всяком случае, мои вопросы:
- Рубиниус действительно быстрее? Я был очень впечатлен этим, по-видимому, честным выступлением про Рубиния. Еще одна вещь, которая меня немного смущает, это то, что много Rubinius написано на самом Ruby, но как-то он быстрее, чем C-Ruby? Это должно быть чертовски хорошая реализация языка!
- EventMachine работает с Ruinius? Насколько я знаю, EventMachine частично опирается на Fibers (поправьте меня, если я ошибаюсь), которые не были реализованы до 1.9. Я знаю, что Рубиниус в конечном итоге тоже поддержит 1.9; Я не против немного подождать.
- Работают ли расширения C в Rubinius? Я написал расширение C, которое "сериализует" двоичные сообщения, полученные из потока TCP, в объекты Ruby и наоборот (я полагаю, детали не важны, но если это поможет ответить на этот вопрос, я обновлю пост). Это может быть много сообщений! Мне удалось написать тот же код на Ruby (хотя через месяц это не имело особого смысла), но оказалось, что это было настоящим узким местом в приложении. Итак, мне пришлось использовать C в качестве "решения" моей проблемы. РЕДАКТИРОВАТЬ: Я только что вспомнил, я использую C для другой задачи, это метод проверки попадания для массивов. По сути, он просто проверяет, находится ли "точка" внутри многоугольника, он был невероятно медленным в CRuby.
- Если предыдущий ответ был "Нет", то есть ли альтернатива для расширений C в Rubinus? Я понимаю, что VM написана на C++, так что тогда.
Несколько "бонусных" вопросов:
- Сможет ли C-Ruby (2.0+, YARV) когда-нибудь избавиться от GIL? Или хотя бы изменить его так, чтобы CRuby поддерживал истинный параллелизм?
- Что именно Mruby? Я вижу, что Matz работает над этим, и с точки зрения описания это выглядит довольно круто. Насколько он отличается от CRuby (с точки зрения производительности)?
Я прошу прощения за эту текстовую бурю, которую я развязал для вас! ♥
2 ответа
Рубиниус действительно быстрее?
В большинстве тестов да.
Но контрольные показатели... глупы. Приложения - это то, что нас действительно волнует. Поэтому лучше всего сравнить свои приложения и посмотреть, насколько хорошо они работают. Двумя областями, где Рубиниус действительно будет сиять над МРТ, являются параллелизм и использование памяти. Рубиниус не имеет GIL, поэтому вы можете использовать все доступные темы. Он также имеет гораздо более сложный GC, поэтому в целом он может работать лучше по отношению к GC.
Я сделал эти тесты еще в октябре '11 для моего выступления на MagLev на RubyConf
EventMachine работает с Рубиниусом?
Да, и если есть части, которые не работают, о проблеме следует сообщить. С учетом сказанного, в настоящее время тесты EM не проходят никакой реализации Ruby.
Работают ли расширения C в Rubinius?
Да. Я поддерживаю проблему совместимости для C-exts, поэтому, если у вас есть такая, которая тестируется на Travis, Rubinius хотел бы, чтобы она прошла против rbx. Рубиниус исторически хорошо поддерживал C-api и C-exts, хотя было бы неплохо, если бы когда-нибудь Рубиниус мог запускать Ruby так быстро, что бы не требовались C-exts или C-api.
Сможет ли C-Ruby (2.0+, YARV) когда-нибудь избавиться от GIL? Или хотя бы изменить его так, чтобы CRuby поддерживал истинный параллелизм?
Нет, скорее всего нет. Джесси Стоример (Jess Storimer) кратко излагает мнение Матца (или его отсутствие) о потоках из RubyConf 2012. Коичи Сасада однажды пытался удалить GIL, а результаты МРТ только что завершились. Эван Феникс тоже пытался однажды, до того, как создал Рубиниуса, но не добился хороших результатов.
Что именно Mruby?
Встраиваемый интерпретатор Ruby, похожий на Lua. У Мэтта Аймонетти есть несколько статей, которые могут пролить свет на вас.
Я не слишком увлекаюсь Ruby, но могу ответить на первый вопрос.
Рубиниус действительно быстрее?
Я видел разные тесты, рассказывающие разные вещи. Однако тот факт, что Rubinius частично написан на Ruby, не означает, что он медленнее. Я думал то же самое о PyPy, который является Python в Python. После некоторых исследований и правильных занятий в колледже я понял почему.
- Насколько я знаю, оба написаны на подмножестве их языка, что должно быть намного проще. Интерпретатор (например, C) может быть оптимизирован гораздо проще для такого подмножества, чем весь язык.
- Написание интерпретатора Ruby/Python на его собственном языке обеспечивает большую гибкость и ускоряет создание прототипов новых алгоритмов интерпретации. Суть существования Ruby и Python заключается в том, что алгоритмы могут быть реализованы намного быстрее, чем, например, в C или даже на ассемблере. Более быстрый алгоритм перевешивает небольшие накладные расходы интерпретатора большую часть времени.
Btw. Написание переводчика для языка на том же языке также является обычной академической практикой, чтобы показать, насколько мощный язык. В одном классе мы написали Lisp на Lisp на Lisp.