`
waynesco
  • 浏览: 11168 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

编译和解释的区别是什么?

阅读更多
编译器是把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机可以直接以机器语言来运行此程序,速度很快;

而解释器则是只在执行程序时,才一条一条的解释成机器语言给计算机来执行,所以运行速度是不如编译后的程序运行的快的.


这是因为计算机不能直接认识并执行我们写的语句,它只能认识机器语言(是二进制的形式)


一、低级语言与高级语言

最初的计算机程序都是用0和1的序列表示的,程序员直接使用的是机器指令,无需翻译,从纸带打孔输入即可执行得到结果。后来为了方便记忆,就将用0、1序列表示的机器指令都用符号助记,这些与机器指令一一对应的助记符就成了汇编指令,从而诞生了汇编语言。无论是机器指令还是汇编指令都是面向机器的,统称为低级语言。因为是针对特定机器的机器指令的助记符,所以汇编语言是无法独立于机器(特定的CPU体系结构)的。但汇编语言也是要经过翻译成机器指令才能执行的,所以也有将运行在一种机器上的汇编语言翻译成运行在另一种机器上的机器指令的方法,那就是交叉汇编技术。

高级语言是从人类的逻辑思维角度出发的计算机语言,抽象程度大大提高,需要经过编译成特定机器上的目标代码才能执行,一条高级语言的语句往往需要若干条机器指令来完成。高级语言独立于机器的特性是靠编译器为不同机器生成不同的目标代码(或机器指令)来实现的。那具体的说,要将高级语言编译到什么程度呢,这又跟编译的技术有关了,既可以编译成直接可执行的目标代码,也可以编译成一种中间表示,然后拿到不同的机器和系统上去执行,这种情况通常又需要支撑环境,比如解释器或虚拟机的支持,Java程序编译成bytecode,再由不同平台上的虚拟机执行就是很好的例子。所以,说高级语言不依赖于机器,是指在不同的机器或平台上高级语言的程序本身不变,而通过编译器编译得到的目标代码去适应不同的机器。从这个意义上来说,通过交叉汇编,一些汇编程序也可以获得不同机器之间的可移植性,但这种途径获得的移植性远远不如高级语言来的方便和实用性大。


二、编译与解释

编译是将源程序翻译成可执行的目标代码,翻译与执行是分开的;而解释是对源程序的翻译与执行一次性完成,不生成可存储的目标代码。这只是表象,二者背后的最大区别是:对解释执行而言,程序运行时的控制权在解释器而不在用户程序;对编译执行而言,运行时的控制权在用户程序。

解释具有良好的动态特性和可移植性,比如在解释执行时可以动态改变变量的类型、对程序进行修改以及在程序中插入良好的调试诊断信息等,而将解释器移植到不同的系统上,则程序不用改动就可以在移植了解释器的系统上运行。同时解释器也有很大的缺点,比如执行效率低,占用空间大,因为不仅要给用户程序分配空间,解释器本身也占用了宝贵的系统资源。

编译器是把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机可以直接以机器语言来运行此程序,速度很快;
而解释器则是只在执行程序时,才一条一条的解释成机器语言给计算机来执行,所以运行速度是不如编译后的程序运行的快的.

1、编辑:用编辑软件(EDIT.EXE或记事本)形成源程序(.ASM),如:LX.ASM;
2、汇编:用汇编程序(MASM.EXE)对源程序进行汇编,形成目标文件(.OBJ),格式如下:MASM LX.ASM;
3、连接:用连接程序(LINK.EXE)对目标程序进行连接,形成可执行文件(.EXE),格式如下:LINK LX.OBJ;
4、执行:如果结果在屏幕在显示,则直接执行可执行文件。
5、调试:用调试程序(DEBUG.EXE)对可执行文件进行调试,格式如下:DEBUG LX.EXE

1. 在具体计算机上实现一种语言,首先要确定的是表示该语言语义解释的虚拟计算机,一个关键的问题是程序执行时的基本表示是实际计算机上的机器语言还是虚拟机的机器语言。这个问题决定了语言的实现。根据这个问题的回答,可以将程序设计语言划分为两大类:编译型语言和解释型语言。

2. 由编译型语言编写的源程序需要经过编译、汇编和链接才能输出目标代码,然后机器执行目标代码,得出运行结果,目标代码由机器指令组成,一般不能独立运行,因为源程序中可能使用了某些汇编程序不能解释引用的库函数,而库函数代码又不在源程序中,此时还需要链接程序完成外部引用和目标模块调用的链接任务,最后输出可执行代码。C、C++、Fortran、Pascal、Ada都是编译实现的。

3. 解释型语言的实现中,翻译器并不产生目标机器代码,而是产生易于执行的中间代码,这种中间代码与机器代码是不同的,中间代码的解释是由软件支持的,不能直接使用硬件,软件解释器通常会导致执行效率较低。用解释型语言编写的程序是由另一个可以理解中间代码的解释程序执行的。与编译程序不同的是,解释程序的任务是逐一将源程序的语句解释成可执行的机器指令,不需要将源程序翻译成目标代码后再执行。对于解释型Basic语言,需要一个专门的解释器解释执行 Basic程序,每条语言只有在执行才被翻译。这种解释型语言每执行一次就翻译一次,因而效率低下。

4. Java很特殊,Java程序也需要编译,但是没有直接编译称为机器语言,而是编译称为字节码,然后在Java虚拟机上用解释方式执行字节码。Python 的也采用了类似Java的编译模式,先将Python程序编译成Python字节码,然后由一个专门的Python字节码解释器负责解释执行字节码。

   (Java虚拟机对字节码的执行相当于模拟一个cpu,而ruby1.8--在虚拟机还未出现前--是通过解释成语法树执行。)
分享到:
评论

相关推荐

    编译执行和解释执行的区别

    是有关于编译执行和解释执行的区别,适用于想了解这两种编译方式的区别的同学看一下

    编译和解释的区别是什么

    最近发现有很多网友都提出一个问题:程序的编译与解释有什么区别?这篇文章就为大家介绍了编译和解释的区别,需要的朋友可以参考下

    编译性语言、解释性语言和脚本语言

    编译性语言、解释性语言和脚本语言 编译性语言、解释性语言和脚本语言

    编译作业1.2.txt

    编译程序和解释程序的区别是什么? 编译程序和解释程序的区别是什么? 编译程序和解释程序的区别是什么? 编译程序和解释程序的区别是什么?

    编译原理作业一答案.doc

    2.编译执行和解释执行的区别在于: 是否产生目标代码 。 3.一个文法通常可表示成一个四元式G[S]=( VN,VT,P,S )。 4.一个递归文法所产生的句子,其个数必然是 无穷多 个。 5.设G[S]为一文法,由文法的开始符号...

    java基础常识与概念

    为什么说 Java 语言“编译与解释并存”? Oracle JDK vs OpenJDK Java 和 C++ 的区别? 基本语法 字符型常量和字符串常量的区别? 注释有哪几种形式? 标识符和关键字的区别是什么? Java 语言关键字有哪些? 自增自减...

    解释执行和编译执行的区别?

    在说解释执行和编译执行之前先说几个概念,需要的朋友可以参考下。

    解释语言与编译语言的区别

    NULL 博文链接:https://huigou.iteye.com/blog/1167587

    Java中高级核心知识全面解析(精华必看)

    1.1.6.Java 应用程序与小程序之间有哪些差别? 1.1.7.import java 和 javax 有什么区别? 1.1.8.为什么说 Java 语言“编译与解释并存”? 1.2.Java 语法 1.2.1.字符型常量和字符串常量的区别? 1.2.2.关于注释? 1.2.3...

    2023最新整理版-java基础面试提

    5. 为什么说 Java 语言“编译与解释并存”? 5 6. Oracle JDK vs OpenJDK 6 7. Java 和 C++ 的区别? 9 基本语法 9 8. 注释有哪几种形式? 9 9. 标识符和关键字的区别是什么? 10 10. Java 语言关键字有哪些? 11 11....

    编译原理复习提纲

    1. 编译方式与解释方式区别:是否生成目标代码 2. 编译程序总框架 二、词法分析 1.状态转换图的功能:识别(接受)一定的符号串(单词) 2.状态转换图的程序实现的思路:为每个状态结点都编写一个子程序 3.字母表的...

    编译原理 参考答案 第一章

    (3)编译方式与解释方式的根本区别在于是否生成目标代码。( ) (4)编译程序与具体的语言无关。( ) (5)编译程序与具体的机器有关。( ) (6)对编译程序而言,代码优化是不可缺少的一部分。( ) (7)对编译程序而言,中间代码...

    编译原理 期末复习

    ⒈编译程序的工作过程一般可以...⒊编译方式与解释方式的根本区别在于是否生成目标代码。 ⒋翻译程序是这样一种程序,它能将用甲种语言书写的程序转换成与其等价的乙种语言书写的程序。 。。。。。。。。。。。。。。

    C++的概念/解释,可打印,华南师范大学C++考过。

    什么时候应该用输出方式打开文件?什么时候该用app方式打开文件? 14 71. 哪些流操纵符只对下一次输入/输出有效?哪些流操纵符是一直有效直到被改变? 14 72. 什么叫做作用域?什么叫做局部变量? 什么叫做全局变量...

    编译原理课件(词法分析,语法分析,自动机,代码优化)

    词法分析,语法分析,自动机 ①编译程序和解释程序的概念和区别。 ②编译程序的八大功能模块的功能。

    千方百计笔试题大全

    145、 file="abc.jsp"%>与 page="abc.jsp"/>之间的差别? 36 146、JSP的缺点? 36 148、如何实现JSP的国际化? 36 150、如何在JSP中包括绝对路径文件? 使用URLConnection即可。 37 151、在servlets和JSP之间能...

    java面试宝典

    145、与之间的差别? 36 146、JSP的缺点? 36 148、如何实现JSP的国际化? 36 150、如何在JSP中包括绝对路径文件? 使用URLConnection即可。 37 151、在servlets和JSP之间能共享session对象吗? 37 152、如何设置...

    什么是XLNet中的双流自注意力

    中,我主要讨论了XLNet (AR语言模型)和BERT (AE语言模型)之间的区别以及重排列语言建模。 我相信对XLNet有一个直观的理解远比实现细节重要,所以我只解释了重排列语言建模,而没有提到另一个重要的部分,双流自注意...

    龙书编译原理(中文版).part1(共两部分)

    本书从介绍编译的原理性概念开始,然后通过构建一个简单的一遍编译器来逐一解释这些概念。 本书是编译原理课程的经典教材,作者曾多次使用本书的内容在贝尔实验室、哥伦比亚大学、普林斯顿大学和斯坦福大学向本科生...

    python面试题(含答案).docx

    Q1、Python中的列表和元组有什么区别? Q2、Python的主要功能是什么? Python是一种解释型语言。与C语言等语言不同,Python不需要在运行之前进行编译。 Python是动态语言,当您声明变量或类似变量时,您不需要...

Global site tag (gtag.js) - Google Analytics