《Perl、PHP、Python、Java和Ruby的比较》由会员分享,可在线阅读,更多相关《Perl、PHP、Python、Java和Ruby的比较(7页珍藏版)》请在金锄头文库上搜索。
1、Perl、PHP、Python、Java 和 Ruby 的比较 语言的发展趋势一定是动静结合、刚柔并济 Perl 凝练晦涩,Python 优雅明晰,Ruby 精巧灵动,PHP 简明单纯 或许优雅正是来自对细节和规范的重视 (RoR)与 Ruby 结合之后,便如一只猱身而上灵猫,立刻衬托出Java 和.NET 大象般的身影提问 Perl、Python、Ruby 和 PHP 各自有何特点? 为什么动态语言多作为轻量级的解决方案? LAMP 为什么受欢迎? Ruby on Rails 为什么会流行? 编程语言的发展趋势是什么? 讲解“剩下四种动态语言,我们将之归为后台脚本语言。”冒号说着画了张图表引
2、号听得仔细:“我记得您开始是把这些语言划分为C 族静态语言、非 C 族静态语言和动态语言三类的。”冒号解释:“那是按语法来划分的,偏重理论;现在是按应用来划分,偏重实践。”句号旋即联想到:“这种分法貌似三层架构前言对应表现层;平言和后台脚本语言对应业务逻辑层;系统语言对应数据层。”“的确有几分神似,但千万不可混淆。”冒号提醒道,“三层架构(three-layer architecture)是模块设计上的逻辑划分1;而这里是按语言应用范围进行的物理划分 与用户交互的是前言,与机器交互的是系统语言,介于其中的为前台提供服务同时又需要底层系统服务的是后言。”逗号询问:“后言又细分成平言与后台脚本语言
3、?”“这是基于程序(program)与脚本(script)、静态与动态而分的。”冒号进行说明,“其实 Perl,PHP,Python 和 Ruby 都有自己的虚拟机(virtual machine),从这种意义上说它们也可作为平言。但在实际应用中,它们没有Java 平台和.NET 平台那种整合凝聚力和核心作用,通常作为轻量级的解决方案。”问号想探个究竟:“这是由于它们都是动态语言的缘故吗?”冒号回答:“理论上动态语言同样能承担大型应用,但实践上它们多作为粘合语言或用 于中小型应用。用句时髦的话来形容,暂时还是主流的配角或非主流的主角。毕竟在运行效 率、类型安全、可用资源、开发工具、技术支持等方
4、面,它们与Java、C#相比尚有一定差 距。另外它们同属草根语言,虽有开源社区的大力支持,在影响力上与后者未可同日而语。”叹号揣测:“说不定在不久的将来,动态语言也会成为主流的主角。”“世易时移,殊难逆料。但有一点可以肯定,语言的发展趋势一定是动静结合、刚柔 并济。”冒号断言,“一方面以 Java 和 C#为代表的静态语言中嫁接了动态语言的枝条;另一方面以 Java 和.NET 为代表的平台与动态语言的交壤地带也在逐步扩大。比如 JRuby 允许Ruby 与 Java 之间互相调用,类似的还有Jython、IronRuby、IronPython 等等。此外值得一提的是,动态语言最活跃的舞台当数
5、LAMP,L-A-M-P。”引号接茬:“L 是 Linux,A 是 Apache,M 是 MySQL,P 是 PHP。这四大组件形成了一个完整的开源网络开发平台。”冒号补充道:“P 也可指Perl、Python,甚至Ruby。” 逗号调侃:“可惜Ruby 的R比P多了一根尾巴。”“有人为了自圆其说,干脆让P 表示Programming language,这下所有语言都囊括其中了。老外就喜欢玩这种首字母缩略(acronym)的文字游戏,尤其 LAMP 正好还有灯的含义,寓意开源世界的一盏明灯,他们一定更得意了。”冒号语带调笑,“前面我们曾提及,网络应用是生长动态语言最肥沃的土壤,而LAMP 就是
6、这块土壤上搭建的平台。作为网络平台,LAMP 以其开放灵活、开发迅速、部署方便、高可配置、安全可靠、成本低廉等特色而与 Java 平台和.NET 平台鼎足三分,尤其受中小企业的欢迎。LAMP 中 Linux 是操作系统, Apache 是 Web 服务器,MySQL 是数据库系统,而我们当下最关心的是P 族语言:PHP、Perl、Python 还有 Ruby。”问号建议:“作为动态语言,它们的共性上节课已经谈了不少,能说说它们的个性吗?”“它们的个性极为鲜明:Perl 凝练晦涩,Python 优雅明晰,Ruby 精巧灵动,PHP 简明单纯。先看老大哥Perl,它博采众家之长,综合了C 语言的结
7、构、sed 的正则表达式、AWK 的关联数组(associative array)、Lisp 的表(list)和 Unix Shell 的命令,此外还有借鉴了一种语言,你们知道是哪种吗?”冒号忽然卖了个关子。逗号猜想:“应该是某种OOP 语言吧。”“Perl 中确有不少C+的影子,但它的对象模型在5.0 以后才引入,典型的半路出家, 远不如前面的特征那么自然。与其说是一种自然而然的发展,不如说是在 OOP 潮流裹挟下的一种身不由己的迎合。真正深入骨髓的借鉴是自然语言。”冒号给出了答案,“我们提过, Perl 的发明者Larry Wall 是一名语言学家,他认为程序语言应该与自然语言一样,简洁自
8、然、易读易写、表达多样、不拘一格。Perl 还有不少的格言或哲学,使得编程语言一改严谨刻板的面孔,散发出浓郁的人文气息。”叹号幽了一默:“我见过Perl 的代码,人文气息没闻出来,但我怀疑有乙醚气息 看一会就觉得晕晕乎乎的。”众人大笑。“有人仅用一行Perl 代码就实现了RSA 算法,你看了那还不得当场晕倒啊?”冒号打趣道,“Perl 的各种魔符好似一把把锋利的剪刀,做起文本裁剪之类的工作来游刃有余。这是它最大的长处,当初Perl 就是Wall 用来做Unix 系统管理的,以后在CGI 上的广泛应用也得益于此。这也赋予Perl 极强的粘合力,因而有internet 上的胶带(duct tape
9、)2 的说法。它又号称瑞士军刀,精练而复杂,实用而强大。但 Perl 过于灵活自由,缺乏规范, 影响了程序的可读性、一致性、整洁性和可维护性。不熟悉该语言的固然如读天书,熟悉语 言而不熟悉问题的也颇费思量。相比之下 Python 被认为是Perl 有力的挑战者,不仅在于它天然的OO 设计和丰富的类库,更重要的是它对程序员友好度大大超过Perl。Python 也有一系列的被称为禅(Zen)的哲学,不少与Perl 是针锋相对的。比如:Perl 认为做一件事可以有多种方法,而 Python 认为一件事应该最好只有一种方法;Perl 追求语言的表现力,Python追求简单优雅;Perl 喜欢隐性暗示,
10、Python 强调显性明示;Perl 强调紧凑,Python 强调松散; Perl 的语法和语义丰富,Python 的语法和语义简单而类库丰富。或许 Python 最让人不习惯的是它对空白符敏感性。”引号感到惊奇:“对空白符敏感?这个倒真怪异。”冒号见惯不怪:“虽然有点违反习惯,但非常符合Python 一贯的规范简洁的风格 一方面从语法上保证了良好的编码风格;另一方面,每个代码块不再需要起始的大括号或begin/end 之类的,减少了的代码行数。顺便插一句,另外一种优雅的语言Haskell 同样对空白符敏感,或许优雅正是来自对细节和规范的重视吧。此外许多人抱怨Python 中的自引用 self
11、 太多,殊不知这也是它倡导显式表达的一种体现。总的看来,Python 主要的问题还是在性能效率上不尽如人意。”叹号好奇地问:“Ruby 怎么样?据说它将取代Java。”“不要轻言取代二字。”冒号规诫道,“Java 没有取代C+,也不会被 Ruby 取代, 至多只是一种再分配。不过Ruby 的确是门很可爱的语言,兼具Perl 的表现力和Python 的可读性。Ruby 背后最具特色的理念是:关注程序员使用语言时的感受超过语言本身的功能。通俗地说,兵器的称手比锋利更重要;文雅地说,应给予程序员更多的人文关怀。就拿代码块(block)和迭代器(iterator)来说,虽然均非 Ruby 首创,但其语
12、法最为赏心悦目。类似的例子比比皆是。Ruby 的元编程能力特别强,也是它高度灵活的一种体现,但并不是所有人都喜欢这种风格。Ruby 的主要弱点有两个:一个与Python 类似,在性能上还有待提高;另 一个是它的线程由用户空间(user space)而不是内核空间(kernel space)来管理3,不能充分利用多核或多CPU。真正让Ruby 变得炙手可热的是web 应用框架 Ruby on Rails(RoR) 的成功,它们还催生了Java 平台上的Groovy 语言和Groovy on Grails 框架。RoR 奉行的CoC(Convention over Configuration)和
13、DRY(Dont repeat yourself )原则以及MVC 架构看似了无新意,但与Ruby 结合之后,便如一只猱身而上灵猫,立刻衬托出Java 和.NET 大象般的身影。”逗号有些怀疑:“框架竟然捧红了语言,框架真有这么重要吗?”“如果web 应用中动态页面较少或业务逻辑不复杂,框架的价值并不大。以前 CGI 编程就是往Perl 之类的代码中嵌入HTML 代码,如同Java 中的Servlet;PHP 则单纯地在HTML 代码中插入PHP 代码,如同早期的JSP。没有MVC,也不管什么三层架构,更没有ORM。但是”冒号拖了个转折音,“一旦业务逻辑变得复杂,开发人员增多,手工作坊式编程开
14、始捉襟见肘,引入框架这个流水生产线来提高生产力便是大势所趋。”句号不解:“我想Perl、Python 和 PHP 一定也有不少框架,Java 中的框架更是泛滥成灾,何以独独 RoR 脱颖而出?”冒号作出分析:“正值web2.0 和敏捷开发(agile development)的概念流行之际,RoR 将 AJAX 与Ruby 组合在一起成为绝佳的回应。以前各种 web 应用框架是不少,但在 RoR 之前轻量级套餐式解决方案并不多。Perl 中的Catalyst、Python 中的Pylon还有PHP中的CakePHP 等应是效仿之作。因此RoR 出现的时机可说是不早不晚,正当其时。此外,Perl
15、 和PHP 由于过于流行,反而有不少的历史包袱,人们习惯了将表示逻辑和业务逻辑编织在一起。至于Java 企业解决方案,框架太多,搭配组合更多,增加了选择的难度。即使采用最常见的轻量级 SSH(Struts+Spring+Hibernate)组合,维护起来也比 RoR 繁杂得多。”叹号愈发担忧:“听这意思,Java 还是危险啊!”“言之过早。”冒号不以为然,“首先 RoR 还有待进一步检验,目前无论是应用广度还是深度上尚无法与Java 相提并论;其次Java 在性能、安全等方面还是有不少优势,而这些对于大型和关键性的应用来说尤为重要。即使在中小型web 应用中,RoR 较之PHP 还远为不及。”问号接下话题:“PHP 为何如此流行?”“因为它简单、专一。”冒号答得很干脆,“与 Python 和Ruby 一开始就定位通用语言不同,PHP 是专为网络而生的。同早期的Perl 相似,PHP 起初主要起文本过滤器的作用,只不过 Perl 多处理文件流(file stream),而PHP 多处理套接字流(socket stream)。PHP 的语法简单,且为网络应用度身定造,受到网络开发人员的追捧当在情理之中。它虽很实用很流行,但并不完美。比如:变量名大小写敏感而函数名大小写不敏感;函数命名规则不一致; 不支持namespace 和 unicod