为什么JITted Python实现仍然很慢?
2022-09-03 13:14:56
我理解为什么解释开销是昂贵的,但是为什么JITted Python实现(Psyco和PyPy)仍然比其他JITted语言(如C#和Java)慢得多?
编辑:我也明白一切都是一个对象,动态打字是昂贵的,等等。但是,对于可以推断类型的函数,我不确定为什么这很重要。
我理解为什么解释开销是昂贵的,但是为什么JITted Python实现(Psyco和PyPy)仍然比其他JITted语言(如C#和Java)慢得多?
编辑:我也明白一切都是一个对象,动态打字是昂贵的,等等。但是,对于可以推断类型的函数,我不确定为什么这很重要。
最简单的答案是,PyPy还不如热点那么快,Psyco永远不会。
编写合理的JIT是一个漫长而乏味的过程,例如,热点需要很多年才能达到它的位置(也有很多资金)。语言越复杂和动态,花费的时间就越长。从好的方面来说,我们有很好的例子,说明动态语言的JIT可以非常快,以LuaJIT为例,它可以在许多例子中击败C或JVM。
然而,有一些好消息:根据速度中心的说法,PyPy在过去100次修订中平均提高了27%,所以它最终会发生。
人们已经指出了技术细节,所以我要补充另一个因素:钱。
在过去的几年里,Javascript VM(Google的V8,Mozilla的Tracemonkey和Jaegermonkey,Apple的Nitro)为另一种动态语言提供了巨大的速度提升。这在很大程度上是由谷歌希望使网络应用程序更强大的愿望所驱动的。Python只是没有一个大公司通过使其速度提高50倍来获得收益。
哦,与像numpy这样的C扩展的集成意味着速度对于Python代码来说并不重要。