我只是好奇,但我想知道python是否可以在汇编中实现,如果没有,为什么没有帮助解决速度问题。原谅我在编程语言方面的天真。
答案 0 :(得分:15)
主要实现是用C语言编写的,并且编译为机器代码(即汇编使CPU可读)。所以编写它的程序集当然是可能的,如果它可以用于编译器,那么在理论上它对人类是可能的。实际上,它甚至都不实用。不仅asm比C更低级(显着增加开发时间,甚至可能与项目大小成比例),它也是高度特定于平台的,因此每个端口都需要大量工作(并且维护数量乘以数字)支持的平台 - 在CPython的情况下相当多。)
除此之外,如果这会带来显着的速度加成,这是非常值得怀疑的。把它写得更接近金属并不会让事情变得更加神奇(相反的情况可能就是这样 - 你很难找到一个能比一四个或五个众所周知的C编译器更好地编写更好的程序集的程序员) 。 Python的很多缓慢来自于语言所包含的许多抽象和间接,而不是来自这些的粗略实现。
一个更有前途的方法(确实遵循几个替代实现)是一个聪明的Just In Time-Compiler(JIT),它保留了所有动态性,但利用了大多数Python程序通过识别而很少使用该动态性的事实运行时最常见的路径并针对这些路径进行优化。这些复杂的程序也不是用asm编写的。
答案 1 :(得分:5)
本机代码不是一种神奇的make-it-go-faster操作。语言语义确实决定了语言的速度(或不快)。 (例如,通过Hipe编译为本机代码的erlang仍然相当慢。)