语言发展

  计算机的硬件仅仅能识别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 解释的更多相关文章

  1. python介绍、安装及相关语法、python运维、编译与解释

    1.python介绍 Python(英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/)是一种广泛使用的解释型.高级编程.通用型编程语言,由吉多.范罗苏姆创造,第一版发布于1991年.可以视 ...

  2. python的编译和解释

    编译和解释 1.编译: 将源代码一次性转换成目标代码的过程 源代码 → 编辑器 →目标代码 →程序执行(同时程序输入)→结果输出 2.解释: 将源代码逐条转换成目标代码同时逐条运行的过程 源代码+程序 ...

  3. 理解python先编译后解释的特点

    1. CPython默认的标准解释器编译器.JPython支持Java集成,可以生成Java字节码并在JVM中解释执行.IronPython支持.NET集成. 2. 下次运行程序时,python自动检 ...

  4. Android APK反编译具体解释(附图)

    这段时间在学Android应用开发,在想既然是用Java开发的应该非常好反编译从而得到源码吧,google了一下,确实非常easy,下面是我的实践过程. 在此郑重声明,贴出来的目的不是为了去破解人家的 ...

  5. 编译与解释(java)

    计算机不能直接理解高级语言,只能直接理解机器语言,所以必须要把高级语言翻译成机器语言,计算机才能执行高级语言编写的程序. 翻译的方式有两种,一个是编译,一个是解释.两种方式只是翻译的时间不同 计算机不 ...

  6. 编译型 解释型 C++工作原理

    C++教程_w3cschool https://www.w3cschool.cn/cpp/ C++工作原理: C++语言的程序因为要体现高性能,所以都是编译型的.但其开发环境,为了方便测试,将调试环境 ...

  7. java基础-02:编译型和解释型

    Java程序运行机制: Java语言的编译-->解释-->运行过程 1.编译型语言:程序在执行之前需要一个专门的编译过程,把程序编译成为机器语言的文件,运行时不需要重新翻译,直接使用编译的 ...

  8. Java基础系列(4)- 编译型和解释型

    概念 有一个外国人要看一本中文的书,有两种方式可以看,一种是把这本书翻译成英文版,另外一种是请一个中文翻译,想看哪边,翻译就翻译哪边. 针对上述的描述,翻译成英文版本的书籍对应的就是编译型,将代码编译 ...

  9. Python2x,3x源码的区别,编译型解释型,变量,注释,if,用户交互input,基本数据类型3种

    cpu 内存 硬盘 操作系统 ​ cpu: 计算机的运算和计算中心,相当于人类的大脑. ​ 内存:暂时存储数据,临时加载数据应用程序,4G,8G,16G,32G #速度快,造价高,断电即消失 ​ 硬盘 ...

随机推荐

  1. HDU 6073 Matching In Multiplication(拓扑排序)

    Matching In Multiplication Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 524288/524288 K ( ...

  2. shell脚本报错退出

    在shell脚本中,比如有以下的代码: cd /root/test88 rm -rf  backup 如果目录/root/test88不存在,脚本不会停止,依然会执行rm -rf backup这个命令 ...

  3. sql 常见错误

    notFound = 1403L; .dupKey = -1L; openCloseErr = -2117L; cursorNotOpenErr = -1002L; .nullCursor = -14 ...

  4. 如何使用weinre来进行远程调试phonegap应用

    使用phonegap开发的应用在真机上和PC上的显示效果以及浏览器渲染方式还是有些区别的.在PC端很好调试,各种浏览器都自带了调试工具,使用起来很方便,但是在一旦安装到了手机上,这个时候要进行调试就需 ...

  5. [BZOJ4004][JLOI2015]装备购买(贪心+线性基)

    求最小权极大线性无关组. 先将所有向量按权值排序,从小到大依次判断,若能被前面已选向量线性表出则不选,这样一定最优. 据说是用拟阵来证明,但感性理解一下感觉比较显然,首先这样个数一定是最多的,其次对于 ...

  6. 【费用流】hdu5988 Coding Contest

    从源点向每个点连接容量为该点人数,费用为1的边, 把原图中的每条边拆成两条,一条容量为1,费用为1,另一条容量为ci-1,费用为1-pi 从每个点向汇点连接容量为该点面包数量,费用为1的边. 跑的费用 ...

  7. python基础之条件判断和循环

    1.条件判断 age = 3 if age >= 18: print('adult') elif age >= 6: print('teenager') else: print('kid' ...

  8. NServiceBus入门:启程(Introduction to NServiceBus: Getting started)

    原文地址:https://docs.particular.net/tutorials/intro-to-nservicebus/1-getting-started/ 侵删. 最好的学习NService ...

  9. 你家的Wifi密码安全吗?

    WiFi在给我们提供方便的无线网络同时,也带了一些隐患.如果对WiFi不设密码的话,一来会因为蹭网而影响网速,二来给信息安全带来了不小隐患.针对WiFi的安全手段,一般来说就是加密.最初的加密方式是W ...

  10. Mybatis注解方法操作数据库

    Java中使用Mybatis操作数据库主要有两种方法:注解和xml配置,注解相对比较简单和方便,两种方式的效果一致.本文以注解的方式说明用Mybatis访问数据库的方法 一.创建数据表(MySql) ...