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

Roj*_*uck 3 ruby performance native inline ruby-on-rails

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

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

Sim*_*tti 10

Rails利用"本机",也就是已编译的扩展,但它将它们保持为独立的可选库.例如,Rails允许您使用nokogiriXML解析器,而不是标准的基于Ruby的解析器.

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

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