testee. language arbitrary-precision integers run-time
1. Java java.math.BigInteger JRE 6.13
2. .NET System.Numerics.BigInteger MS CLR 4.0
3. Python long Active Python 2.6.2.2
4. Squeak BigInt Squeak 3.10.2
5. .NET Mono.Math.BigInteger MS CLR 4.0
results:
1) 2) 3) 4) 5)
10.000! 343 ms 137 ms 91 ms 1.200 ms 169 ms
20.000! 1.480 ms 569 ms 372 ms 1.457 ms 701 ms
30.000! 3.424 ms 1.243 ms 836 ms 3.360 ms 1.675 ms
40.000! 6.340 ms 2.101 ms 1.975 ms 6.738 ms 3.042 ms
50.000! 10.493 ms 3.763 ms 3.658 ms 10.019 ms 5.242 ms
60.000! 15.586 ms 7.683 ms 5.788 ms 14.241 ms 10.000 ms
问Python为什么比Java/C慢是不正确的。Java有多快?好吧,天真的解释器比优化的编译器慢10倍左右。我相信有一个用JavaScript编写的Java bytcode解释器——可能不是很快。因此,预期的问题似乎是“为什么CPython语言系统比Sun、IBM和Oracle JRE以及Microsoft.NET运行时的速度慢?”
我相信正确的答案是非技术性的。最快的Java和.NET运行时更快,因为它们有大型全职技术团队在性能竞争环境中开发。
动态语言系统易于实现。任何白痴都能做到。我有。静态语言系统的设计和实现更为复杂。一个简单的静态系统往往比等效的动态系统运行得快得多。然而,高度优化的动态系统几乎可以同样快地运行。我知道有些Smalltalk实现非常好。开发的动态系统的一个经常引用的例子是MIT Lisp Machine。
另外,如果真正的grunt是由库代码完成的,那么语言系统可能无关紧要。或者,语言可以鼓励(或者给时间(!)开发更有效的算法,可以轻松消除恒定因素的性能差异。
如其他答案中所述,这取决于运行时系统以及手头的任务。因此,标准(C)Python并不一定比Java或C慢。它的一些模块是用C语言实现的,因此将anative实现的速度与Python语言结合起来。
我们做了一个小实验:我们比较了不同语言中阶乘计算的执行时间。该测试实际上是为了评估任意精度整数实现的性能。
alt text http://www.mycsharp.de/wbb2/attachment.php?attachmentid=6909&sid=0d5aa62b522d005d9e7089785b5d19f1
条形图显示结果。Python显然是赢家。据我所知,Python使用Karatsuba-algorithm来乘法大整数,这解释了速度。
此外,Python的“任意精度整数”类型是内置的
long
。因此,您甚至不需要Java的biginger类所需的特殊类型处理。不要把语言和运行时混为一谈。
Python(该语言)有许多运行时实现。
CPython通常是解释的,并且比本机代码C#慢。它可能比Java慢,这取决于Java JIT编译器。
JYthon在JVM中进行解释,并具有与Java相同的性能配置文件。
IronPython依赖于与C#相同的.NET库和IL,因此性能差异相对较小。
Python可以通过PyREX、PyToC和其他方法转换为本机代码。在这种情况下,它通常会执行以及C++。在某种程度上,您可以进一步优化C++,也许比PyRX的未优化输出挤出一点点更好的性能。
有关详细信息,请参见http://arcriley.blogspot.com/2009/03/so-long-pyrex.html
请注意,Python(语言)并不慢。一些Python运行时间(例如,CPython)将比本地代码C++慢。
相关问题 更多 >
编程相关推荐