shell脚本-解释型语言与编译型语言的差异

来源:互联网 发布:宽带 网络电视 编辑:程序博客网 时间:2024/04/28 19:46

        以Java、各种脚本语言为代表的解释性语言和以C、C++为代表的编译型语言同时存在了很长一段时间,并且这种情况还会继续下去。“存在即合理”,所以这两种类型的语言在不同的应用场合下发挥着自己的特长,以满足用户的需求。

        解释型语言的特点是在目标系统中需要有一个解释器,用户所编写的程序或脚本是一行一行被解释器读入,由解释器负责执行的。这就是说用户所编写的程序或脚本只需要能让解释器“看懂”就可以了(换句话说就是与操作系统没什么关系)。当解释器被移植到多个平台(硬件+操作系统)时,用户的脚本也就同时被移植过去了(其实还有工作要做,不过大部分工作已经被搞定)。目前大红大紫的Java就是特点最为鲜明的解释型语言。当然,运行在Unix/Linux中的Shell脚本也是这种解释型语言。Shell脚本本质上就是文本文件,用任意的文本编辑器都能够打开。Java语言也需要经过编译,不过其编译的主要的目的是生成解释器能够看懂的“脚本”,并进行优化。

 

        编译型语言的特点是程序编写完毕后,需要经历一个编译的过程,生成在目标系统(硬件+操作系统)能够直接执行的2进制文件,即可执行程序或各种库。这种2进制文件是由对应硬件平台的机器码组成的,可以理解为由一堆0和1组成的,人类无法用眼睛看明白的(传说中有可以直接看懂机器码的牛人,不过我没见过),普通的文本编辑器无法打开的奇怪的文件。不过幸好,当硬件平台和操作系统两方面合起来,目标平台就可以理解有这堆2机制代码背后隐含的用户意图。

 

        从通常意义上说,编译型语言由于与硬件平台(主要是指令系统)结合度高,因此拥有很高的效率(编译器也功不可没)。而解释型语言拥有的特有的灵活性,可以在复杂的应用环境之间轻快的跳转。

        实际上,随着CPU频率的不断提升和硬件对解释型语言的优化支持,效率问题也不是那么严重了。而不少开源工程中,对不同的CPU架构都有相应的支持,只要通过简单的编译配置,就可以生成不同目标平台的可执行程序和库,因此移植方面的问题也没想象中那么严重了。

 

        关于解释型语言好还是编译型语言好这个无聊的问题争论了很久。语言只是个工具,物尽其用,各取所长就可以了。没有一类或一种语言可以统一整个业界,现在没有,将来也不会有。

 

原创粉丝点击