互联网技术日新月异,编程的语言层出不穷,原本稍微平静了几年的网络编程技术又不断出现新的东西,涤荡着整个网络世界,ruby,Python等技术使我 们原本比较老板的编程理念和概念产生了混淆和动荡。他们有什么区别和联系?怎么定义这些新生的事物?抹去额头因为生疏而津津的汗滴,从头Google一下 吧。
用户 |
前台语言:Visual Basic,Delphi,JavaScript |
平台语言:Java,C# 后台脚本语言:Perl,PHP,Python,Ruby |
系统语言:C,C++,D |
机器 |
按语言应用范围进行的物理划分
与用户交互的是前台语言,与机器交互的是系统语言,介于其中的为前台提供服务同时又需要底层系统服务的是后台语言。
其实Perl,PHP,Python和Ruby都有自己的虚拟机(virtual machine),从这种意义上说它们也可作为平台语言。但在实际应用中,它们没有Java平台和.NET平台那种整合凝聚力和核心作用,通常作为轻量级的解决方案。
理论上动态语言同样能承担大型应用,但实践上它们多作为粘合语言或用于中小型应用。用句时髦的话来形容,暂时还是主流的配角或非主流的主角。毕竟在运行效
率、类型安全、可用资源、开发工具、技术支持等方面,它们与Java、C#相比尚有一定差距。另外它们同属‘草根’语言,虽有开源社区的大力支持,在影响
力上与后者未可同日而语。
JSP
(JavaServer Pages)是由Sun
Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP技术是用JAVA语言作为脚本语言的,JSP网页为整个服务器端
的JAVA库单元提供了一个接口来服务于HTTP的应用程序。
在传统的网页HTML文件(*.htm,*.html)中加入Java程序片段(Scriptlet)和JSP标记(tag),就构成了JSP网页
(*.jsp)。基于J2EE平台的网络框架是大中型企业的最佳选择。java的稳定性业界有目共睹。java的强大的网络处理能力是它最坚硬的基石。
其优点表现为:
·对于用户界面的更新,其实就是由 Web Server进行的,所以给人的感觉更新很快。
·所有的应用都是基于服务器的,所以它们可以时刻保持最新版本。
·客户端的接口不是很繁琐,对于各种应用易于部署、维护和修改。
Python
首先就以语法而论,python没有perl的灵活紧凑。只能说是中庸,感觉和basic,pascal,java差不多。他可以编写运行在操作
系统的应用程序,可以编写web代码,它是一种胶水语言能嵌入到C++中,这一点在游戏开发中引用最广,大家知道C++是做网络游戏的首选,是当前做游戏
最广泛的。而Python在处理游戏特效等很迅速。Python的语法非常严格以至于业界描述它为一种清晰语言,这和perl正好背到相驰。一方面从语法
上保证了良好的编码风格;另一方面,每个代码块不再需要起始的大括号或begin/end之类的,减少了的代码行数。顺便插一句,另外一种优雅的语言
Haskell同样对空白符敏感,或许优雅正是来自对细节和规范的重视吧。此外许多人抱怨Python中的自引用self太多,殊不知这也是它倡导显式表
达的一种体现。总的看来,Python主要的问题还是在性能效率上不尽如人意,有待改进。
Python在编程领域的占有率一直处于稳步上升之中,根据最新的数据,Python排名第六。前五名分别是Java、C、PHP、C++ 和
VB。著名的搜索引擎 Google
也大量使用Python。更加令人吃惊的是,在Nokia智能手机所采用的Symbian操作系统上,Python成为继C++,Java之后的第三个编
程语言!2006年的Google编程大赛已经将Python作为参赛语言之一,可见Python的影响力之巨大。
Ruby
Ruby是面向对象的编程语言,是脚本语言和PHP一样。她追求的是“简便快捷的面向对象编程”。Ruby是解释型语言,因此不需编译即可快捷地
编程。同时Ruby具有类似
Perl的强大的文本处理功能,她可并不只是个玩具,您可以用她来进行实用的编程。此外,您还可以很方便地使用C语言来扩展Ruby的功能,因此可以把她
当作各种库的前端来使用。若您曾经“想要一种简单的面向对象的语言”,或者认为“Perl的功能虽然好用,但它的语法真让人受不了”,又或者觉得
“lisp系列语言的思想不错,但到处都是括号真让人讨厌,最起码算式应该按照通常的样式书写”。那么,Ruby或许能让您满意。
归纳以来,Ruby有以下优点:
解释器
Ruby是解释型语言,其程序无需编译即可轻松执行。
变量无类型
Ruby的变量没有类型,因此不必为静态的类型匹配而烦恼。相应地,错误检查功能也变弱了。
不需要变量声明
所有变量均无需声明即可立即使用。另外,从变量名即可判断出是何种变量(局部变量,全局变量,实例变量)。
语法简单
语法比较简单,类似Algol系语法。
不需要内存管理
具有垃圾回收(Garbage Collect,GC)功能,能自动回收不再使用的对象。
一切都是对象
Ruby从一开始就被设计成纯粹的面向对象语言,因此以整数等基本数据类型为首的所有东西都是对象,它们都有发送信息的统一接口。
类,继承,方法
Ruby当然具有面向对象语言的基本功能。
特殊方法可向某对象添加方法。例如,可以把GUI按钮被按下时的动作作为方法记述下来,还可以用它来进行原型库(prototypebase)的面向对象编程(有人这么干吧)。
用模块进行混合插入(Mixin)
Ruby故意舍弃了多重继承,但拥有混合插入功能。使用模块来超越类的界限来共享数据和方法等。
迭代器
该功能可以将循环抽象化。
闭包
可以将某过程片段对象化。对象化后的该过程片段就称作闭包。
功能强大的字符串操作/正则表达式
以Perl为样板创造出了功能强大的字符串操作和正则表达式检索功能。
拥有超长整数
添加超长整数功能后,可以计算非常大的整数。例如计算400的阶乘也轻而易举。
具有错误处理功能
错误处理功能可以使您编写代码处理出错情况。
可以直接访问OS
Ruby可以使用(UNIX的)绝大部分的系统调用。单独使用Ruby也可以进行系统编程。
动态加载
若OS支持的话,可以在运行时读入对象文件。
但Ruby也有下列缺点。
Ruby On Rails,优点是不像Struts那样需要大量的配置文件,一切都采取默认的配置,包括访问路径,uri等,而这也是它的缺点,不能灵活的配置。
总结就是ruby很适合做中小型web工程。他和jsp(J2EE)并不冲突,一个是低端的一个是高端的。而造成冲突的是PHP,不过php易
学、免费、经过了很多年的考验很稳定,LAMP几近经典,是大中小型企业乐于选择的,是当前用的最多的脚本语言,Google、腾讯、网易等等大型网络集
团都是使用的php这样也给那些小的企业了信心,特别是Linux集群技术的流行使得PHP更加不易受到ruby的冲击。但是不容小觑。潜力非常巨大。
RERL
perl和java是一样的。
第一. Perl强大的正则表示式(regular
expression)比对以及字符串操作使这个工作变得简单而没有其它语言能相比。Perl非常擅长于切割,扭转,绞,弄平,总结,以及其它的操作文字
文件。生物资料大部分是文字文件:物种名称,种属关系,基因或序列的注解,评住,目录查阅,甚至DNA序列也是类文字的。现在互相交换以以文字文件的形式
存在的但是具有不兼容的资料格式生物信息资料是一个很头疼的问题,perl的这个方面的优点,可以在这一方面解决不少问题.
第二.
Perl能容错。生物资料通常是不完全的,错误或者说误差从数据的产生时候可能就产生了.另外生物数据的某项值栏位可以被忽略,可能是空着的,或是某个栏
位也就是某个值,被预期要出现好几次(举例来说,一个实验可能被重复的操作),或是资料以手动输入所以有错误。Perl并不介意某个值是空的或是有奇怪的
字符。正规表示式能够被写成取出并且更正错误的一般错误。当然这种弹性也可能是各坏处。
还有,Perl 是组件导向的。Perl 鼓励人们将他们的软件写成小模组,不论是用 Perl 函式库模组或是正统的
Unix工具导向的方式。外部程序能够轻易的被整合进 Perl
程序,靠着管道(pipe),系统呼叫,或是插座(socket)。Perl5引进的动态载入器允许人们使用C
的函式,或者让整个编程过的函式库,被使用在
Perl直译器中。最近的成果是世界各地的智能结晶都会收录在一组模组里面,称为”bioPerl”(请参考 Perl Journal)
Perl 很容易去写并且能很快开发完。直译器让你不需要宣告你所有的函数型式以及资料型态,当未定义的函式被呼叫时只会引起一个错误,除错器也能与Emacs很好的合作并且让你能用令人舒服的交谈式的开发模式。
Perl是良好的原型语言。因为它快而且脏(quick and dirty),用
Perl建构新演算的原型比直接写成一个快的需要编程过的语言来的有意义。有时候发现结果是Perl已经够快了,所以程序变不需要移植;更多情形是某人可
以用C写一个小的核心程序,编程成动态载入的模组或是外部的可执行程序,然后其它的部分用Perl来完成。这部分的例子可以参考
http://waldo.wi.mit.edu/ftp/distribution/software/rhmapper/ )。
有一点要强调的是, Perl 在写作网页 CGI
方面非常优秀,而且重要性随着各实验将资料发表在网络上之后更是增加。我在基因中心环境下使用Perl 的经验从头到尾都是值得称赞的。然而我发现
Perl也有它的问题。它的松散的程序风格导致许多错误,这些在其它严格的语言都会被抓到。举例来说,Perl让你在一个变数在被指定值之前就能使用,这
是个很有用的特性当你需要的时候,但是却是一个灾难当你单纯的打错了辨识名称。同样的,很容易忘记要宣告一个函式里面的区域变数,导致不小心地改到了全域
变数。 最后,Perl 的不足之处在于建立图形化的使用者接口。虽然
Unix忠实信徒所有事情都能在命令模式下完成,大多数的终端使用者却不同意。视窗,选单,弹跳的图案已经变成了必要的时尚。
直到最近,直到最近,Perl 的使用者界面(GUI)发展仍是不成熟的。然而 Nick Ing-Simmons的努力使得
perlTK(pTK)的整合使得以Perl 驱动的使用者接口在 X-window上面成为可能。我的伙伴和我曾经在 MIT 基因中心写过几个
pTK为基础的应用程序供互连网使用者,而且从头到尾都是一个令人满意的经验。其它的基因中心则更大规模的使用
pTK,在某些地方已经成为主要的生产力。
简要总结:
比起Java平台和.NET平台,动态语言轻便灵活、开发效率高,但整合凝聚力还不够,在运行效率、类型安全、可用资源、开发工具、技术支持以及影响力等方面也有一定差距,故通常作为轻量级的解决方案。
LAMP是由Linux、Apache、MySQL和包括PHP、Perl、Python或Ruby在内的脚本语言组成的网络开发平台,具有开放灵活、开发迅速、部署方便、高可配置、安全可靠、成本低廉等优点。
Perl精练、复杂、强大、灵活、自由、隐晦、表现力强,但规范性、可读性、一致性、整洁性和可维护性较差。
Python优雅规范、简洁明晰、易学易用、类库丰富,有些人不喜欢它对空白符敏感的特性。
Ruby语法精巧、高度灵活,兼具Perl的表现力和Python的可读性,尤其注重程序员的感受,但其性能和线程模型尚有待改进。
PHP简单、专一、实用、流行,在但相比其他三种语言,在语法和功能上稍有欠缺。
总结
比起Java平台和.NET平台,动态语言轻便灵活、开发效率高,但整合凝聚力还不够,在运行效率、类型安全、可用资源、开发工具、技术支持以及影响力等方面也有一定差距,故通常作为轻量级的解决方案。
LAMP是由Linux、Apache、MySQL和包括PHP、Perl、Python或Ruby在内的脚本语言组成的网络开发平台,具有开放灵活、开发迅速、部署方便、高可配置、安全可靠、成本低廉等优点。
Perl精练、复杂、强大、灵活、自由、隐晦、表现力强,但规范性、可读性、一致性、整洁性和可维护性较差。
Python优雅规范、简洁明晰、易学易用、类库丰富,但效率稍差,有些人不喜欢它对空白符敏感的特性。
Ruby语法精巧、高度灵活,兼具Perl的表现力和Python的可读性,尤其注重程序员的感受,但其性能和线程模型尚有待改进。
PHP简单、专一、实用、流行,在但相比其他三种语言,在语法和功能上稍有欠缺。
RoR是一种轻量级套餐式的web应用解决方案,是由好的设计(MVC架构和CoC、DRY原则)加上好的语言(Ruby)在好的时机(web2.0和敏捷开发风行之际)打造出的好的框架。
叹号——没有最好的语言,只有最合适的语言。
逗号——没有糟糕的语言,只有糟糕的程序员。
问号——没有一种语言是万能的,只会一种语言是万万不能的。
引号——废除对语言的宗教信仰,建立对语言的哲学思维。
句号——编程就是在人脑和电脑之间寻找最佳平衡点的过程。
程序员应该与程序语言一样,既要有自己的专长,又要向通用化和全能化发展。
编程语言惯例用法、哲学理念和编程范式形成了语言的编程风格。