Perl、PHP、Python、Java 和 Ruby 比较【转载+整理】

从本文的内容上,写的时间比较早,并且有些术语我认为也不太准,有点口语化,可是意思到了。程序员

问题:web

    • Perl、Python、Ruby 和 PHP 各自有何特色?正则表达式

    • 为何动态语言多做为轻量级的解决方案?算法

    • LAMP 为何受欢迎?数据库

    • Ruby on Rails 为何会流行?编程

    • 编程语言的发展趋势是什么?数组

       

      “剩下四种动态语言,咱们将之归为后台脚本语言。”冒号说着,画了张图表——安全

      未命名_副本

      引号听得仔细,说:“我记得你以前把这些语言划分为 C 族静态语言、非 C 族静态语言和动态语言三类的。”服务器

      冒号解释:“那是按语法来划分的,偏重理论;如今是按应用来划分,偏重实践。”网络

      句号马上联想到:“这种分法貌似三层架构——前台语言对应表现层;平台语言和后台脚本语言对应业务逻辑层;系统语言对应数据层。”

      “的确有几分神似,但千万不能混淆。”冒号提醒道,“三层架构是模块设计上的逻辑划分;而这里是按语言应用范围进行的物理划分——与用户交互的是前台语言,与机器交互的是系统语言,介于其中的为前台提供服务同时又须要底层系统服务的是后台语言。”

      逗号,询问:“后台语言,又细分红平台语言与后台脚本语言?”

      “这是基于程序与脚本、静态与动态而分的。”冒号说明,“其实 Perl,PHP,Python 和 Ruby 都有本身的虚拟机,从这种意义上,它们也可做为平台语言。但在实际应用中,它们没有 Java 平台和 .NET 平台那种整合凝聚力和核心做用,一般做为轻量级的解决方案。”

      问号,想探个究竟:“这是因为它们都是动态语言的缘故吗?”

      冒号,回答:“理论上动态语言一样能承担大型应用,但实践上它们多做为“胶水”语言或用于中小型应用。用句时髦的话来形容,暂时仍是主流的配角或非主流的主角。毕竟在运行效率、类型安全、可用资源、开发工具、技术支持等方面,与 Java、C# 相比尚有必定差距。另外它们同属‘草根’语言,虽有开源社区的大力支持,在影响力上与后者不可同日而语。”

      叹号,揣测:“说不定,在不久未来,动态语言也会成为主流的。”

      “世易时移,殊难逆料。但有一点能够确定,语言的发展趋势必定是动静结合、刚柔并济。”冒号断言,“一方面,以 Java 和 C# 为表明的静态语言中嫁接了动态语言的枝条;另外一方面,以 Java 和 .NET 为表明的平台与动态语言的交壤地带也在逐步扩大。好比,JRuby 容许 Ruby 与 Java 之间互相调用,还有 Jython、IronRuby、IronPython 等。值得一提的是,动态语言最活跃的舞台当数 LAMP,L-A-M-P。”

      引号,接过话茬:“L 是 Linux,A 是 Apache,M 是 MySQL,P 是 PHP。这四大组件造成了一个完整的开源网络开发平台。”

      冒号,补充道:“P 也可指 Perl、Python,甚至 Ruby。”

      逗号,调侃:“惋惜 Ruby 的‘R’比‘P’多了一根尾巴。”

      “有人为了自圆其说,干脆让 P 表示‘Programming language’,这下全部语言都囊括其中了。老外就喜欢玩这种首字母缩写的文字游戏,尤为是 LAMP 正好还有‘灯’的含义,寓意开源世界是一盏明灯,他们必定更得意了。”冒号边说边笑道,“前面咱们曾说起,网络应用是生长动态语言最肥沃的土壤,而 LAMP 就是这块土壤上搭建的平台。做为网络平台,LAMP 以其开放灵活、开发迅速、部署方便、高可配置、安全可靠、成本低廉等优点而与 Java 平台和 .NET 平台三足鼎立,特别受中小企业的欢迎。LAMP 中,Linux 是操做系统,Apache 是 Web 服务器,MySQL 是数据库系统,而咱们当下最关心的是‘P 族语言’:PHP、Perl、Python 还有 Ruby。”

      问号,建议:“做为动态语言,它们的共性上面已经谈了很多,能说说它们的个性吗?”

      “它们的个性极为鲜明:Perl 凝练晦涩,Python 优雅明晰,Ruby 精巧灵动,PHP 简明单纯。先看老大哥 Perl,它博采众家之长,综合了 C 语言的结构、sed 的正则表达式、AWK 的关联数组(associative array)、Lisp 的表(list)和 Unix Shell 的命令,此外,它还借鉴了一种语言,大家知道是哪一种吗?”冒号突然卖起了个关子。

      逗号,猜测:“应该是某种 OOP 语言吧。”

      “Perl 中确有很多 C++ 的影子,但它的对象模型在 5.0 之后才引入,典型的半路出家,远不如前面的特征那么天然。与其说是一种天然而然的发展,不如说是在 OOP 潮流裹挟下的一种身不禁己的迎合。真正深刻骨髓的借鉴是天然语言。”冒号,给出了答案,“咱们提过,Perl 发明者 Larry Wall 是一名语言学家,他认为程序语言应该与天然语言同样,简洁天然、易读易写、表达多样、不拘一格。Perl 还有很多的格言或哲学,使得编程语言一改严谨刻板的面孔,散发出浓郁的人文气息。”

      叹号幽了一默:“我见过 Perl 代码,人文气息没闻出来,但我怀疑有乙醚气息——看一会就以为晕晕乎乎的。”

      众人大笑……

      “有人仅用一行 Perl 代码就实现了 RSA 算法,你看了那还不得当场晕倒啊?”冒号打趣道,“Perl 各类魔符好似一把锋利的剪刀,作起文本裁剪之类的工做游刃有余。这是它最大的长处,当初 Perl 就是 Wall 用来作 Unix 系统管理的,之后在 CGI 上的普遍应用也得益于此。这也赋予 Perl 极强的粘协力,于是有‘internet上的胶带(duct tape)’的说法。它又号称瑞士军刀,精练而复杂,实用而强大。但Perl过于灵活自由,缺少规范,影响了程序的可读性、一致性、整洁性和可维护性。不熟悉该语言的当然如读天书,熟悉语言而不熟悉问题的也颇费思量。相比之下,Python 被认为是 Perl 有力的挑战者,不只在于它自然的 OO 设计和丰富的类库,更重要的是它的友好度大大超过 Perl。Python 也有一系列的被称为禅(Zen)的哲学,很多与 Perl 针锋相对。好比,Perl 认为作一件事能够有多种方法,而 Python 认为一件事应该最好只有一种方法;Perl 追求语言的表现力,Python 追求简单优雅;Perl 喜欢隐性暗示,Python 强调显性明示;Perl 强调紧凑,Python 强调松散;Perl 语法和语义丰富,Python 语法和语义简单,类库丰富。或许 Python 最让人不习惯的是它对空白符敏感性。”

      引号,感到惊奇:“对空白符敏感?这个倒真怪异。”

      冒号,见怪不怪:“虽然有点违反习惯,但很是符合 Python 一向的规范简洁的风格——一方面,从语法上,保证了良好的编码风格;另外一方面,每一个代码块再也不须要起始的大括号或 begin/end 之类,减小了的代码行数。顺便提一句,另一种优雅的语言 Haskell 一样对空白符敏感,或许优雅正是来自对细节和规范的重视吧。此外,许多人抱怨 Python 中的自引用 self 太多,却不知这也是它倡导显式表达的一种体现。总的看来,Python 主要的问题仍是在性能效率上不尽如人意。”

      叹号,好奇地问:“Ruby 怎么样?听说它将取代 Java。”

      “不要轻言‘取代’二字。”冒号说道,“Java 没有取代 C++,也不会被 Ruby 取代,顶可能是再分配。不过 Ruby 的确是门很可爱的语言,兼具 Perl 的表现力和 Python 的可读性。Ruby 背后最具特点的理念是:关注程序员使用语言时的感觉超过语言自己的功能。通俗地说,上手的兵器比锋利更重要;文雅地说,应给予程序员更多的人文关怀。拿代码块(block)和迭代器(iterator)来讲,虽然这不是 Ruby 独创,但其语法最为赏心悦目。Ruby 元编程能力特别强,也是它高度灵活的一种体现,但并非全部人都喜欢这种风格。Ruby 主要弱点有两个:一个与 Python 相似,在性能上还有待提升;另外一个是它的线程由用户空间(user space),而不是内核空间(kernel space)来管理,不能充分利用多核或多 CPU。真正让 Ruby 变得煊赫一时的是 Web 应用框架 Ruby on Rails(RoR)的成功,它们还催生了 Java 平台上的 Groovy 语言和 Groovy on Grails 框架。RoR 奉行的 CoC(Convention over Configuration)和 DRY(Don’t repeat yourself )原则以及 MVC 架构看似了无新意,但与 Ruby 结合以后,便如一只猱身而上灵猫,马上陪衬出 Java 和 .NET 大象般的身影。”

      逗号,有些怀疑:“框架居然捧红了语言,框架真有这么重要吗?”

      “若是 Web 应用中动态页面较少或业务逻辑不复杂,框架的价值并不大。之前 CGI 编程就是往 Perl 之类的代码中嵌入HTML代码,如同 Java 中的 Servlet;PHP 则单纯地在 HTML 代码中插入 PHP 代码,如同早期的 JSP。没有 MVC,也无论什么三层架构,更没有 ORM。可是——”冒号拖了个转折音,“一旦业务逻辑变得复杂,开发人员增多,手工做坊式编程开始捉襟见肘,引入框架这个流水生产线来提升生产力即是大势所趋。”

      句号,不解:“我想 Perl、Python 和 PHP  必定也有很多框架,Java中的框架更是泛滥成灾,何以独独 RoR 脱颖而出?”

      冒号,分析道:“正值 Web 2.0 和敏捷开发的概念流行之际,RoR 将 AJAX 与 Ruby 组合在一块儿成为绝佳的回应。之前各类 Web 应用框架是很多,但在 RoR 以前轻量级套餐式解决方案并很少。Perl 中 Catalyst、Python 中 Pylon,还有 PHP 中 CakePHP 等应是效仿之做。所以,RoR 出现的时机可说正当其时。此外,Perl 和 PHP 因为过于流行,反而有很多的历史包袱,人们习惯了将表示逻辑和业务逻辑编织在一块儿。至于 Java 企业解决方案,框架太多,搭配组合更多,增长了选择的难度。即便采用最多见的轻量级 SSH(Struts+Spring+Hibernate)组合,维护起来也比 RoR 繁杂得多。”

      叹号,愈发担心:“听这意思,Java 仍是危险啊!”

      “言之过早。”冒号不觉得然,“首先,RoR 还有待进一步检验,目前不管是应用广度仍是深度上尚没法与 Java 相提并论;其次,Java 在性能、安全等方面仍是有很多优点,而这些对于大型和关键性的应用来讲尤其重要。即便在中小型 Web 应用中,RoR 较之 PHP 还远为不及。”

      问号接下话题:“PHP为什么如此流行?”

      “由于它简单、专注。”冒号答得很干脆,“与 Python 和 Ruby 一开始就定位通用语言不一样,PHP 是专为网络而生的。同早期的 Perl 类似,PHP 起初主要起文本过滤器的做用,只不过 Perl 多处理文件流,而 PHP 多处理套接字流。PHP 语法简单,为网络应用度身定造,受到网络开发人员的追捧当在情理之中。它虽很实用很流行,但并不完美。好比,变量名大小写敏感,而函数名大小写不敏感;函数命名规则不一致;不支持 namespace 和 unicode;与 Perl 同样,它的对象模型不是先天的,直到 PHP 5 才真正完善;对线程支持不足;相比 Perl、Python 和 Ruby,它的功能稍显单薄等等。”

      引号,忽然想起:“我记得你之前提到,PHP 还能用于桌面应用。”

      “不只 PHP,Perl、Python 还有 Ruby,都能做为前台语言来开发命令行或图形界面的应用。一样地,VB、Delphi 和 JavaScript 也能做为后台语言。现代的程序语言既有本身的专长,又向通用化和全能化发展,以争取更多的生存空间。试想一下,现代的程序员又未尝不是如此呢?”言及于此,冒号收住话题,“语言简评告一段落,还有很多既有趣又有用的语言,在此就不一一评说了。咱们看到,每种编程语言都有其独特的惯例用法和哲学理念,它们与编程范式一道造成了语言的编程风格。体悟愈深者编程语感愈强,思惟与语言愈交融无碍,渐从必然王国走向自由王国。”

      逗号,满怀憧憬:“那是否是一种人剑合一的境界?”

      “或许人器合一更准确吧,程序员可不能只会一种兵器哟。”冒号故意抠他的字眼,“如今请你们每人写一句对本节课的感言。”

      众人沉思片刻,齐齐挥笔而就——

      • 叹号——没有最好的语言,只有最合适的语言。
      • 逗号——没有糟糕的语言,只有糟糕的程序员。
      • 问号——没有一种语言是万能的,只会一种语言是万万不能的。
      • 引号——废除对语言的宗教信仰,创建对语言的哲学思惟。
      • 句号——编程就是在人脑和电脑之间寻找最佳平衡点的过程。

      冒号读罢大悦,顺手一掌拍出五记马屁:“精彩之极!可谓字字珠玑、句句联璧啊。兹决定,给诸位的奖赏是——立时下课!”

      众人欣然领赏而去。

      总结

      • 比起 Java 平台和 .NET 平台,动态语言轻便灵活、开发效率高,但整合凝聚力不够,在运行效率、类型安全、可用资源、开发工具、技术支持以及影响力等方面也有必定差距,故一般做为轻量级的解决方案。
      • LAMP 是由 Linux、Apache、MySQL 和包括 PHP、Perl、Python 或 Ruby 在内的脚本语言组成的网络开发平台,具备开放灵活、开发迅速、部署方便、高可配置、安全可靠、成本低廉等优势。
      • Perl 精练、复杂、强大、灵活、自由、隐晦、表现力强,但规范性、可读性、一致性、整洁性和可维护性较差。
      • Python 优雅规范、简洁明晰、易学易用、类库丰富,但效率稍差,有些人不喜欢它对空白符敏感的特性。
      • Ruby 语法精巧、高度灵活,兼具 Perl 的表现力和 Python 的可读性,尤为注重程序员的感觉,但其性能和线程模型尚有待改进。
      • PHP 简单、专注、实用、流行,在但相比其余三种语言,在语法和功能上稍有欠缺。
      • RoR 是一种轻量级套餐式的web应用解决方案,是由好的设计(MVC架构和CoC、DRY原则)加上好的语言(Ruby)在好的时机(Web2.0和敏捷开发风行之际)打造出的好的框架。
      • 静态语言与动态语言从语言特征到运行环境都在逐渐融合。
      • 程序员应该与程序语言同样,既要有本身的专长,又要向通用化和全能化发展。
      • 编程语言惯例用法、哲学理念和编程范式造成了语言的编程风格。
      相关文章
      相关标签/搜索