对编译语言与脚本语言的理解

分享于:2019-01-22 15:32:11

网络编程语言可以分为这两大类:编译语言与脚本语言。编译语言常用的包括C/C++、java,脚本语言比较多,类如PHP、JavaScript、python、Linux的shell。


这两种类型语言有什么不同?关于这个话题初学者不需了解太深。


编译语言:程序员按照语言正确的语法,写出有一定功能的程序代码,然后编译成机器能看懂的二进制文件。编译后的文件无法以字符的形式打开文件,所以人眼看不懂,属于乱码的东西。但计算机能看懂,编译后的二进制文件可以点击运行,从而实现应有的功能。


脚本语言:程序员按照语言正确的语法,写出有一定功能的程序代码。不需要编译,使用语言解释器解读脚本语言,从而实现应有的功能。大部分脚本语言的解释器是由C/C++语言开发的。


两者区别:


1)从语法上,编译语言比脚本语言学习困难


编译语言,如C/C++是低级语言;脚本语言,如PHP是高级语言。何谓初级高级,这只是对人来说,编译语言是人干活多了计算机轻松了,所以是低级语言;脚本语言是人轻松了计算机干活多了,所以是高级语言。


编译语言所要掌握的语法多,理解困难,学习难度大,要站在计算机的角度解决问题。


脚本语言语法少,易学习,多站在人的角度解决问题,不需要了解复杂的计算机底层的东西。


同一功能,编译语言除了考虑逻辑问题外,还要考虑各种细节功能的具体实现。而脚本语言只需要考虑问题的逻辑关系,细节性的功能“解释器”可能有现成的实现方式,只需调用下即可以。


编译语言思考的多是数据处理效率问题,脚本语言思考的多是实际问题的逻辑处理方式。


2)从效率上,编译语言比脚本语言处理速度快


脚本语言需要有“解释器”解读,这个“解释器”是用编译语言(C/C++)开发的一个功能程序,“解释器”里预先写好了各种问题的处理方式(如脚本语言的函数、对象方法),用脚本语言写的代码等于是在写操作“解释器”完成某某工作的各种命令。


脚本语言效率差就差在了需要“翻译”脚本语言表达的不准确。脚本语言语法接近人的思维,编译语言接近计算机的思维。“解释器”为了能够理解脚本语言表达的意思,需要做大量的判断和其他操作,无形中牺牲很多执行效率。


完成一功能,用脚本语言向“解释器”发送命令,不如用编译语言专门写的程序运行效率高。


一个不恰当的例子就是,一篇文章有中英文两个版本,英语不好的同学看中文版的效率肯定高,看英文版的还需要逐句翻译会比较慢。中文就相当于“编译语言”,英文相当于“脚本语言”,而计算机就是“英语不好的同学”。


3)从开发速度上,脚本语言要比编译语言快


还是这句话:“编译语言是人干活多了计算机轻松了,脚本语言是人轻松了计算机干活多了。”脚本语言的解释器都已写好了各种功能,在脚本语言中调用相应的方法即可。同样功能的实现,编译语言需要写很多行代码,而脚本语言可能就只需一个函数就搞定。再加上脚本语言语法简单了很多,在开发效率上必然快很多。


4)从用途上,编译语言应用范围更广


就从Windows上说,桌面应用各种软件主要是用编译语言写的。比如QQ什么的,“.exe”文件都是编译后的程序,我们肯定看不到源代码。脚本语言主要是图开发快、方便,本质上它还是在操作编译语言(解释器)完成功能,可以说任何的程序都可以归宿到是用C语言开发的。


为了源码的泄露和安全,客户端软件是不会用脚本语言写的。大部分脚本语言在服务端执行,JavaScript脚本语言属于在客户端浏览器执行。


总结:


编译语言:开发困难,执行效率高。

脚本语言:提升了开发效率,牺牲了执行效率。


两种类型的语言,不是说哪个绝对好,哪个绝对不好,以场景而论。做游戏开发,首选编译语言的C/C++,因为它追求的是运行效率;做web开发,首选脚本语言的PHP,开发速度快,维护成本低,运行效率上可以忽略不计。做银行系统开发,首选编译语言的java,效率和安全比脚本语言高,开发速度上又比C快。


另外,一个语言是不是"脚本",我们不应该只是从语言角度去看待,应该要从运行所在的环境去区别。比如有能力的人可以写一个C语言的解释器,将它作为脚本语言来运行。也可以将JavaScript编译成机器代码生成可执行文件。


好像脚本语言的解释器都是用C/C++语言所写,java也可以用来写某一脚本语言的解释器。只是java本身也是有C语言写的,效率上java不如C。