<p>在文本处理应用程序中,计算行数是否是整体性能的一个很好的代理,这是有争议的。您正在测试python的C库的效率,就像其他任何东西一样,一旦您真正开始使用数据做有用的事情,您将得到不同的结果。D比Python花更少的时间来完善标准库,而且涉及的人员也更少。beyline的性能已经讨论了几年了,我认为下一个版本会更快。在</p>
<p>人们似乎确实发现D对于这种类型的文本处理是高效和高效的。例如,AdRoll是众所周知的python商店,但他们的数据科学人员使用D:</p>
<p><a href="http://tech.adroll.com/blog/data/2014/11/17/d-is-for-data-science.html" rel="nofollow">http://tech.adroll.com/blog/data/2014/11/17/d-is-for-data-science.html</a></p>
<p>回到问题上来,我们显然是在比较编译器和库,就像比较语言一样。DMD的作用是作为参考编译器,并且编译速度非常快。因此,它对于快速开发和迭代非常有用,但是如果您需要速度,那么应该使用LDC或GDC,如果您确实使用DMD,那么就打开优化并关闭边界检查。在</p>
<p>在我的arch linux 64位HP Probook 4530s机器上,使用WestburyLab usenet语料库的最后1毫米行,我得到以下信息:</p>
<p>python2:实数0m0.333s,用户0m0.253s,sys 0m0.013s</p>
<p>pypy(预热):实数0m0.286s,用户0m0.250s,sys 0m0.033s</p>
<p>DMD(默认值):
实数0m0.468s,用户0m0.460s,sys 0m0.007s</p>
<p>DMD(-O-释放-内联-noboundscheck):
实0m0.398s,用户0m0.393s,sys 0m0.003s</p>
<p>GDC(默认):real 0m0.400s,user 0m0.380s,sys 0m0.017s
[我不知道用于GDC优化的开关]</p>
<p>LDC(默认):real 0m0.396s,用户0m0.380s,sys 0m0.013s</p>
<p>LDC(-O5):实数0m0.336s,用户0m0.317s,sys 0m0.017s</p>
<p>在一个实际的应用程序中,我们将使用内置的探查器来识别热点并调整代码,但我同意naived应该是一个不错的速度,最糟糕的情况下应该与python处于相同的水平。使用LDC进行优化,这正是我们所看到的。在</p>
<p>为了完整起见,我将您的D代码改为以下代码。(有些进口货是不需要的-我只是在玩玩)。在</p>
<pre><code>import std.stdio;
import std.string;
import std.datetime;
import std.range, std.algorithm;
import std.array;
int main(string[] args)
{
if (args.length < 2) {
return 1;
}
auto t=Clock.currTime();
auto infile = File(args[1]);
uint linect = 0;
foreach (line; infile.byLine)
linect += 1;
auto t2=Clock.currTime-t;
writefln("There are: %s lines and took %s", linect, t2);
return 1;
}
</code></pre>