文章背景
看了一些Python的基础,说Python是解释型语言,于是昨天晚上躺到床上跟aliya语音,便说起了编译型语言跟解释型语言的区别,特地去查找了一些相关资料,结结实实的探讨了好一会,才发现自己作为一个靠程序吃饭的人,真是对不起程序员这个职业,不是计算机出身,对很多的计算机原理、名词几乎都没有理解,没有研究,甚至都不知道它的存在,真是硬伤。
但幸好还有一个想去了解的心情,于是作为一个记录,整理本篇文章,督促自己以后遇到不管大小的问题都要敞开心扉去多一点思考,多一些学习。
简单经历
在详述前,先记录一下自己的经历:之前写过一段时间Java代码,现在主要写前端,在这个过程中有一个场景让我印象深刻,但原理还有待深究:之前写Java代码的时候记得修改一些内容的时候必须要重启Tomcat服务器,才能看到修改代码过后的运行结果,但是有些又不用重启。而在写前端语言的时候,抛去缓存,代码修改后可以马上运行显示,当时根本就没去想这个问题,我能简单的想起编译型语言与解释型语言的区别也就是这个了。
文章正文
那么到底什么是
编译型语言
,什么是解释型语言
呢?他们之间有什么共同点和区别呢?
1️⃣、概念
- 编译型语言代表有:
C
语言,C++
、Object-C
以及最近很火的苹果新语言swift
通常都会对源代码进行编译,生成可以执行的二进制代码,执行的是编译后的结果- 解释型语言代表有:
JavaScrip
t、Python
、Erlang
、PHP
、Perl
、Ruby
通常不用对源代码进行编译,一般是通过解释器载入脚本后运行。由于每个语句都是执行的时候才进行解释翻译,这样解释性语言每次执行就要翻译一次,效率相对要低。Java
具有编译与解释两种特性:既可以将其源代码当作脚本执行,也可以进行编译成.class代码(字节码)载入运行
2️⃣、对比
编译型语言:
- 优点:编译器一般会有预编译的过程对代码进行优化。因为编译只做一次,运行时不需要编译,所以编译型语言的程序执行效率高。可以脱离语言环境独立运行。
- 缺点:编译之后如果需要修改就需要整个模块重新编译。编译的时候根据对应的运行环境生成机器码,不同的操作系统之间移植就会有问题,需要根据运行的操作系统环境编译不同的可执行文件。
解释型语言
- 优点:有良好的平台兼容性,在任何环境中都可以运行,前提是安装了解释器(虚拟机)。灵活,修改代码的时候直接修改就可以,可以快速部署,不用停机维护。
- 缺点:每次运行的时候都要解释一遍,性能上不如编译型语言。
3️⃣、区别(本段落参考文章地址 戳这里)
区别1:从效果上来比
编译型语言要全部写完之后,然后通过某个编译器,去生成一个类似*.exe的二进制文件,然后手工双击这个文件才看的到效果;解释型语言则没生成你看的到的那种.exe文件,而是直接发出效果。那么区别之一就是:是否显性的生成二进制文件供你去双击。
区别2:运行的时候是否需要编译器
编译型语言运行的是最终的二进制代码了,所以不在需要编译器在身边守护。但解释型语言则不然,它是边解释、边运行,所以运行的时候很可能还有部分代码没有解释好,所以需要编译器守护(解释型语言把该工具叫:解释器)。那么编译器在哪里?就在
浏览器
里,所以你要看html效果,必须是用浏览器这种工具,或者有编译工具在内的其他工具,如:模拟浏览器的工具。
区别3:执行速度对比
编译型语言由于运行的已经是完全的二进制内容了,所以运行起来很干净利落,自然速度快。但解释型语言,运行的不一定是完全的二进制内容,因为它是边解释(成二进制),边运行。所以当它执行看出效果的时候,程序后半部分还不一定解释成二进制呢。所以它是“三心二意”的做事,速度没有前者快,但是
CPU的运行速度如果很快
(注:这就是【Python】作为一门解释型语言,弊端有所减轻的原因),你可能看不出来,偶尔会看到“有点卡”的效果。原因就是:它边解释、边运行,你看到效果了,可能还有一少半的代码没解释成二进制呢,所以你看到的效果会是残缺的,这就是为什么查看网页的时候,很容易就看到这样的情况:先是出现一堆没有布局的文字,然后才出现那种布局好的效果。
区别4:可移植性对比
编译型语言是运行二进制内容,所以:一旦CPU指令系统改变,之前的二进制文件可能运行不了。比如:如果到其他硬件平台上运行,就可能出现错误,就需要根据该平台重新编译出新的二进制文件。所以:可移植性差;而解释型语言则不然。它并没有实现弄成什么二进制内容,而是在需要的时候才开始编译、运行。所以:它自然具有可移植性,即:在任何平台都可以马上运行起来。注意:它的解释工具如:
浏览器
,本身就是编译型语言解释出来的二进制代码,所以浏览器本身不具有移植性,是需要针对不同的平台弄出对应的浏览器最终二进制文件的。这里千万不要混淆了。
区别5:升级上对比
编译型语言弄出来的二进制文件如果要升级,自然要重新下载一个新的二进制文件了。所以重新下载,安装,覆盖是最大的特点。比如QQ的升级,就是要重新下载,重新安装,重新覆盖,等个半天,而且很耗费CPU资源,体验性就不大好;而解释型的语言,只要重新写好源代码即可。用户提要到最新效果,只要刷新一下即可。所以体验性好。比如:某网站平台升级了,用户只要重新刷新一下......
区别6:应用领域
编译型语言应用领域通常是那些安装软件,如:桌面上的那种安装软件;解释型的语言的应用领域通常是:互联网,网站等,那种刷新了一下就可以看到最新效果的领域。
4️⃣、实现原理
实现原理,简单来说就是:是不是做成了“实时采集”;
编译型语言没有做“实时采集”。它选择了一次性解决问题,表现为:先弄出完整的二进制代码之后,再让用户去执行该二进制代码,这样省事、省力、省心。但造成可移植性差、升级麻烦的后果。
解释型语言,采用了“实时采集”的措施,做成“边解释、边运行”。但这样带来的直接弊端就是:边走边看,因此速度自然要慢一些。不过
现在的CPU、内存等硬件能力都很强大,这个方面的影响可以忽略
。而它带来的非常便捷的升级,让它更显示出独特的魅力。所以它在移动互联网的领域,在只要刷新一下就可以看到最新效果的领域,是独一无二的霸主。
网友评论