编译型语言与解释型语言的区别与特点:对可移植性的理解
首先先比较一下解释型语言和编译型语言:
特点 | 应用 | 举例 | ||
解释型语言 | 使用专门的解释器对源程序逐行解释成特定平台的机器码并立即执行。是代码在执行时才被解释器一行行动态翻译和执行,而不是在执行之前就完成翻译。 |
每次运行都需要将源代码解释称机器码并执行,效率较低。 只要平台提供相应的解释器,就可以运行源代码,所以可以方便源程序移植。 |
网页脚本、服务器脚本及辅助开发接口这样的对速度要求不高、对不同系统平台间的兼容性有一定要求的程序 | Java、JavaScript、VBScript、Perl、Python、Ruby、MATLAB |
编译型语言 | 使用专门的编译器,针对特定的平台,将高级语言源代码一次性的编译成可被该平台硬件执行的机器码,并包装成该平台所能识别的可执行性程序的格式。 |
只需编译一次,以后运行时不需要编译,执行效率高。 一般无法移植到其他平台。 |
开发操作系统、大型应用程序、数据库系统 | C、C++、Objective |
总体来说二者的最大区别在于编译与执行之间的连续性。
解释型语言编译和执行是连续的,而编译型语言的执行则不一定与编译相连。
由此引申出了两种语言在运行效率和可移植性上的差距。
关于可移植性:
一个程序在某一台电脑上编译所得到的机器码,不一定可以在另一台电脑上运行。
这是因为由于两台电脑可能有不同的操作系统或者不同的CPU型号,可能使用着不同的机器指令。
这也是软件总是有许多针对不同系统的版本的原因。
一些编程语言可以规避这种状况,如Java。
Java会被编译成中间形式(.javac)字节码,当程序通过解释器(interpreter)运行时,字节码可以再在不同的电脑上被转为不同的机器码。
参考: