前言
什么是解释型语言?什么是编译型语言?python是什么类型的语言?JAVA又是什么类型的语言?哪种语言运行效率高?这些问题对于业内人士来说,根本不能算问题,但是对于新手村的码农来说,可能还是有点晕的,我也收到不少这样的提问。语言解释太苍白,那就让我用图像来详细回答一下吧。
第一、解释型语言
解释型语言又叫脚本语言,一言以蔽之,就是需要解释的语言。这似乎是废话?那我们就看看解释型语言的典型代表python程序是怎么运行的吧。
需要Python零基础学习资料的伙伴,可以在公众号【码农资料库】中回复【py】自行领取 包括以下学习资料:
① Python所有方向的学习路线图,清楚各个方向要学什么东西
②Python课程视频,涵盖必备基础、爬虫和数据分析
③ Python实战案例,学习不再是只会理论
④ Python电子好书,从入门到高阶应有尽有
⑤ 华为出品独家Python漫画教程,手机也能学习 ⑥ 历年互联网企业Python面试真题,复习时非常方便
python源码文件直接就可以运行,也许你会好奇,源码文件是怎么运行起来的?难道CPU也认识我们写的英文关键字吗?当然不是。在运行python程序之前系统会先启动一个python解释程序,可以把这个解释程序理解为翻译官,它会逐条读取我们写的python脚本,然后翻译为CPU可以识别的机器指令。为什么大家都说python的运行效率不行?看完后面两种语言的介绍我们再对比说明。
第二、编译型语言
既然解释型语言是需要解释的语言,那么编译型语言就是不需要解释的语言?NO,不是这个意思。CPU只能识别自己指令集的机器码,所以只有二进制的机器码才是不需要解释的语言。编译型语言也是用英文关键字编写的,所以也要通过软件翻译成机器码,才能运行到CPU上。这里的翻译又叫编译,翻译的软件又叫编译器。编译型语言跟解释型语言的区别在于,它不是在运行的时候才开始逐条翻译的,而是先翻译好了,然后保存到一个文件里面,需要运行的时候,再拿给CPU去执行。我们就看C语言的例子。
C语言程序写完后,源代码文件是无法运行的,必须经过编译成一个个的机器码文件,然后合成一个大文件,合成一个大文件的操作就叫链接,合成后的机器码文件就可以直接给CPU运行了。
第三、JAVA到底是编译型语言还是解释型语言
这个问题,恐怕会引战。因为即使业内的人,有说它是解释型语言的,也有说它是编译型语言的,公说公有理婆说婆有理。怎么会这样呢?我们还是先看看JAVA程序的运行示意图。
看明白了吧?JAVA写的源代码也是不能直接运行的,必须经过编译器编译成二进制的字节码才能运行。而编译生成的字节码又不能像C语言编译出来的机器码那样直接运行到CPU上,必须经过JAVA虚拟机程序解释成机器指令才能被CPU识别。
这就是有争论的地方,说它是编译型语言吧,它最后又是运行时才解释的。说它是解释型语言吧,它的源代码又必须经过编译才能运行。所以对于JAVA,你觉得它应该属于编译型语言还是解释型语言呢?欢迎讨论。
第四、哪种语言运算效率高?
这个问题,我想通过上面的介绍,聪明如你应该已经知道答案了吧。
python要执行用户程序,还得先启动一个解释器程序,然后把用户程序逐条翻译成机器码执行,多启动了一个程序不说,每条语句执行前还要花时间解释。C语言程序呢?因为运行前就已经编译成机器码了,所以不用启动额外的程序来解释,直接就上CPU运行了。所以就运行效率来说,python跟C语言完全不是一个数量级的。JAVA就有点特殊了,既要编译,又要启动额外的程序来解释,这么麻烦,肯定连python的尾灯都看不到吧?NO,JAVA虽然也要解释执行,但是它解释的不是自然语言,而是经过格式化处理过的字节码,解释的效率要比python高很多,所以它比python肯定要快,但跟C语言还是没法比的。
怎么样?看到这里是不是已经茅塞顿开了?如果再有人问你,python和JAVA哪个快?或者问你什么叫脚本语言?你就把这篇文章甩给他看。