提示:如果本文对您有帮助,欢迎点赞支持!
目录
前言
C++是一门编译性语言,Python是一门解释性语言,那么什么是编译性语言呢?什么是解释性语言呢?两者的区别是什么?
众所周知,目前的电子计算机只能执行二进制表示的二进制指令。程序员用各种编程语言编写的源代码本质是一种字符文本,其需要转换为二进制文本,根据转换的方式,就出现了编译性语言和解释性语言。
一、什么是编译性语言
编译性语言将转换过程分为两个阶段:编译和执行。所有的源代码先统一编译成二进制指令,然后再执行。在这种过程中,编译和执行是分离的,源代码生成一次可执行文件后,执行就不再需要源代码,其可以在目标平台上直接执行。所以编译性语言可以脱离编译器和源代码,一次编译,多次运行。
但是编译性语言的缺点也很明显,源代码需要经过专门编译器编译成指定目标平台的可执行代码,其可移植性差,跨平台能力差,这种跨平台能力差表现在2个方面:
(1)可执行程序不能跨平台执行
编译性语言的可执行程序在不同的操作系统甚至相同操作系统的不同版本之间不一定兼容。这主要是由于不同操作系统对可执行文件的内部结构有不同的要求,必须针对特定的目标平台编译出特定要求的可执行程序。
例如C++的可执行程序在windows上是.exe文件,在Linux系统上是没有后缀的二进制文件,
彼此之间也不能兼容。
(2)源代码不能跨平台编译
不同的硬件平台或操作系统其提供的函数库一般是不同的,所以同一份代码调用的API可能只是针对特定平台,所以在不同的平台上需要使用不同的API库,甚至使用不同的编译器才能编译。
二、什么是解释性语言
解释性语言认为编译和执行是密不可分的。其一般不会将源代码编译后执行,而是在执行的时候才翻译,即边翻译边执行,需要执行哪些代码才翻译,不需要哪些代码就不会翻译。
这种转换方式的缺点就是执行效率大大不如编译性语言,而且其执行时不能脱离解释器和源代码。但是这种转换方式的优点是跨平台能力好,其可以根据执行的目标平台动态选择代码进行编译,所以解释性语言一般具有“一次编写,到处运行”的跨平台能力。
三、半编译半解释性语言
编译性语言和解释性语言的优点和缺点几乎是互补的,所以由编程语言想要结合两者的优点,最典型的就是Java语言。部分文献认为Java语言是解释性语言,但是它们也承认Java语言必须先将所有源代码编译为字节码的中间文件,然后依赖Java虚拟机才可以执行。这样Java就具有编译性语言和解释性语言的特点。
Java语言的执行效率不如C/C++,但是远高于其他解释性语言,跨平台能力不如著名的Python,但是远高于C/C++等编译性语言,可以算得上一种较高的折中方案。
总结
本文简单介绍了编译性语言、解释性语言和半编译半解释语言,提到了各自的优缺点。需要说明的是,这些优缺点并不是不可以改变的,一门语言的优点或缺点并不完全取决于其先天的设计,也取决于后天的生态建设,例如C#也是半编译半解释语言,但是其跨平台能力和Java不可同日耳语。Python作为跨平台能力强的语言,不仅因为它是解释性语言,而且它的学习成本低,开源生态好,很多程序员贡献了十分丰富的代码库。
简单总结下本文的知识点:
代表语言 | 转换工具 | 原理 | 优点 | 缺点 | |
编译性语言 | C、C++、Go | 编译器 | 先编译后执行,执行时可脱离源码和编译器 | 一次编译,多次运行。执行效率高。 | 跨平台性差 |
解释性语言 | Python、JavaScript、PHP | 解释器 | 边翻译后执行,执行时不可脱离源码和解释器 | 跨平台性高,一次编译,到处运行。 | 无法脱离开发环境。 执行效率低。 |
半编译半解释语言 | Java | 虚拟机 | 先编译后执行,执行时可脱离源码,不可脱离Java虚拟机 | 兼顾跨平台性和执行效率 | 执行效率不如C/C++等 跨平台不如Python等 |