更新时间:2022-08-25 12:15
解释型语言,是在运行的时候将程序翻译成机器语言。
计算机不能直接理解任何除机器语言以外的语言,所以必须要把程序员所写的程序语言翻译成机器语言,计算机才能执行程序。将其他语言翻译成机器语言的工具,被称为编译器。
编译器翻译的方式有两种:一个是编译,一个是解释。两种方式之间的区别在于翻译时间点的不同。当编译器以解释方式运行的时候,也称之为解释器。
解释性语言编写的程序不进行预先编译,以文本方式存储程序代码。在发布程序时,看起来省了道编译工序。但是,在运行程序的时候,解释性语言必须先解释再运行。比如解释性Basic语言,其专用的解释器在执行Basic程序时,会逐条读取解释每个语句,这个其实就是一个编译过程,然后再执行。一般来说,现有的解释性语言都是采用的逐行解释一句,执行一句这样的方式来构建的。这样解释性语言每执行一次就要翻译一次,效率比较低。
没有任何资料能够说明,哪种编程语言是解释性语言的鼻祖。但,就仍然在使用的解释性语言中,追其历史,最“古老”的无异于MATLAB,它在1984年出生。
在数学建模领域,MATLAB的出现,让很多数学研究得到大力的推进。而,它的流行,也正得益于它的解释性。因为,在数学相关研究中,研究者们需要不断改变计算方法和计算参数值,然后直观地看到这些改变对“所研究系统”的影响。而,计算方法正是计算机语言必须要写入程序代码一个必要因素,计算方法的更改意味着程序的重新构建。这意味着花费时间和等待,所以,80年代,如果希望使用计算机来模拟一个虚拟系统进行研究,那么研究者们的选择只有:自己实现或者构建一个团队来实现。MATLAB采用类似C语言的高级语言语法,可以使用简单的英语语法,容易阅读,加上它的解释性可以及时映射计算方法结果,这让专业领域内的研究者,从烦人的计算机语言中脱离出来,而只需要关心自身的领域的内容。
互联网时代的到来,也离不开解释性语言:HTML、XML和Javascript。可以说,HTML开启互联网时代,XML和Javascript推动互联网疯狂发展。Ajax技术的出现,当然也依赖于解释性语言的解释特性。
在HTML流行后,越来越多的解释性语言被构建出来,大有取代编译性语言的趋势,如Python、Ruby等等。
编译型与解释型,两者各有利弊。前者由于程序执行速度快,同等条件下对系统要求较低,因此像开发操作系统、大型应用程序、数据库系统等时都采用它,像C/C++、Pascal/Object Pascal(Delphi)等都是编译语言,而一些网页脚本、服务器脚本及辅助开发接口这样的对速度要求不高、对不同系统平台间的兼容性有一定要求的程序则通常使用解释性语言,如JavaScript、VBScript、Perl、Python、Ruby、MATLAB 等等。
但随着硬件的升级和设计思想的变革,编译型和解释型语言越来越笼统,主要体现在一些新兴的高级语言上,而解释型语言的自身特点也使得编译器厂商愿意花费更多成本来优化解释器,解释型语言性能超过编译型语言也是必然的。
解释性语言,如Java,往往会有较慢的运行速度,有时需要C++等语言的3倍。
和编译性语言的区别
计算机不能直接理解高级语言,只能直接理解机器语言,所以必须要把高级语言翻译成机器语言,计算机才能执行高级语言编写的程序。
翻译的方式有两种,一个是编译,一个是解释。两种方式只是翻译的时间不同。编译型语言写的程序执行之前,需要一个专门的编译过程,把程序编译成为机器语言的文件,比如exe文件,以后要运行的话就不用重新翻译了,直接使用编译的结果就行了(exe文件),因为翻译只做了一次,运行时不需要翻译,所以编译型语言的程序执行效率高,但也不能一概而论,部分解释型语言的解释器通过在运行时动态优化代码,甚至能够使解释型语言的性能超过编译型语言。
解释则不同,解释性语言的程序不需要编译,省了道工序,解释性语言在运行程序的时候才翻译,比如解释性basic语言,专门有一个解释器能够直接执行basic程序,每个语句都是执行的时候才翻译。这样解释性语言每执行一次就要翻译一次,效率比较低。解释是一句一句的翻译。
编译型与解释型,两者各有利弊。前者由于程序执行速度快,同等条件下对系统要求较低,因此像开发操作系统、大型应用程序、数据库系统等时都采用它,像C/C++、Pascal/Object Pascal(Delphi)等都是编译语言,而一些网页脚本、服务器脚本及辅助开发接口这样的对速度要求不高、对不同系统平台间的兼容性有一定要求的程序则通常使用解释性语言,如Java、JavaScript、VBScript、Perl、Python、Ruby、MATLAB 等等。
但随着硬件的升级和设计思想的变革,编译型和解释型语言越来越笼统,主要体现在一些新兴的高级语言上,而解释型语言的自身特点也使得编译器厂商愿意花费更多成本来优化解释器,解释型语言性能超过编译型语言也是必然的。