我是一名(老)工程师,不是程序员,所以请原谅我问一个naïve问题。
我的理解是,要获得真正快速的执行时间的程序,它需要被编译为本机机器码。而且有相对较少的语言仍在使用中(例如C和c++)。
但是我更喜欢Python的语法,而不是c派生的编译语言。然而,我的理解是,解释Python(以及在虚拟机上运行的伪编译Python)的执行速度无法与真正编译语言的执行速度相匹配。
是否有一些原因,一个真正的本地代码Python编译器不能开发?
[我对Python特别感兴趣,但我不知道有什么语言可以解释并编译为本机机器码。]
关键的区别是编译时和运行时的清晰区分。例如,在Python中,import
在运行时发生,并且可以有条件地发生。根据暂停问题,这意味着编译器不能预先确定给定的import
是否会发生。但是,这会影响需要生成的代码。
#include
发生在main
之前,但这并不意味着解释器必须这样做。
在语法之外,由于弱类型,Python实际上也是不可编译的。在C语言中,+
的含义非常有限——整数、浮点数或指针,编译器会知道参数的静态类型。c++有更广泛的重载,但基本原理是一样的。virtual
函数允许一些运行时的灵活性,但是从一个有限的选项集合,所有在main
启动之前编译。
同样不是语法的是内存模型——C和c++都有一个内存模型,它是Java内存模型的改进衍生物,这使得线程非常高效。(与Java不同,不是每个对象都可以同步,您需要特殊的成员)。随着CPU获得越来越多的核心,其优势只会继续增长。编译器可以很好地看到内存和CPU寄存器需要同步的地方。