`
whg333
  • 浏览: 8159 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

解释型语言和编译型语言的区别与不同

阅读更多
计算机编程语言种类非常多,根据与计算机硬件贴近程度和抽象程度大致可分为3类,自顶向下分别是

高级语言(抽象层次更高的便于记忆和表示的英文代码)
      |
      |
汇编语言(抽象层次较高的对应机器硬件的cpu指令集,英文缩的助记符号代码)
      |
      |
机器语言(抽像层次最低的由0、1序列所表示的机器码)

      众所周知,计算机底层只能识别(并执行)0、1序列的机器码,这表示所有的高级编程语言所编写的代码,最终都要以某种方式被转换成能被计算机识别的0、1序列机器码,方可被计算机接受并执行。这种将代码转换为机器码的方式可分为编译型和解释型这2类:

编译型:运行前先由编译器将高级语言代码编译为对应机器的cpu汇编指令集,再由汇编器汇编为目标机器码,生成可执行文件,然最后运行生成的可执行文件。最典型的代表语言为C/C++,一般生成的可执行文件及.exe文件。

解释型:在运行时由翻译器将高级语言代码翻译成易于执行的中间代码,并由解释器(例如浏览器、虚拟机)逐一将该中间代码解释成机器码并执行(可看做是将编译、运行合二为一了)。最典型的代表语言为JavaScript、Python、Ruby和Perl等

两种方式的异同之处:

<1>转换为机器码的时机和运行效率
      两种转换为机器码的方式,最大不同之处是处理转换为机器码的时机不同。编译型是在运行前(且只编译一次),需要做转换工作,并生成一个可执行的机器码文件,用户每次运行该可执行文件执行即可,效率、执行速度要比解释型的快。因为解释型是在运行时做转换工作,并不生成可执行文件,所以每次运行都需要做一下转换工作,然后再执行,效率自然就低了。

<2>纠错排查
      编译型语言,在编译阶段即可发现常见的语法或者链接等错误,此机制可在运行前帮助程序员排查出可能潜在的语法、语义和类型转换错误,编译型语言一般都有明确的变量类型检测,也被称作强类型语言,即编译型语言至少能确保所生成的可执行文件肯定是可运行的,至于执行的逻辑不对则属于程序员业务逻辑错误范畴了。
      而对于解释型语言,代码中的错误必须直到运行阶段方可发现,由此造成的困惑是:往往一段程序看不出问题但却在运行阶段错误连连且需要一个个排查:变量拼写错误、方法不存在等。但也正是基于解释是在运行期执行转化的特性,一般的解释型语言通常都有自己的shell,可以在不确定某些执行结果是立即“动手执行”试一下,这就比每次都需要编译后才能运行并看到结果省去不少时间,鱼和熊掌不可兼得的理念再一次被验证了。

<3>可移植性
      编译型在编译后生成的可执行文件,是相对与本机机器指令集的,所生成的可执行文件移植到不同机器指令集的机器上,势必不一定能正常运行。而解释型的,尽管在不同配置的机器上,也是最终会解释成基于当前机器指令集的机器码并执行,故解释型的可移植性相对来说还是强于编译型的。

<4>适用性
      从第<1>点我们知道编译型执行速度较解释型快,因为编译型会把大量时间花在编译上,所以对机器和跨平台性的要求不高,开发操作系统、大型应用程序、数据库程序系统时一般都采用编译型语言;而解释型由于每次运行都需要解释一遍,对机器有一定的配置要求(在内存较小的机器上去一遍遍解释执行肯定是件很痛苦的事),适用的地方是一些例如网页脚本、服务器脚本及辅助开发接口这类对机器配置要求不高、需要一定跨平台兼容性的程序。

鱼和熊掌可兼得吗?

      综上所述,既然编译型与解释型各有优缺点又相互对立,所以一些语言都有把两者折衷起来的趋势:

      Java为了实现跨平台的特性,专门在从高级语言代码转换至机器码过程的中间加入了一层中间层JVM(java虚拟机),Java首先依赖编译器将代码(.java)编译成JVM能识别的字节码文件(.class),然后由JVM解释并执行改字节码,也可结合JIT(即时编译)技术,将解释生成的机器码转换为更高效的本地机器码,且该机器码可被缓存,来提高重复执行的效率。这样的结合,令程序员在使用Java时即可享受编译带来的强类型编译检查的好处,又能在执行时享受代码执行的高效性和跨平台性,何乐而不为呢?

      Python是解释型语言,但为了效率上的考虑,也提供了编译方式,编译后生成的也是字节码的文件形式,并由Python的的VM(虚拟机)的去执行,这点可以说和Java的编译执行方式类似。不同点在于,Python的编译并非强制执行的操作,确切来说Python的编译是自动的,通常发生在对某个模块(module)的调用过程中,编译成字节码的可以节省加载模块的时间,以此达到提高效率的目的。可见,某些先进的高级语言在对编译和解释方面的拿捏舍去,都采取了一种:两手抓,两手都要硬的态度哦:)
分享到:
评论

相关推荐

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

    然而,编译型语言的缺点在于需要预编译步骤,对开发环境和目标平台的依赖性强,且编译后的程序体积通常较大。 解释性语言,如Python、Ruby和Perl,它们的源代码在运行时逐行被解释器解析并执行,不需要预先生成可...

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

    这种方式使得解释型语言具有开发快速、调试方便的优点,因为改动一行代码就只需要重新解释那一行,而无需重新编译整个程序。但同时,由于每次执行都需要进行翻译,解释型语言的运行速度通常较慢。 编译语言则不同,...

    Java是解释型语言还是编译型语言

     对于C和C++,它们经过一次编译之后,可以由操作系统直接执行,所以它们是编译型语言。而Java不一样,它首先由编译器编译成.class(字节码)文件,然后在通过JVM从.class文件中读一行解释执行一行,所以它是解释型...

    Python之编译型语言和解释型语言

    Python语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和快速开发应用的编程语言,随着版本的不断更新和语言新功能的添加,逐渐被用于独立的、大型项目的开发。 Python解释器易于扩展,可以使用...

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

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

    LabVIEW 是编译型语言还是解释型语言-综合文档

    另外,LabVIEW还支持动态链接库(DLL)和.NET组件,可以与其他编译型语言(如C++或C#)进行交互,进一步拓展了其功能和应用范围。 总的来说,LabVIEW虽然不是传统意义上的纯编译型或解释型语言,但它结合了两者的...

    编译和解释的区别是什么

    编译和解释是两种不同的计算机程序代码转换方式,它们对于程序执行的效率、资源占用以及可移植性等方面有不同的影响。...两者各有优劣,针对不同的应用场景和需求,开发者可以灵活选择使用编译型语言还是解释型语言。

    002-Ptyhon简介-02-编译型语言和解释型语言.mp4

    Python7天速成

    40.LabVIEW 是编译型语言还是解释型语言.doc-综合文档

    LabVIEW是一种图形化编程语言,通常被称为G语言。...这种独特的编译机制结合了编译型语言的效率和解释型语言的交互性,使得LabVIEW成为一种高效且用户友好的编程工具,尤其适合于科学计算、数据可视化和工程应用。

    python属于解释型语言么

    解释型语言与编译型语言的主要区别在于执行流程。编译型语言如C或C++,在运行前需要通过编译器将源代码转化为机器码,然后生成一个可执行文件。这个文件可以直接在目标平台上运行,无需再次编译。相比之下,解释型...

    体系结构描述语言与程序设计语言有什么区别?

    在软件开发领域,体系结构描述语言(Architecture Description Languages, ADLs)和程序设计语言(Programming Languages, PLs)是两种不同的工具,它们...理解二者的区别和协同工作的方式对于软件开发者来说至关重要。

    解释器与编译器的区别

    例如,Python 和 JavaScript 是常见的解释型语言。当 Python 脚本或 JavaScript 代码被运行时,相应的解释器会逐行处理这些代码,将高级语言指令转化为机器可以直接执行的指令。 **编译器**则更像一个预处理步骤,...

    程序编译与解释.pdf

    ### 程序编译与解释的关键...解释型语言则更利于快速开发和部署。 - 脚本语言作为一种特殊的解释型语言,广泛应用于Web开发等领域。 - Java语言通过编译成字节码再解释执行的方式,实现了良好的跨平台兼容性和高效性。

    Python教程 Python教程

    本教程从编程语言的基础概念入手,详细介绍了编程语言的分类、编译型语言与解释型语言的区别及其各自的特点。Python作为一种解释型语言,以其灵活性、易学性和广泛的应用场景而备受青睐。了解这些基础知识有助于更好...

    高级语言运行机制.pdf

    本篇内容主要探讨了高级语言的运行机制,特别是编译型语言和解释型语言的区别,以及Java程序的运行机制和Java虚拟机(JVM)的角色。 首先,让我们来看看编译型语言。编译型语言如C++和C#,其源代码在运行之前需要...

    Visual Basic程序反编译

    现代编程语言可以分为两大类:解释型语言和编译型语言。这两种类型的语言在执行方式上有本质的区别。 - **解释型语言**:这类语言的程序代码在执行时由解释器逐行读取并立即执行,无需预先编译成机器码。这种方式...

    程序设计语言编译原理

    中间代码使得编译器能在不同平台上生成高效代码,同时也为解释型语言提供了基础。 5. **优化**:编译器会尝试改进源代码的结构,以生成运行更快的目标代码。这可能包括删除冗余计算、代码重构、循环展开等。掌握...

    cpp-Los是一个cc语言编译型的虚拟机

    cpp-Los,全称为Los,是一款专为C/C++语言设计的编译型虚拟机。它结合了现代编程语言的强大功能与虚拟机的高效执行能力,旨在提供一个高性能、灵活且易于扩展的运行环境。本文将详细探讨Los的架构、工作原理及其在C/...

    编译原理期中测试

    编译程序的工作情况有三种:汇编型、解释型和编译型。汇编型编译程序用来 将汇编语言编写的程序,按照一一对应的关系,转换成用机器语言表示的程序。 解释型编译程序将高级语言程序的一个语句,先解释成为一组机器...

Global site tag (gtag.js) - Google Analytics