首页 > 技术 > 正文

解释型语言和编译型语言

标签:php

最近在和朋友讨论编译型语言和解释型语言的一些细节, 整理了一下:

1 传统意义上的所谓编译和解释, 区别在于代码是什么时候被翻译成目标CPU的指令, 这是一直以来大家更认可的更约定俗称的定义

2 对 C 语言或者其他编译型语言来说,编译生成了目标文件,而这个目标文件是针对特定的 CPU 体系的, 为 ARM 生成的目标文件,不能被用于 MIPS 的 CPU。这段代码在编译过程中就已经被翻译成了目标 CPU 指令,所以,如果这个程序需要在另外一种 CPU 上面运行,这个代码就必须重新编译。

3 对于各种非编译型语言(例如python/java)来说,同样也可能存在某种编译过程,但他们编译生成的通常是一种『平台无关』的中间代码, 这种代码一般不是针对特定的 CPU 平台,他们是在运行过程中才被翻译成目标 CPU 指令的,因而,在 ARM CPU 上能执行,换到 MIPS 也能执行,换到 X86 也能执行,不需要重新对源代码进行编译。

4 至于为什么会有虚拟机的存在?这个答案也很简单了,因为那些非编译型语言生成的并不是目标平台的代码,而是某种中间代码。而能够运行这种中间代码的机器并不广泛存在,所以我们在每个不同的平台中用软件模拟出这个假想平台的虚拟机, 这个虚拟机执行这种中间代码,而虚拟机负责把代码转换成最终的目标平台上的指令。


原创文章,转载请注明出处!
本文链接:https://wanghongjun2014.github.io/posts/compile-explain-diff.1.html
上篇: php进程间通信
下篇: git同时推送到多个版本仓库

请修改_includes/comment.html添加评论代码。