编译型语言和解释型语言的区别


编译型语言和解释型语言的区别

我们所编写的代码,只是让我们人类能够理解的人类语言,但是对于计算机是无法理解的,计算机只能识别特定的二进制指令,所以我们现在所编写的代码,如C/C++,JAVA,Python等等都需要转换成二进制代码才能执行。


现在我们依据条件将这些编程语言大致分成两类

  • 编译型语言

    源代码一次性转换成二进制指令,即生成对应操作系统能执行的程序。

    比如C语言、C++、Golang、Pascal(Delphi)、汇编等,这种编程语言称为编译型语言。

    使用的转换工具称为编译器。

  • 解释型语言

    源代码可以一边执行一边转换,需要哪些源代码就转换哪些源代码,不会生成可执行程序

    比如 Python、JavaScript、PHP、Shell、MATLAB 等,这种编程语言称为解释型语言

    使用的转换工具称为解释器。

  • 半编译型半解释型语言

    源代码先转化为一种中间文件(字节文件),然后再使用中间文件在虚拟机运行

    比如JAVA,C#等,这些被称为半编译型半解释型语言

    即拥有编译器,也拥有解释器。

编译型语言和解释型语言的执行流程

编译型语言的特点

对于编译型语言一次编译,无限运行,不需要对应的开发环境。

但是编译型语言一般是不能跨平台的,也就是不能在不同的操作系统之间随意切换

主要体现在下面两个方面

  • 程序不能操作系统台运行

    因为不同的操作系统的可执行程序结构截然不同,所以彼此的程序自然不能够兼容。

    除此之外,相同操作系统因版本不同,可能也会存在不兼容的问题

  • 源代码不能跨操作系统

    不同平台支持的函数,类型变量都不一样,一般情况下一套源代码不能拿到另外一个操作系统进行编译。下面举两个例子:

    1. 在C语言中要想让程序暂停可以使用“睡眠”函数,在 Windows 平台下该函数是 Sleep(),在 Linux 平台下该函数是 sleep(),首字母大小写不同。其次,Sleep() 的参数是毫秒,sleep() 的参数是秒,单位也不一样。

    2. 虽然不同平台的C语言都支持 long 类型,但是不同平台的 long 的长度却不同,例如,Windows 64 位平台下的 long 占用 4 个字节,Linux 64 位平台下的 long 占用 8 个字节。在 Linux 64 位平台下编写代码时,将 0x2f1e4ad23 赋值给 long 类型的变量是完全没有问题的,但是这样的赋值在 Windows 平台下就会导致数值溢出,让程序产生错误的运行结果。

    而这些错误都是编译器不会进行报错的,让人很难察觉

解释型语言

对于解释型语言一次编写,到处运行,每次执行程序需要一边转换一边运行,用到哪些功能就将那部分的代码转为机器码(二进制指令)。虽然需要对应的解释环境,但是解决了编译型语言的无法跨平台的问题。但也因为每次运行都需要进行转换,他的运行效率天生低于编译型语言,甚至存在数量级的差距。一般只有在应用层(比如网站开发、批处理、小工具等)才会使用解释型语言。

在这里的跨平台,只是指源代码可以跨操作系统运行,但是还是需要操作系统安装对应的解释器,也正是这些解释器帮助我们屏蔽了系统之间的差异,达到一套代码到处运行的效果。

总结

类型 原理 优点 缺点
编译型语言 通过专门的编译器,将所有源代码一次性转换成特定平台(Windows、Linux 等)执行的机器码(以可执行文件的形式存在)。 编译一次后,脱离了编译器也可以运行,并且运行效率高。 可移植性差,不够灵活。
解释型语言 由专门的解释器,根据需要将部分源代码临时转换成特定平台的机器码。 跨平台性好,通过不同的解释器,将相同的源代码解释成不同平台下的机器码。 一边执行一边转换,效率很低。

引用及参考

编译型语言和解释型语言


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM