所有语言最终都会在要执行的过程中作为汇编代码?

Jul*_*ins 1 assembly cpu-usage

对不起,如果这是一个愚蠢的问题或明显,如果是这样我将删除它.我正在搜索,我无法找到一个定义的答案.它有:PHP,Ruby或Java等高级语言都被解码为汇编,由CPU执行?

did*_*erc 6

严格来说,汇编代码是用汇编语言编写的代码,它不是机器代码,而是它的符号表示.在计算机上执行的任何操作都必须通过处理单元(CPU,GPU或其他类型的处理单元),并且必须使用该单元理解的机器代码进行编码.本机程序是用该主机代码编写的程序.

现在,有两类处理源代码的程序:

  • 解释器:他们只是读取源代码并执行用自己的代码构建的例程(用机器代码编写)来模拟源语言的指令;

  • 编译器:它们对源代码应用了一系列转换(你在问题中用"解码"这个词来表示),以便获得更容易执行的东西.

    • bytecompiler会将代码转换为一个称为字节码的代码,即一种重新使用机器代码的语言,但是人为的,因为它将在稍后解释(因此各个指令将映射到本机例程)

    • 本机编译器将生成机器代码,即机器可以理解的东西(通常是运行编译器的同一台机器).

对于大多数脚本语言,如PHP,Ruby,Python,语言要么被解释,要么是字节编译,并且字节码被解释.

编译阶段可能是:

  • 透明:PHP就是这样,它需要php源文件,bytecompile并直接运行它们 - PHP的一些扩展允许缓存字节码以节省必须再次执行脚本的时间,

  • 或者它可以是显式的:Java要求源文件首先被编译为JVM理解的字节码格式,并且不会尝试解释它们(它不是JVM支持的所有语言的情况:例如scala有一个解释器用于互动会议).

其他语言提供不同的解决方案:例如,具有字节编译器和用于定位主机代码的本机编译器.还有其他针对其他平台的编译器:javascript,jvm.

Python还通过不同的实现支持多个平台:字节码,本机.

最近,PHP还为和hack 提供了更多选择.

最后,请注意字节码和真实机器代码之间的区别可能非常薄.例如,有些CPU能够直接执行jvm字节码(作为主机语言或扩展名).还有用于模拟CPU的程序(例如参见qemu),以及能够理解其他架构的CPU:Transmeta系列CPU能够通过将其动态转换为自己的机器代码来执行x86代码.