为什么红宝石在窗户上这么慢?

srb*_*ert 39 ruby windows

在Windows上,Ruby的特定技术原因是什么?人们报告Linux/OSX的速度下降了3倍,并且有一些模糊的讨论关于Ruby使用Windows版本的编译器产生慢代码,但我找不到任何具体的细节.

谁知道具体细节?我对hurf durf不感兴趣,Windoze糟透了yuk yuks.

Pie*_*BdR 23

我猜有几个可能的选择,他们可能都加起来:

  1. Ruby主要是在Linux上开发的,它最终会为它进行机械优化.代码定期针对Windows进行测试,一切正常,但结果仍然是开发人员将花费更多时间来优化Linux而不是Windows.
  2. 根据我的经验,最新版本的gcc(4.3及更高版本)产生的代码比最新版本的Visual Studio(至少2005年)更有效.我的测试包括在两种情况下花费大约一天时间来寻找代码优化的最佳选择.
  3. 与第1点相关,如果您使用gcc为Windows或Linux编译同一个项目,我通常会观察到Windows上与Linux相比,性能下降约20%.在这里,我想这是因为Linux(或一般的Unices)是gcc的主要目标,windows是一个端口.优化Windows的时间比Linux少.

最后,如果有人想要优化Ruby for Windows,那么大量的时间(以及据我所知,资金在Windows上的分析器不是免费提供的)将不得不花费在使用分析器和优化瓶颈上.所有内容都必须在Linux上进行测试,以确保不会损失性能.

当然,应该再次使用他们的新翻译YARV进行测试 .

  • AMD CodeAnalyst和英特尔的Vtune都是免费提供的:-) (4认同)
  • VS8/9制造的MRI比MinGW制造的MRI慢.最后我查了一下,官方的Windows二进制文件是用VS6构建的,甚至更慢; 不久之前.我切换到JRuby for Windows并没有回头看. (4认同)

ane*_*son 15

我没有对YARV解释器的源代码做过多少工作,因此以下注释仅适用于1.8.6 MIR解释器.

在尝试在Visual Studio中为Ruby编写C扩展的过程中,我惊恐地发现Ruby 1.8.6的可下载Windows二进制文件是使用Visual C++ 6.0编译的,它是在第二次世界大战结束后不久发布的. .从那时起,编译器(以及他们所针对的处理器)已大大提高.虽然Linux版本获得了最新的gcc优点,但Windows版本与上个世纪的编译器技术一起出现了问题.这是一个原因.(免责声明:据说1.9是用mingw构建的,其中我不是粉丝,但也必须比VC6更好)

如果不知道你在Windows上发现什么操作特别慢,那么很难进一步评论,但我会注意到我发现Ruby上的I/O实现对网络和本地文件I/O的性能要差得多.我从未深入研究I/O原语的实现,足以看出原因,但我认为实现假设Linux上的快速IO结构是Windows上的快速IO结构,几乎总是不是这样.