语言发展

  计算机的硬件仅仅能识别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. spark sql遇到的问题

    项目背景:计算平台架构hadoop spark   spark on yarn,支持多种sql引擎如hive.spark sql.impala等. 问题描述:SPARK SQL在做insert ove ...

  2. 0821Servlet基础

    什么是servlet    jsp页面的前身是servlet, 但是servlet和jsp是两个不同概念    servlet是运行在服务器端的一段程序, 是可以直接运行一段java后台代码      ...

  3. shell 文件个数 vs 文件夹个数

    文件个数 ls -l |grep "^-"|wc -l 文件夹个数 ls -l |grep "^d"|wc -l

  4. Python标准库:内置函数divmod(a, b)

    本函数是实现a除以b,然后返回商与余数的元组. 如果两个参数a,b都是整数,那么会采用整数除法,结果相当于(a//b, a % b).如果a或b是浮点数,相当于(math.floor(a/b), a% ...

  5. 原型开发工具 mockplus

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha 原型开发工具  mockplus 微信(演示) - Mockup Plus Web Ap ...

  6. 洛谷P1113 杂务

    题目描述 John的农场在给奶牛挤奶前有很多杂务要完成,每一项杂务都需要一定的时间来完成它.比如:他们要将奶牛集合起来,将他们赶进牛棚,为奶牛清洗乳房以及一些其它工作.尽早将所有杂务完成是必要的,因为 ...

  7. [Atcoder Grand Contest 004] Tutorial

    Link: AGC004 传送门 A: …… #include <bits/stdc++.h> using namespace std; long long a,b,c; int main ...

  8. Activity(活动)生命周期--项目测试

    一.新建一个Activitylifetest项目,允许Android Studio帮我们自动创建活动和布局,并且勾选Luancher Activity来将创建的活动设置为主活动. 可以参考: http ...

  9. POJ 3057 Evacuation 二分+最大流

    Evacuation 题目连接: http://poj.org/problem?id=3057 Description Fires can be disastrous, especially when ...

  10. GIT使用(自用)

    1.远程分支就是本地分支push到服务器上的时候产生的.比如master就是一个最典型的远程分支(默认). 1 $: git push origin master 除了master之外,我们还可以随便 ...