Chr*_*ris 7 c python compilation
我知道这可能是一个非常明显的答案,而且我将自己暴露给不那么有用的讽刺评论,但我不知道答案所以这里就是这样.
如果Python在运行时编译为字节码,那么只需要花费更长时间的初始编译步骤吗?如果是这样的话,那么代码中的前期成本就不会那么小(即如果代码运行的时间很长,那么C和python之间的差异是否会减少?)
DSM*_*DSM 16
这不仅仅是因为Python代码被解释而使其变慢,尽管这肯定会限制你获得的速度.
如果以字节码为中心的观点是正确的,那么为了使Python代码与C一样快,你所要做的就是用直接调用函数替换解释器循环,消除任何字节码,并编译生成的代码.但它并不像那样.你也不必接受我的话:你可以自己测试一下.Cython将Python代码转换为C,但转换然后编译的典型Python函数不显示C级速度.您所要做的就是查看一些典型的C代码,以便了解原因.
真正的挑战是多次派遣(或任何正确的行话 - 我不能保持一切直线),我的意思是这样的事实,即a+b如果a和b已知是整数或浮点数可以编译为一个操作C,在Python中你必须做更多的事情来计算a+b(获取名称绑定的对象,通过__add__等)
这就是为什么要使Cython达到C速度,你必须在关键路径中指定类型; 这就是Shedskin如何使用(笛卡尔积)类型推断快速生成Python代码以从中获取C++; 以及PyPy如何快速--JIT可以关注代码的行为方式,并专注于类型之类的东西.无论是在编译时还是在运行时,每种方法都消除了动态,因此它可以生成知道它正在做什么的代码.
字节代码对CPU来说并不自然,因此它们需要解释(通过称为解释器的CPU本机代码).字节代码的优点是它可以实现优化,预计算和节省空间.C编译器生成机器代码,机器代码不需要解释,它是CPU原生的.