解释型语言与编译型语言的异同

解释型语言和编译型语言,这两个概念在我本科结束后发现如果让我自己清晰的解释,好像我并不能,最近看到一篇比较好的介绍,如下:

1.何谓解释?何谓编译?

这一切要从学习C语言的时候开始。C语言在执行前一定要先编译一下,如果发现语法错误,就会发出编译不通过的提示。C语言就是一种编译型的编程语言,那什么又是解释型的语言呢?这又要从我们学习MATLAB说起,当我们写完MATLAB代码之后是不是直接点执行就等待结果了,如果有那一句代码发生错误的话,程序就执行到那一句才会停下来报错,所以MATLAB是一种一边执行一边解释的语言,解释是一句一句的翻译。从而不需要预先进行编译,所以称之为解释型语言,当然python也是一种解释性语言。
在这里插入图片描述

2.为什么会有这两种类型的编程语言?各自的优缺点是什么?

我想最主要的因素就是:编译性语言不如解释性语言跨平台性好,也就是说不同平台的兼容性有区别,所以才有了两种语言。
编译性语言例如c语言:用c语言开发了程序后,需要通过编译器把程序编译成机器语言(即计算机识别的二进制文件,因为不同的操作系统计算机识别的二进制文件是不同的),所以c语言程序进行移植后,要重新编译。(如windows编译成ext文件,linux编译成erp文件)。

解释性语言例如java语言,java程序首先通过编译器编译成class文件,如果在windows平台上运行,则通过windows平台上的java虚拟机(VM)进行解释。如果运行在linux平台上,则通过linux平台上的java虚拟机进行解释执行。所以说能跨平台,前提是平台上必须要有相匹配的java虚拟机。如果没有java虚拟机,则不能进行跨平台。

这个原因说明白了之后,我们来看看两种语言有哪些代表呢?编译型语言代表有:C语言和C++。解释型语言代表有:js,php,MATLAB,java和javascript。
如果对于java语言是解释型语言的观点难以认同,可参考这篇博主的文章,我觉得讲的很好。
Java到底是编译型语言还是解释型语言?

2.1 编译型与解释型的共同点

他们都要弄成二进制代码才能执行,两类编程语言的源代码都是英文,但是我们的计算机并不认识英文,所以都要转化成二进制才能执行。

2.2 编译型与解释型的不同点:

区别就在于“转化的方式”不一样
1.从运行效果上来看:编译型语言要等全部写完后通过编译器去生成一个类似*.exe的二进制文件,然后双击这个文件才可以看到效果。而解释型语言并没生成*.exe文件,而是直接生成效果,这就是我之前提到的的那个C语言和MATLAB的例子。

2.运行的时候是否需要编译器(或解释器)的伴随:编译型语言运行的是最终生成的二进制代码,所以不需要编译器伴随。而解释型语言则一边解释一边运行,所以运行的时候很可能还有部分代码没有解释好,所以需要解释器伴随。有人会问编译器(解释器)在哪里呢?举个例子,网页的解释器就在浏览器中,所以要看HTML的效果必须用浏览器或者有编译工具在内的其他工具打开,比如:模拟浏览器的工具。

3.执行的速度对比:编译型语言运行的已经是完全的二进制内容,运行起来十分干净利落,所以速度很快。而解释型语言运行的不一定是完全的二进制内容,因为它是一边解释成二进制一边运行。所以当它执行看出效果的时,程序后半部分还不一定解释成二进制,速度没有前者快,但是CPU的运行速度如果很快,可能看不出来,只是偶尔会看到“有点卡”的效果。原因就是它一边解释一边运行,你看到效果的后面可能还有一少半的代码没解释成二进制,所以看到的效果会是残缺的。这就是为什么有时候查看网页,先是出现一堆没有布局的文字,然后才出现那种布局好的效果。

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

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

6.应用领域,编译型语言应用领域通常是那些安装软件,例如桌面上的安装软件。解释型的语言的应用领域通常是互联网、网站等那种刷新了一下就可以看到最新效果的领域。结论两类编程语言都各有优势和劣势,无绝对的正确和错误之分,大家仁者见仁智者见智。

参考链接:https://zhuanlan.zhihu.com/p/111763425

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱学习的贝塔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值