为什么没有既解释又(真正)编译的语言?



我是一名(老)工程师,不是程序员,所以请原谅我问一个naïve问题。

我的理解是,要获得真正快速的执行时间的程序,它需要被编译为本机机器码。而且有相对较少的语言仍在使用中(例如C和c++)。

但是我更喜欢Python的语法,而不是c派生的编译语言。然而,我的理解是,解释Python(以及在虚拟机上运行的伪编译Python)的执行速度无法与真正编译语言的执行速度相匹配。

是否有一些原因,一个真正的本地代码Python编译器不能开发?

[我对Python特别感兴趣,但我不知道有什么语言可以解释并编译为本机机器码。]

关键的区别是编译时和运行时的清晰区分。例如,在Python中,import在运行时发生,并且可以有条件地发生。根据暂停问题,这意味着编译器不能预先确定给定的import是否会发生。但是,这会影响需要生成的代码。

正如Bill the Lizard所指出的,如果语言确实有明显的区别,解释器仍然可以选择忽略它。C#include发生在main之前,但这并不意味着解释器必须这样做。

在语法之外,由于弱类型,Python实际上也是不可编译的。在C语言中,+的含义非常有限——整数、浮点数或指针,编译器会知道参数的静态类型。c++有更广泛的重载,但基本原理是一样的。virtual函数允许一些运行时的灵活性,但是从一个有限的选项集合,所有在main启动之前编译。

同样不是语法的是内存模型——C和c++都有一个内存模型,它是Java内存模型的改进衍生物,这使得线程非常高效。(与Java不同,不是每个对象都可以同步,您需要特殊的成员)。随着CPU获得越来越多的核心,其优势只会继续增长。编译器可以很好地看到内存和CPU寄存器需要同步的地方。

相关内容

  • 没有找到相关文章

最新更新