Почему RoR не использует преимущества собственных расширений / методов встраивания кода? - PullRequest
3 голосов
/ 19 февраля 2010

Те, кто вне сообщества ruby ​​(и некоторые внутри), часто называют приложения ruby ​​медленными. Для многих из нас это нерелевантность, операции, связанные с вводом-выводом и т. Д. Однако, когда это становится проблемой, мало что может помешать нам воспользоваться преимуществами собственного кода для ускорения процесса. В связи с этим мне интересно, почему RoR (сам по себе цель многих «медленных» комментариев) не использует какие-либо нативные элементы для ускорения себя?

Есть ли конкретная причина? Не хватает ли жестких циклов для оптимизации в кодовой базе?

Ответы [ 3 ]

10 голосов
/ 19 февраля 2010

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

Существует как минимум 3 причины, по которым Rails, вероятно, не заменит внутренние функции эквивалентами C / C ++.

  • Rails - это фреймворк Ruby. Поскольку это среда Ruby, вы можете ожидать, что участники будут знать о Ruby, но, используя библиотеки C, вы заставляете всю экосистему Ruby быть также программистами на C. И это, вероятно, будет означать меньшее количество участников самой структуры.
  • Если вы когда-либо пытались установить в Windows Gem, который включает расширения C , то вы, вероятно, уже знаете, почему плохая идея использовать код C в Rails.
  • Rails успешно работает на стандартном Ruby и большей части альтернативных дистрибутивов Ruby, таких как JRuby. Использование кода на C в Ruby потребует предоставления Java / Python / ... аналогов одного и того же кода. Фактически, Gems со встроенными расширениями C в настоящее время не совместимы с JRuby.
0 голосов
/ 25 декабря 2010

В некоторых приложениях на Ruby стандартная библиотека Date оказалась узким местом. Джереми Эванс внедрил классы Date / DateTime в C и получил прирост производительности в 20-200 раз.

home_run

0 голосов
/ 20 февраля 2010

он использует их, если вы устанавливаете их как самоцветы (самоцвет mysql, самоцвет memcache, RedCloth и т. Д.)

В целом, для оптимизации кода используется виртуальная машина. Иначе было бы трудно работать на всех платформах, которые делает ruby.

...