Jul*_*ins 1 assembly cpu-usage
对不起,如果这是一个愚蠢的问题或明显,如果是这样我将删除它.我正在搜索,我无法找到一个定义的答案.它有:PHP,Ruby或Java等高级语言都被解码为汇编,由CPU执行?
严格来说,汇编代码是用汇编语言编写的代码,它不是机器代码,而是它的符号表示.在计算机上执行的任何操作都必须通过处理单元(CPU,GPU或其他类型的处理单元),并且必须使用该单元理解的机器代码进行编码.本机程序是用该主机代码编写的程序.
现在,有两类处理源代码的程序:
解释器:他们只是读取源代码并执行用自己的代码构建的例程(用机器代码编写)来模拟源语言的指令;
编译器:它们对源代码应用了一系列转换(你在问题中用"解码"这个词来表示),以便获得更容易执行的东西.
bytecompiler会将代码转换为一个称为字节码的代码,即一种重新使用机器代码的语言,但是人为的,因为它将在稍后解释(因此各个指令将映射到本机例程)
本机编译器将生成机器代码,即机器可以理解的东西(通常是运行编译器的同一台机器).
对于大多数脚本语言,如PHP,Ruby,Python,语言要么被解释,要么是字节编译,并且字节码被解释.
编译阶段可能是:
透明:PHP就是这样,它需要php源文件,bytecompile并直接运行它们 - PHP的一些扩展允许缓存字节码以节省必须再次执行脚本的时间,
或者它可以是显式的:Java要求源文件首先被编译为JVM理解的字节码格式,并且不会尝试解释它们(它不是JVM支持的所有语言的情况:例如scala有一个解释器用于互动会议).
其他语言提供不同的解决方案:例如,ocaml具有字节编译器和用于定位主机代码的本机编译器.还有其他针对其他平台的编译器:javascript,jvm.
Python还通过不同的实现支持多个平台:字节码,本机.
最近,PHP还为hhvm和hack 提供了更多选择.
最后,请注意字节码和真实机器代码之间的区别可能非常薄.例如,有些CPU能够直接执行jvm字节码(作为主机语言或扩展名).还有用于模拟CPU的程序(例如参见qemu),以及能够理解其他架构的CPU:Transmeta系列CPU能够通过将其动态转换为自己的机器代码来执行x86代码.
| 归档时间: |
|
| 查看次数: |
224 次 |
| 最近记录: |