概念:
编程语言可以被简单分为编译型语言、解释型语言和虚拟机语言。 编译型语言直接被编译成本地机器代码,比如C、C++。 解释型语言是通过解释器执行,比如javascript、shell、python等。 虚拟机语言运行在虚拟机上,需要被编译成虚拟机代码,由虚拟机执行,比如java。
编译型语言:把做好的源程序全部编译成二进制代码的可运行程序,然后直接运行程序。
解释型语言:把做好的源程序翻译一句,然后执行一句,直至结束。
区别:
编译型语言:执行速度快、效率高;依赖编译器、跨平台性较差。如C、C++、Delphi、Pascal,Fortran。
解释型语言:执行速度慢、效率低;依赖解释器、跨平台性好。如javascript、shell、python。
>>> 通俗来讲,编译语言在编译后可以直接运行,而解释语言的执行需要一个解释环境。
>>> java很特殊,java程序也需要编译,但是没有直接编译称为机器语言,而是编译称为字节码,然后用解释方式执行字节码。
** 如何理解计算机语言?**
计算机不能直接理解高级语言,只能直接理解机器语言,所以必须要把高级语言翻译成机器语言,计算机才能执行高级语言编写程序。
翻译的方式有两种,一种是编译,第二种是解释。两种方式不同点在于翻译的时间不同。
编译型语言写的程序执行之前,需要一个专门的编译过程,先用把程序编译成为机器语言的文件,比如exe文件,以后要运行的话就无需重新翻译,可以直接使用编译的结果(exe文件),因为整个过程中编译和翻译只进行了一次,运行时不需要翻译,所以编译型语言的程序执行效率高。
解释型语言则不同,解释性语言的程序不需要编译,省了道工序,解释性语言在运行程序的时候才需要翻译,比如解释性basic语言,专门有一个解释器能够直接执行basic程序,每个语句都是执行的时候才翻译。这样解释性语言每执行一次就要翻译一次,效率比较低。
**编译型语言和解释型语言孰更优?**
编译型与解释型,两者各有利弊。
编译语言由于程序执行速度快,同等条件下对系统要求较低,因此像开发操作系统、大型应用程序、数据库系统等时都采用编译型语言,如:C/C++、Pascal/Object
而一些网页脚本、服务器脚本及辅助开发接口这样的对速度要求不高、对不同系统平台间的兼容性有一定要求的程序则通常使用解释性语言,如JavaScript、VBScript、Perl、Python、Ruby、MATLAB等等。
但java又很特殊,java程序也需要编译,但是没有直接编译称为机器语言,而是编译称为字节码,然后用解释方式执行字节码。
**进一步理解计算机语言**
随着硬件的升级和设计思想的变革,编译型和解释型语言越来越笼统,主要体现在一些新兴的高级语言上,而解释型语言的自身特点也使得编译器厂商愿意花费更多成本来优化解释器,解释型语言性能超过编译型语言也是必然的。
在具体计算机上实现一种语言,首先要确定的是表示该语言语义解释的虚拟计算机,一个关键的问题是程序执行时的基本表示是实际计算机上的机器语言还是虚拟机的机器语言。这个问题决定了语言的实现。根据这个问题的回答,可以将程序设计语言划分为两大类:编译型语言和解释型语言。
编译型语言:
编译是指在应用源程序执行之前,就将程序源代码“翻译”成目标代码(机器语言),因此其目标程序可以脱离其语言环境独立执行,使用比较方便、效率 较高。但应用程序一旦需要修改,必须先修改源代码,再重新编译生成新的目标文件(*.OBJ)才能执行,只有目标文件而没有源代码,修改很不方便。
现在大多数的编程语言是编译型的。编译程序将源程序翻译成目标程序后保存在另一个文件中,该目标程序可脱离编译程序直接在计算机上多次运行。大多数软件产品都是以目标程序形式发行给用户的,不仅便于直接运行,同时又使他人难于盗用其中的技术C、C++、Fortran、VisualFoxpro、Pascal、Delphi、Ada都是编译实现的。
解释型语言:
解释型语言的实现中,翻译器并不产生目标机器代码,而是产生易于执行的中间代码,这种中间代码与机器代码是不同的,中间代码的解释是由软件支持的,不能直接使用硬件,软件解释器通常会导致执行效率较低。用解释型语言编写的程序是由另一个可以理解中间代码的解释程序执行的。与编译程序不同的是,解释程序的任务是逐一将源程序的语句解释成可执行的机器指令,不需要将源程序翻译成目标代码后再执行。释程序的优点是当语句出现语法错误时,可以立即引起程序员注意,而程序员在程序开发期间就能进行校正。对于解释型Basic语言,需要一个专门的解释器解释执行Basic程序,每条语言只有在执行才被翻译。这种解释型语言每执行一次就翻译一次,因而效率低下。一般地,动态语言都是解释型的,如Tcl、Perl、Ruby、VBScript、 JavaScript等。
混合型:
Java很特殊,Java程序也需要编译,但是没有直接编译称为机器语言,而是编译称为字节码,然后在Java虚拟机上用解释方式执行字节码。Python也采用了类似Java的编译模式,先将Python程序编译成Python字节码,然后由一个专门的Python字节码解释器负责解释执行字节码。(Java虚拟机对字节码的执行相当于模拟一个cpu,而ruby1.8–在虚拟机还未出现前–是通过解释成语法树执行。)








暂无数据