美文网首页
解释型语言和编译型语言的区别

解释型语言和编译型语言的区别

作者: 丶Em1tu0F | 来源:发表于2020-01-07 14:09 被阅读0次

转载自:解释型语言和编译型语言的区别

解释型语言和编译型语言的区别

首先,我们编程都是用的高级语言(写汇编和机器语言的大牛们除外),计算机不能直接理解高级语言,只能理解和运行机器语言,所以必须要把高级语言翻译成机器语言,计算机才能运行高级语言所编写的程序。

说到翻译,其实翻译的方式有两种,一个是编译,一个是解释。两种方式只是翻译的时间不同

用编译型语言写的程序执行之前,需要一个专门的编译过程,通过编译系统(不仅仅只是通过编译器,编译器只是编译系统的一部分)把高级语言翻译成机器语言(具体翻译过程可以参看下图),把源高级程序编译成为机器语言文件,比如windows下的exe文件。以后就可以直接运行而不需要编译了,因为翻译只做了一次,运行时不需要翻译,所以编译型语言的程序执行效率高,但也不能一概而论,部分解释型语言的解释器通过在运行时动态优化代码,甚至能够使解释型语言的性能超过编译型语言

一个完整的编译系统与 一个用C编写的程序hello.c的编译过程

解释则不同,解释型语言编写的程序不需要编译。解释型语言在运行的时候才翻译,比如VB语言,在执行的时候,专门有一个解释器能够将VB语言翻译成机器语言,每个语句都是执行的时候才翻译。这样解释型语言每执行一次就要翻译一次,效率比较低。

编译型与解释型,两者各有利弊。前者由于程序执行速度快,同等条件下对系统要求较低,因此像开发操作系统、大型应用程序、数据库系统等时都采用它,像C/C++、Pascal/Object Pascal(Delphi)等都是编译语言,而一些网页脚本、服务器脚本及辅助开发接口这样的对速度要求不高、对不同系统平台间的兼容性有一定要求的程序则通常使用解释性语言,如JavaScript、VBScript、Perl、Python、Ruby、MATLAB 等等。

但随着硬件的升级和设计思想的变革,编译型和解释型语言越来越笼统,主要体现在一些新兴的高级语言上,而解释型语言的自身特点也使得编译器厂商愿意花费更多成本来优化解释器,解释型语言性能超过编译型语言也是必然的。

说到这里,我们有必要说一下java与C#。

JAVA语言是一种编译型-解释型语言,同时具备编译特性和解释特性(其实,确切的说java就是解释型语言,其所谓的编译过程只是将.java文件编程成平台无关的字节码.class文件,并不是向C一样编译成可执行的机器语言,在此请读者注意Java中所谓的“编译”和传统的“编译”的区别)。作为编译型语言,JAVA程序要被统一编译成字节码文件——文件后缀是class。此种文件在java中又称为类文件。java类文件不能再计算机上直接执行,它需要被java虚拟机翻译成本地的机器码后才能执行,而java虚拟机的翻译过程则是解释性的。java字节码文件首先被加载到计算机内存中,然后读出一条指令,翻译一条指令,执行一条指令,该过程被称为java语言的解释执行,是由java虚拟机完成的。而在现实中,java开发工具JDK提供了两个很重要的命令来完成上面的编译和解释(翻译)过程。两个命令分别是javac.exe和java.exe,前者加载java类文件,并逐步对字节码文件进行编译,而另一个命令则对应了java语言的解释(java.exe)过程。在次序上,java语言是要先进行编译的过程,接着解释执行。

C#语言是编译型语言,但其“编译”过程比较特殊,具体说明如下:

  • C#程序在第一次运行的时候,会依赖其.NET Frameworker平台,编译成IL中间码),然后由JIT compiler翻译成本地的机器码执行。从第二次在运行相同的程序,则不需要再执行以上编译和翻译过程,而是直接运行第一次翻译成的机器码。所以对于C#来说,通常第一次运行时间会很长,但从第二次开始,程序的执行时间会快很多。
  • 那么,C#为什么要进行两次“编译”呢?其实,微软想通过动态编译(由JIT compiler工具实现)来实现其程序运行的最优化。如果代码在运行前进行动态编译运行,那么JIT compiler可以很智能的根据你本地机器的硬件条件来进行优化,比如使用更好的register,机器指令等等,而不是像原来那样,build一份程序针对所有硬件的机器跑,没有充分利用各个机器的条件。

另外,还有我们经常用到的脚本语言,比如JavaScript、Shell等语言都是脚本语言,本质上来说,脚本语言就是解释型语言。

相关文章

  • 解释型语言和编译型语言的区别

    转载自:解释型语言和编译型语言的区别 解释型语言和编译型语言的区别 首先,我们编程都是用的高级语言(写汇编和机器语...

  • 【扩展3】解释型语言和编译型语言

      主要参考文章:【解释型语言和编译型语言的区别】(CSDN)  原文链接:https://blog.csdn.n...

  • Python简介

    python是简单的、免费的(BSD)、面向对象的、可读性非常强、交互式的解释型语言 编译型语言和解释型语言的区别...

  • JavaScript编译原理与内存管理

    编译原理 编译还是解释? 编程语言分为编译型语言和解释型语言两种,编译型语言的源代码在执行之前要进行完全编译,例如...

  • Linux 第三天

    Linux 第三天 Linux 第三天 解释型语言和编译型语言 解释型:(解释型语言有:php javascrip...

  • V8 工作原理

    编译器和解释器 按语言的执行流程,可以把语言划分为编译型语言和解释型语言。 编译型语言在程序执行之前,需要经过编译...

  • 编译型语言和解释型语言

    编译型语言和解释型语言是相对存在的。 编译型语言: 与汇编语言类似,编译型语言的首先将源代码编译生成机器语言,再由...

  • C++ 的变量规范

    解释语言和编译型的语言有什么区别 解释型语言使用解释器。解释器直接读取脚本文件,并执行指定的操作 计算机执行脚本,...

  • 解释型语言和编译型语言的区别

    原文转自:http://blog.csdn.net/zhu_xun/article/details/1692141...

  • 编程语言

    编译型语言和解释型语言 高级语言—>机器语言(必须经过翻译)翻译的方式有两种:编译和解释 编译型语言是把代码直接翻...

网友评论

      本文标题:解释型语言和编译型语言的区别

      本文链接:https://www.haomeiwen.com/subject/pdmractx.html