Aelous-Blog

养一猫一狗,猫叫夜宵,狗叫宵夜

0%

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

从我大一接触 C 至今有 7 年了,一个电子专业的学生,其实需要学的蛮杂的。编程语言,数电模电,建模仿真,钣金设计。一半出坑的我现在还在刷算法,编程语言到现在也学了挺多了(相对),从 C 语言,C51,Matlab,到 LabVIEW,Python,再到 HTML-CSS-JS 三件套,再到 JAVA 和 C++,其实我自己也常常笑话自己学艺不精~但是都够我用了嘿嘿,毕竟大佬们刷题都是多种语言搞起的。

我个人非常喜欢各种编程语言,觉得在学习的过程中摸索到它们之间的规律非常兴奋。

好了闲话不多说,本文主要介绍,编译型语言和解释型语言的区别。

其实主要区别就两点:

  • 翻译时间
  • 运行速度
  • 开发平台

首先,我们要知道,计算机是机器,无法主动的去理解我们编写的代码,我们编写的代码属于高级语言,因为代码有着自己的含义~计算机看不懂更不可能去执行了,但是计算机可以阅读它们自己的语言:某些特定的二进制指令,所以程序在真正运行之前需要将源代码转换成二进制的指令。学电子的同学应该都学过汇编语言,这就属于低级语言,它和机器语言一样,二者有着一一对应的关系。

所以我们知道,计算机要执行程序,需要将源代码翻译为二进制语言,在什么时候进行翻译,不同的语言有了规定。

翻译时间

既然不同的语言,在将源代码翻译为二进制语言的不同,就产生了区别:

  • 编译型语言:C 语言、C++、Object-C、汇编、LabVIEW 都是编译型语言,这些语言需要提前将所有的源代码,一次性的转换为二进制指令,就是生成一个可执行文件(例如 windows 下的.exe)在不同的平台会生成不同的可执行文件。这种语言被称为编译型语言,使用的转换工具称为编译器
  • 解释型语言:JS、Python、PHP、Ruby、Perl 这些语言是解释型语言,这些语言通常不用对源代码进行编译,而是通过各自的解释器载入脚本后运行。执行的时候现场翻译(类似同声传译)这样的语言称为解释型语言
  • 特例:关于 JAVA 和 C#,这两个语言,属于半编译半解释的语言,源代码需要先转成一种中间件(字节码文件)然后将中间件拿到虚拟机中执行。就是说,既可以将源码当作脚本(解释)来执行,也可以进行编译成.class 文件载入运行。目的是为了在可以跨平台的同时兼顾执行效率。JAVA 做的挺好的,跨平台了。C#跨了个寂寞。但我仍然认为 JAVA 是解释型语言。

运行速度

1.编译型语言是提前将所有的源代码一次性的转换为二进制指令,也就是说这些代码编译一次,无限执行,就比如 win 系统下,LabVIEW 开发结束后,生成一个 exe 文件,是不是就不需要源代码和编译器了,所以说编译型语言可以脱离开发环境运行。

但是编译型语言一般是不能跨平台的,就是说 win 系统开发的不能在 osx 上运行。

2.解释型语言其实也很清楚了,同声传译,能快到哪里去。每次执行程序都需要一边转换一边执行,用到那些源代码就将哪些源码翻译成机器语言,用不到不处理。开发过程中每次用的功能不一样,需要翻译的内容也不一样。

从原理层面来看,解释型语言的执行效率天生低于编译型语言,甚至有数量级的差距。计算机的一些底层功能、关键算法,一般都使用 C/C++实现,只有应用层面(网站开发,SHELL 批处理)才会使用到解释型语言。

解释型语言,我们始终需要源代码和解释器,所以解释型语言无法脱离开发环境。但是解释型语言由于解释器的存在,开发公司只需要在各个平台开发不同的解释器,就可以实现源代码跨平台的骚操作了。可谓一次编写,处处执行

3.所以,下载一个程序,对不同的语言有着不同的含义:

  • 对于编译型语言,下载到的就是可执行文件,源代码由开发者保留,所以!!!编译型语言一般都是闭源的。
  • 对于解释型语言,一般下载到的是所有源码,因为没有源码下载下来没法运行,所以!!!解释型语言一般开源,这也是为啥 Python 的开源社区这么火爆,白 P 的一抓一大把。

开发平台

1.对于编译型语言,在不同开发平台编译的结果,都是在当前平台的可执行程序。不同的操作系统对可执行程序的内部有着不同的要求,再者,不同开发品台的源代码之间也是不能移植的,在 win 平台 C++写个 system,OSX 不认你不完蛋么。所以编译型语言不能跨平台才正常

2.对于解释型语言,解释器将源代码转换为机器码,那就可以执行,所以官方针对不同的平台开发不同的解释器,这些解释器可以在不同的平台对同样的语法、同样的函数进行识别,将他们转换为一样的结果,就可以实现跨平台。是解释器屏蔽了不同平台之间的差异。

总结

编译型语言通过专门的编译器,将所有源码一次性翻译为特定平台的可执行文件,常见:C 语言、C++、Object-C、汇编、LabVIEW

优点:

  1. 编译器一般会有预编译的过程对代码进行优化。
  2. 编译只做一次,运行时不需要编译,程序执行效率高。
  3. 可以脱离语言环境独立运行。

缺点:

  1. 要修改就需要整个模块重新编译。
  2. 不同的操作系统之间移植就会有问题,不够灵活。

解释型语言:由专门的解释器,根据需要将部分源码临时翻译成机器码,常见:JS、Python、PHP、Ruby、Perl

优点:

  1. 有良好的平台兼容性,在任何安装了解释器的环境中都可以运行。
  2. 灵活,修改代码直接改就行。
  3. 可以快速部署,不用停机维护。

缺点:

  • 每次运行的时候都要解释一遍,性能上不如编译型语言。
End~~ 撒花= ̄ω ̄=花撒
如果您读文章后有收获,可以打赏我喝咖啡哦~