为什么RoR不利用本机扩展/代码内联技术?

时间:2010-02-19 12:40:02

标签: ruby-on-rails ruby performance inline native

ruby​​社区之外的人(以及一些内部人员)经常将ruby应用程序视为缓慢。对于我们中的许多人来说,这是一个无关紧要的,IO绑定操作等。但是,当它确实成为一个问题时,几乎没有什么可以阻止我们利用本机代码来加快速度。为此,我想知道为什么RoR(本身是许多'慢'评论的目标)没有利用任何原生元素加速自己?

有特殊原因吗? 是否缺乏在代码库中优化的紧密循环?

3 个答案:

答案 0 :(得分:10)

Rails利用“本机”(又称已编译)扩展,但它将它们保持为独立的可选库。 例如,Rails允许您使用nokogiri作为XML解析器,而不是标准的基于Ruby的解析器。

至少有3个原因导致Rails可能不会用C / C ++等价替换内部函数。

  • Rails是一个Ruby框架。因为它是一个Ruby框架,所以你可以期望贡献者了解Ruby,但是通过使用C库,你可以强迫整个Ruby生态系统成为C程序员。这可能意味着框架本身的贡献者数量较少。
  • 如果你曾试过install on Windows a Gem which includes C extensions,那么你可能已经知道为什么在Rails中使用C代码是个坏主意。
  • Rails愉快地运行在标准的Ruby和大部分替代Ruby发行版上,例如JRuby。在Ruby中使用C代码,需要提供相同代码的Java / Python / ...对应物。事实上,目前嵌入了C扩展的Gems与JRuby不兼容。

答案 1 :(得分:0)

它确实使用它们,如果你把它们安装为gems(mysql gem,memcache gem,RedCloth等)。

但是,一般情况下,它依赖VM来优化代码。否则,它很难在ruby所有的平台上工作。

答案 2 :(得分:0)

标准库Date类已被发现是某些Ruby应用程序的瓶颈。 Jeremy Evans在C中实现了Date / DateTime类,并获得了20-200倍的性能提升。

home_run