也谈编译 VS 解释
语言发展
计算机的硬件仅仅能识别0和1组成的机器指令,而机器指令是最主要的计算机语言,可是我们平时进行程序设计时肯定不会用机器语言来编程,由于用它的效率低。更让人难以理解。
因此聪明的人类发明了汇编语言。它使用符号来表示指令,比如用ADD表示加法。这就easy理解了。可是汇编语言和机器语言十分接近,其书写取决于机器指令,因此它还是一种面向机器的语言。所以称它为低级语言。
对应的,又在此基础上,开发出了功能更强、抽象更高的面向各类应用的程序语言。称为高级语言。比如VB,C++,C#,Java等,大家都挺熟悉的。
可是计算机不能直接理解这些高级语言。仅仅能直接理解机器语言,所以必需要把高级语言翻译成低级语言,计算机才干运行高级语言编写的程序。翻译的方式有两种,一个是编译,一个是解释。
编译程序
编译过程,是将全部的源码指令一次性翻译成目标程序,然后再运行。这个步骤例如以下:
编译器将高级语言从源码翻译成与之等价的目标程序(一次性所有翻译完),在随后的某个时刻。用户启动目标程序由操作系统运行。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYWtremhqag==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
编译程序具体过程:
编译器首先对源程序进行词法,语法,语义的分析,将源程序变成一种内部表达形式,叫做中间代码。中间代码是一种结构简单,表意明白的记号系统,能easy的将他翻译成目标代码。
目标代码分为两类:汇编语言形式和机器指令形式。
解释程序
解释过程。就是对于源文件里的每一条指令。都依次翻译成目标指令(这是和编译不同的,解释程序没有目标程序)。而且运行的过程。对每条这样的运行过程全然由解释器控制的。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYWtremhqag==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
解释程序在词法。语法,语义分析上和编译器的工作原理基本同样。但在执行用户程序时。直接执行源程序或源程序的中间代码程序,中间不会产生目标程序。例如以下图三种方式(C更接近于机器语言)。
编译和解释的比較
编译:一次编译,多次执行,整体执行较快。效率更高。
平台依赖性。
编译好的程序仅仅能在当前平台执行。是个局限性。
举一个英语翻译的样例:编译过程就是把一遍英文文章所有翻译成中文,然后所有记录在纸上,当我们下次再读这篇英文文章时,直接读已经翻译好的中文文章即可了,速度非常快。
可是比較依赖这张中文纸。
解释:解释器实时地解释每一条指令并执行。整体执行比較慢。
平台无关性。
不论什么平台仅仅要装上解释器都能够执行全然同样的代码。
还用英语翻译的样例:解释过程就是没读一个句子就翻译一个句子,下次再读这篇英文文章是,还须要读一读翻译一句。时间慢,效率低,可是这样的方法不须要依赖所谓的中文纸。
发展
编译和解析相比汇编更加效率,人为理解更加easy。可是编译和解释的优缺点明显,并且还是互补的,有没有更有效率又可移植的编程呢,当然是有的,C#和Java,大家都非常熟悉。
它们是怎样解释的,简单一句话说明吧:
JAVA:先转换为中间语言,然后在执行时!解释!
C#:先转换为中间语言,然后在执行时!编译!,且用到多少就编译多少!
也谈编译 VS 解释的更多相关文章
- python介绍、安装及相关语法、python运维、编译与解释
1.python介绍 Python(英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/)是一种广泛使用的解释型.高级编程.通用型编程语言,由吉多.范罗苏姆创造,第一版发布于1991年.可以视 ...
- python的编译和解释
编译和解释 1.编译: 将源代码一次性转换成目标代码的过程 源代码 → 编辑器 →目标代码 →程序执行(同时程序输入)→结果输出 2.解释: 将源代码逐条转换成目标代码同时逐条运行的过程 源代码+程序 ...
- 理解python先编译后解释的特点
1. CPython默认的标准解释器编译器.JPython支持Java集成,可以生成Java字节码并在JVM中解释执行.IronPython支持.NET集成. 2. 下次运行程序时,python自动检 ...
- Android APK反编译具体解释(附图)
这段时间在学Android应用开发,在想既然是用Java开发的应该非常好反编译从而得到源码吧,google了一下,确实非常easy,下面是我的实践过程. 在此郑重声明,贴出来的目的不是为了去破解人家的 ...
- 编译与解释(java)
计算机不能直接理解高级语言,只能直接理解机器语言,所以必须要把高级语言翻译成机器语言,计算机才能执行高级语言编写的程序. 翻译的方式有两种,一个是编译,一个是解释.两种方式只是翻译的时间不同 计算机不 ...
- 编译型 解释型 C++工作原理
C++教程_w3cschool https://www.w3cschool.cn/cpp/ C++工作原理: C++语言的程序因为要体现高性能,所以都是编译型的.但其开发环境,为了方便测试,将调试环境 ...
- java基础-02:编译型和解释型
Java程序运行机制: Java语言的编译-->解释-->运行过程 1.编译型语言:程序在执行之前需要一个专门的编译过程,把程序编译成为机器语言的文件,运行时不需要重新翻译,直接使用编译的 ...
- Java基础系列(4)- 编译型和解释型
概念 有一个外国人要看一本中文的书,有两种方式可以看,一种是把这本书翻译成英文版,另外一种是请一个中文翻译,想看哪边,翻译就翻译哪边. 针对上述的描述,翻译成英文版本的书籍对应的就是编译型,将代码编译 ...
- Python2x,3x源码的区别,编译型解释型,变量,注释,if,用户交互input,基本数据类型3种
cpu 内存 硬盘 操作系统 cpu: 计算机的运算和计算中心,相当于人类的大脑. 内存:暂时存储数据,临时加载数据应用程序,4G,8G,16G,32G #速度快,造价高,断电即消失 硬盘 ...
随机推荐
- HDFS上传文件错误--hdfs:DFSClient:DataStreamer Exception
今天上传文件的时候发现传上去的文件为空,错误提示如上述所示,原来是IP地址改掉了对呀应etc/hosts下面的IP地址也要改变,永久改ip命令-ifconfig eth0 xxx·xxx·xxx·xx ...
- CodeForces 144B Meeting
暴力. 题目只要求计算边上的点就可以了,一开始没看清题意,把内部的也算进去了.内部的计算可以延迟标记一下,但这题没有必要. #include<map> #include<set> ...
- HDU 4891 The Great Pan
模拟题. #include<map> #include<set> #include<ctime> #include<cmath> #include< ...
- 洛谷——P1626 象棋比赛
P1626 象棋比赛 题目描述 有N个人要参加国际象棋比赛,该比赛要进行K场对弈.每个人最多参加两场对弈,最少参加零场对弈.每个人都有一个与其他人不相同的等级(用一个正整数来表示). 在对弈中,等级高 ...
- Knockout.js(三):计算属性(Computed Observable)
在Knockout2.0之前,计算属性被称之为依赖属性,在2.0版本中,ko.dependentObservable重命名为ko.computed,因为它在读.解释和类型上更简单.在实际使用中,ko. ...
- 关于oracle存储过程需要注意的问题
在使用oracle存储过程时,有一些需要注意的地方,下面就来总结一下. 1.在oracle的存储过程中,数据表别名不能加as 也许是为了区分存储过程中的as,怕与过程中的as冲突. 如: select ...
- run()和start()的区别
run没有启新的线程,start方法才会调用Thread的native的start0方法,start0会调用run方法,开启新的线程,博主这么做,不是多线程顺序执行,而是把业务阻塞在主线程里.请打印: ...
- [BZOJ4859][BJOI2017]机动训练(DP)
4859: [BeiJing2017]机动训练 Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 105 Solved: 63[Submit][Stat ...
- 【分块】【LCT】bzoj2002 [Hnoi2010]Bounce 弹飞绵羊
分块,每个点统计还有几步弹出该块,以及它弹出块后的下一个节点是哪个点. 注意:update某个点的时候,会可能对当前块内 该点及以前的点 产生影响,所以对这部分点进行更新. #include<c ...
- 【KMP求最小周期】POJ2406-Power Strings
[题意] 给出一个字符串,求出最小周期. [思路] 对KMP的next数组的理解与运用orz ①证明:如果最小周期不等于它本身,则前缀和后缀必定有交叉. 如果没有交叉,以当前的next[n]为最小周期 ...