解释型 编译型 语言

来源:互联网 发布:win 10简单编程 编辑:程序博客网 时间:2024/04/29 22:38
        计算机不能直接理解高级语言,只能直接理解机器语言,所以必须要把高级语言翻译成机器语言,计算机才能执行高级语言编写的程序。
  翻译的方式有两种,一个是编译,一个是解释。两种方式只是翻译的时间不同。编译型语言写的程序执行之前,需要一个专门的编译过程,把程序编译成为机器语言的文件,比如exe文件,以后要运行的话就不用重新翻译了,直接使用编译的结果就行了(exe文件),因为翻译只做了一次,运行时不需要翻译,所以编译型语言的程序执行效率高。
  解释则不同,解释性语言的程序不需要编译,省了道工序,解释性语言在运行程序的时候才翻译,比如解释性basic语言,专门有一个解释器能够直接执行basic程序,每个语句都是执行的时候才翻译。这样解释性语言每执行一次就要翻译一次,效率比较低。
  编译型与解释型,两者各有利弊。前者由于程序执行速度快,同等条件下对系统要求较低,因此像开发操作系统、大型应用程序、数据库系统等时都采用它,像C/C++、Pascal/Object Pascal(Delphi)、VB等基本都可视为编译语言,而一些网页脚本、服务器脚本及辅助开发接口这样的对速度要求不高、对不同系统平台间的兼容性有一定要求的程序则通常使用解释性语言,如Java、JavaScript、VBScript、Perl、Python、MATLAB 等等。

  但随着硬件的升级和设计思想的变革,编译型和解释型语言越来越笼统,主要体现在一些新兴的高级语言上。

----------------------------------------------------

以上来自 百度百科 说的比较准确, 解释型语言 C#和java有自己的运行时,他们第一次编译成执行文件时编译成字节码,一种中间语言, 对他反编译的到的结果和源代码还是比较相似的, 起码比编译型语言反编译后只能得到汇编代码还原度高的多, 不是说这有多好, 只是想说中间语言只是一个初步的编译,比脚本类运行的更加快速, 在他们运行的时候才进行完全的编译,编译成CPU指令。

解释型语言有他自己的好处,比如稳定性,健壮性更好, 异常处理更加完善,针对不同的CPU进行优化等等, 对于不同的系统使用同一个执行文件即可, 变得只是针对不同系统的运行环境虚拟机, 比如java程序运行于JVM, C#程序运行于CLR (应该是这么对应的吧, .Net Framework 就是运行框架了), 使得一次编译到处运行成为可能(相比编译型必须重新编译并针对系统提供的API修改而言,解释型使用标准类库开发就可以跨平台运行 前提是运行环境足够符合这门语言的标准, 不过也有类似wine的东西存在,使得编译型也可以直接跨平台运行 前提是足够完善的重新封装整个API。。)。

网上有说C#和Java是混合型的, 不过C++.Net 才是最混合的,因为有部分代码是完全编译的,而有部分代码是托管的解释型代码。。

那些脚本类的语言也被分为解释型,不过不完全相同, 他们没有C#和Java类似的第一次编译, 直接由他们的脚本引擎运行那些字符窜组成的代码,比如 JavaScript、VBScript

------------------------------------------------------

  针对每种作业系统、CPU,而提供并测试各自的编译版本,这种做法的可行性很小;开源软体则允许用户自己来编译目的码(object code),这样在跨平台方面更好一些。类似的,那些解释型语言,或者需要虚拟机的语言,也更加符合跨平台的要求,因为用户也要自己进行编译。Sun公司的Java虚拟机Hotspot,只针对几种而不是全部平台,提供编译好的二进位文件。例如,Sun对于GNU/Linux,只支持i386平台,但如果谁在PowerPC或者SPARC电脑上运行Linux,就只好自己编译本地的机器码(machinecode),或者使用第三方软体,才能运行Java程式。

        VB是解释型语言,但是不能跨平台……

------------------------------------------------------

定义:

    编译型语言(compiled language ):把做好的源程序全部编译成二进制代码的可运行程序。然后,可直接运行这个程序。

    解释型语言(interpreted Language ):把做好的源程序翻译一句,然后执行一句,直至结束!

区别:

    编译型语言,执行速度快、效率高;依赖编译器、跨平台性差些。

    解释型语言,执行速度慢、效率低;依赖解释器、跨平台性好。

    个人认为,java是解释型的语言,因为虽然java也需要编译,编译成.class文件,但是并不是机器可以识别的语言,而是字节码,最终还是需要jvm的解释,才能在各个平台执行,这同时也是java跨平台的原因。所以可是说java即是编译型的,也是解释型,但是如果非要归类的话,从概念上的定义,恐怕java应该归到解释型的语言中。

附:

编译型的语言包括:C、C++、Delphi、Pascal、Fortran

解释型的语言包括:Java、Basic、javascript
------------------------------------------------------

    在具体计算机上实现一种语言,首先要确定的是表示该语言语义解释的虚拟计算机,一个关键的问题是程序执行时的基本表示是实际计算机上的机器语言还是虚拟机的机器语言。这个问题决定了语言的实现。根据这个问题的回答,可以将程序设计语言划分为两大类:编译型语言和解释型语言。
编译型语言:
     编译是指在应用源程序执行之前,就将程序源代码“翻译”成目标代码(机器语言),因此其目标程序可以脱离其语言环境独立执行,使用比较方便、效率较高。但应用程序一旦需要修改,必须先修改源代码,再重新编译生成新的目标文件(* .OBJ)才能执行,只有目标文件而没有源代码,修改很不方便。现在大多数的编程语言都是编译型的。编译程序将源程序翻译成目标程序后保存在另一个文件中,该目标程序可脱离编译程序直接在计算机上多次运行。大多数软件产品都是以目标程序形式发行给用户的,不仅便于直接运行,同时又使他人难于盗用其中的技术C、C++、Fortran、Visual Foxpro、Pascal、Delphi、Ada都是编译实现的。
 
解释型语言:
     解释型语言的实现中,翻译器并不产生目标机器代码,而是产生易于执行的中间代码,这种中间代码与机器代码是不同的,中间代码的解释是由软件支持的,不能直接使用硬件,软件解释器通常会导致执行效率较低。用解释型语言编写的程序是由另一个可以理解中间代码的解释程序执行的。与编译程序不同的是,解释程序的任务是逐一将源程序的语句解释成可执行的机器指令,不需要将源程序翻译成目标代码后再执行。释程序的优点是当语句出现语法错误时,可以立即引起程序员注意,而程序员在程序开发期间就能进行校正。对于解释型Basic语言,需要一个专门的解释器解释执行 Basic程序,每条语言只有在执行才被翻译。这种解释型语言每执行一次就翻译一次,因而效率低下。一般地,动态语言都是解释型的,如Tcl、Perl、Ruby、VBScript、 JavaScript等。
混合型:
     Java很特殊,Java程序也需要编译,但是没有直接编译称为机器语言,而是编译称为字节码,然后在Java虚拟机上用解释方式执行字节码。Python 的也采用了类似Java的编译模式,先将Python程序编译成Python字节码,然后由一个专门的Python字节码解释器负责解释执行字节码。(Java虚拟机对字节码的执行相当于模拟一个cpu,而ruby1.8--在虚拟机还未出现前--是通过解释成语法树执行。)
原创粉丝点击