首页 > 解决方案 > 为什么没有解释和(真正)编译的语言?

问题描述

我是一个(老)工程师而不是程序员,所以请原谅我问了一个幼稚的问题。

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

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

是否有某些原因无法开发出真正的本机代码 Python 编译器?

[我对 Python 特别感兴趣,但我不知道任何可以解释并编译为本地机器代码的语言。]

标签: pythoninterpreted-languagecompiled-language

解决方案


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

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

在语法之外,由于弱类型化,Python 实际上也无法编译。在 C 中,+具有非常有限的一组含义 - 整数、浮点或指针,编译器将知道参数的静态类型。C++ 有更广泛的重载,但同样的基本原则也适用。virtual函数允许一些运行时灵活性,但来自有限的一组选项,所有这些都是在main启动之前编译的。

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


推荐阅读