【问题标题】:Will interpreted languages like Python be as fast as compiled languages like C++ if I keep the machine code如果我保留机器代码,像 Python 这样的解释语言会和像 C++ 这样的编译语言一样快吗
【发布时间】:2021-08-28 07:48:58
【问题描述】:

我对 Python 等解释型语言的理解是,它将源代码转换(或编译,取决于术语的确切定义)为低级且独立于平台的字节码。当字节码需要在特定机器上执行时,它会再次由 Python VM 转换为目标机器特定机器码,以便目标机器的 CPU 可以成功理解我的 Python 代码(已经是字节码格式)。

在这个过程中,源代码和字节码是平台无关的,最终的机器码是平台相关的。

我的问题是,如果我保存 Python VM 生成的结果机器代码并在同一台机器上重新使用它会怎样?这是否意味着我已经像 C/C++ 一样编译了 Python 源代码?我的理解是,在机器代码层面上,“高级编程语言”的概念消失了,生成这种机器代码的源代码变得无关紧要——机器代码只是机器代码,CPU不关心也不知道是哪种语言这样的机器码来自。这是否意味着,不知何故,PythonVM 生成的机器代码可以和 C/C++ 生成的机器代码一样快?

(我知道这样的机器代码无论如何都不会是跨平台的——但这不是这个问题的关注点。因为我总是可以编译针对不同平台的源代码,就像 C/C++ 一样。)

【问题讨论】:

    标签: python compilation machine-code


    【解决方案1】:

    没有。 Python 字节码与机器码不同。显然,您可以构建一个使用 Python 字节码作为机器码的硬件。

    但是,Python 开发人员并没有创建真正的硬件机器,而是创建了一种 Python 虚拟机,将 Python 代码作为其机器代码运行(我说的有点,因为它主要是解释而不是像 JVM 语言那样编译,而虚拟机是不是真正的VM,而是解释器,您应该更多地研究VM和解释器之间的区别:-))。您可以将 VM 想象成一个“模拟真实硬件”以运行代码的程序。

    这样,您无需关心底层硬件,但您必须将 Python 解释器环境与您的代码一起提供以形成可执行文件。

    我认为直接转换为机器码的误解是罪魁祸首。在某种程度上,是的,Python 被翻译成机器代码,但是间接地通过在机器上执行 Python 环境然后在执行代码的过程中的 Python 环境碰巧将你的 Python 代码转换为机器代码以便运行它。

    【讨论】:

    • 我会说你从根本上误解了我的问题。我要保留的是 Python VM 生成的结果机器代码。 Python VM 从字节码生成机器码。在我的问题中,我不止一次明确区分了字节码和机器码。
    • 您无法提取“生成的”解释机器码,因为这是执行 Python 字节码的副作用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多