更新说明:对文章排版以及内容格式做了调整。
更新时间:2022-05-04

简单经历

在详述前,先记录一下自己的经历:之前写过一段时间Java代码,现在主要写前端,在这个过程中有一个场景让我印象深刻,但原理还有待深究:
之前写Java代码的时候记得修改一些内容的时候必须要重启Tomcat服务器,才能看到修改代码过后的运行结果,但是有些又不用重启。而在写前端语言的时候,抛去缓存,代码修改后可以马上运行显示,当时根本就没去想这个问题,我能简单的想起编译型语言与解释型语言的区别也就是这个了。

文章正文

那么到底什么是编译型语言,什么是解释型语言呢?他们之间有什么共同点和区别呢?

概念

  • 编译型语言代表有:C语言,C++Object-C以及最近很火的苹果新语言swift
    通常都会对源代码进行编译,生成可以执行的二进制代码,执行的是编译后的结果
  • 解释型语言代表有:JavaScriptPythonErlangPHPPerlRuby
    通常不用对源代码进行编译,一般是通过解释器载入脚本后运行。由于每个语句都是执行的时候才进行解释翻译,这样解释性语言每次执行就要翻译一次,效率相对要低。
  • Java具有编译与解释两种特性:既可以将其源代码当作脚本执行,也可以进行编译成.class代码(字节码)载入运行

对比

编译型语言:

  • 优点:编译器一般会有预编译的过程对代码进行优化。因为编译只做一次,运行时不需要编译,所以编译型语言的程序执行效率高。可以脱离语言环境独立运行。
  • 缺点:编译之后如果需要修改就需要整个模块重新编译。编译的时候根据对应的运行环境生成机器码,不同的操作系统之间移植就会有问题,需要根据运行的操作系统环境编译不同的可执行文件。

解释型语言

  • 优点:有良好的平台兼容性,在任何环境中都可以运行,前提是安装了解释器(虚拟机)。灵活,修改代码的时候直接修改就可以,可以快速部署,不用停机维护。
  • 缺点:每次运行的时候都要解释一遍,性能上不如编译型语言。

区别(本段落参考文章地址 戳这里

区别1:从效果上来比

编译型语言要全部写完之后,然后通过某个编译器,去生成一个类似*.exe的二进制文件,然后手工双击这个文件才看的到效果;解释型语言则没生成你看的到的那种.exe文件,而是直接发出效果。那么区别之一就是:是否显性的生成二进制文件供你去双击。

区别2:运行的时候是否需要编译器

编译型语言运行的是最终的二进制代码了,所以不在需要编译器在身边守护。但解释型语言则不然,它是边解释、边运行,所以运行的时候很可能还有部分代码没有解释好,所以需要编译器守护(解释型语言把该工具叫:解释器)。那么编译器在哪里?就在浏览器里,所以你要看html效果,必须是用浏览器这种工具,或者有编译工具在内的其他工具,如:模拟浏览器的工具。

区别3:执行速度对比

编译型语言由于运行的已经是完全的二进制内容了,所以运行起来很干净利落,自然速度快。但解释型语言,运行的不一定是完全的二进制内容,因为它是边解释(成二进制),边运行。所以当它执行看出效果的时候,程序后半部分还不一定解释成二进制呢。所以它是“三心二意”的做事,速度没有前者快,但是CPU的运行速度如果很快(注:这就是【Python】作为一门解释型语言,弊端有所减轻的原因),你可能看不出来,偶尔会看到“有点卡”的效果。原因就是:它边解释、边运行,你看到效果了,可能还有一少半的代码没解释成二进制呢,所以你看到的效果会是残缺的,这就是为什么查看网页的时候,很容易就看到这样的情况:先是出现一堆没有布局的文字,然后才出现那种布局好的效果。

区别4:可移植性对比

编译型语言是运行二进制内容,所以:一旦CPU指令系统改变,之前的二进制文件可能运行不了。比如:如果到其他硬件平台上运行,就可能出现错误,就需要根据该平台重新编译出新的二进制文件。所以:可移植性差;而解释型语言则不然。它并没有实现弄成什么二进制内容,而是在需要的时候才开始编译、运行。所以:它自然具有可移植性,即:在任何平台都可以马上运行起来。注意:它的解释工具如:浏览器,本身就是编译型语言解释出来的二进制代码,所以浏览器本身不具有移植性,是需要针对不同的平台弄出对应的浏览器最终二进制文件的。这里千万不要混淆了。

区别5:升级上对比

编译型语言弄出来的二进制文件如果要升级,自然要重新下载一个新的二进制文件了。所以重新下载,安装,覆盖是最大的特点。比如QQ的升级,就是要重新下载,重新安装,重新覆盖,等个半天,而且很耗费CPU资源,体验性就不大好;而解释型的语言,只要重新写好源代码即可。用户提要到最新效果,只要刷新一下即可。所以体验性好。比如:某网站平台升级了,用户只要重新刷新一下…

区别6:应用领域

编译型语言应用领域通常是那些安装软件,如:桌面上的那种安装软件;解释型的语言的应用领域通常是:互联网,网站等,那种刷新了一下就可以看到最新效果的领域。

实现原理

实现原理,简单来说就是:是不是做成了“实时采集”;
编译型语言没有做“实时采集”。它选择了一次性解决问题,表现为:先弄出完整的二进制代码之后,再让用户去执行该二进制代码,这样省事、省力、省心。但造成可移植性差、升级麻烦的后果。

解释型语言,采用了“实时采集”的措施,做成“边解释、边运行”。但这样带来的直接弊端就是:边走边看,因此速度自然要慢一些。不过现在的CPU、内存等硬件能力都很强大,这个方面的影响可以忽略。而它带来的非常便捷的升级,让它更显示出独特的魅力。所以它在移动互联网的领域,在只要刷新一下就可以看到最新效果的领域,是独一无二的霸主。