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

问题: 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和敏捷开发风行之际)打造出的好的框架。

静态语言与动态语言从语言特征到运行环境都在逐渐融合。

程序员应该与程序语言一样,既要有自己的专长,又要向通用化和全能化发展。

编程语言惯例用法、哲学理念和编程范式形成了语言的编程风格。

javapython区别最全整理终极收藏_Perl、PHP、Python、Java 和 Ruby 比较【转载+整理】...相关推荐

  1. 最全:mac设置环境变量(Python/ Java/ Mysql/Allure)

    每次需要在mac上设置环境变量时,总是要重新上网搜索该怎么设置,而且只依葫芦画瓢,没搞懂每个步骤,今天痛定思痛,一定要搞清楚,一劳永逸.好,我们开始 为什么要设置环境变量? 背景 在cmd中想要执行n ...

  2. MySql常用知识归纳整理(收藏)

    MySql常用知识归纳整理(收藏) 一.连接与退出 二.导入导出--推荐Navicat For Mysql 三.修改密码与增加用户权限 四.结构化查询语言 一.DDL:数据定义语言 二.DML: 数据 ...

  3. 计算机网络(非常全,建议收藏)

    计算机网络(非常全,建议收藏) 一.计算机网络概述 1)网络的基本功能.硬(软)件系统构成 2)网络的分类.网络的拓扑结构 3)计算机网络的性能指标(需掌握) 4)计算机网络协议,接口服务的概念 5) ...

  4. 跨行合并居中html标记语言,[前端Web]HTML语法最全解-建议收藏

    原标题:[前端Web]HTML语法最全解-建议收藏 1. 标签全解 1.1 文件标记 作用:文档声明标签.定义该文档是html5的文档,位于标签前面 详解: HTML总共有很多的版本,那么浏览器怎么知 ...

  5. 台式计算机的配置清单(硬件和软件),计算机硬件配置清单大 全!值得收藏哦

    计算机硬件配置清单大 全!值得收藏哦 发布时间:2017-10-25 10:02 来源:互联网 当前栏目:电脑技巧 计算机是我们生活中非常重要的电子产品,在现代生活中,我们完全离不开它们,无论是学习和 ...

  6. 重磅:服务器基础知识全解终极版(145页PPT)

    重磅:服务器基础知识全解终极版(145页PPT) 2020-12-26   阅 1  转 19 终极版来啦,本文内容共145页PPT干货,针对历史发布内容在CPU.内存.GPU.硬盘.网卡等9个章节做 ...

  7. 全麦吐司和普通吐司的区别_全麦面包和白面包的区别是什么

    全麦面包和白面包的区别是什么?最近美国<发现>月刊网站刊发了一项来自以色列的魏茨曼科学研究所的研究,该研究通过对比食用或全麦面包对短期健康影响,发现和全麦面包之间不存在临床上显著意义的区别 ...

  8. lisp 焊接符号标注_机械制图焊缝标注方法!太全了,收藏了

    原标题:机械制图焊缝标注方法!太全了,收藏了 1.焊缝标注方法 图样上焊缝有两种表示方法,即符号法和图示法. 焊缝标注以符号标注法为主,在必要时允许辅以图示法.比如用连续或断续的粗线表示连续或断续焊缝 ...

  9. 最值得收藏的 数字图像处理 全部知识点思维导图整理(武汉大学慕课课程)(持续更新中)

    本文的思维导图根据慕课上的武汉大学数字图像处理国家精品课程整理而来并标记出重点内容 思维导图就整理了这么多,之后应该也不会更新此内容了, 有需要的可以去 我的主页 了解更多学科的精品思维导图整理 本文 ...

最新文章

  1. ue4商城资源 Car Configurator Template 汽车配置器模板
  2. java 7 g1_java7中G1垃圾收集器使用和流程总结
  3. idea普通java项目引入lombok_Intellij IDEA 安装lombok及使用详解
  4. 卫星导航技术的源起很有戏剧性
  5. Netiler 开发规范
  6. java switch原则_Java switch case语句
  7. oracle的sql的语法解析,oracle SQL解析步骤小结
  8. 如何用VC 2005打开VC 2008的工程
  9. 【交换安全】DAI - Dynamic ARP Inspection 详解
  10. 产品画的Axure原型图打不开解决办法
  11. TWS耳机什么值得买?入耳式蓝牙耳机排行榜10强!
  12. 想减肥就要管住嘴,怎么管?这个方法可以
  13. 互联网圈子,黄进磊竟然把它解释的如此霸气!
  14. 运维网络基础知识思维导图
  15. 【问题】Ucinet密度分析结果一直是1.000
  16. mysql注入时的注释处理
  17. c2-00支持java_双卡超长待机 经典实用诺基亚C2-00图赏
  18. Python编程之四书五经
  19. Java笔记013-IDEA、包、访问修饰符、封装、继承、多态、Super、方法重写/覆盖(override)、java的动态绑定机制
  20. sun公司:太阳的升起与衰落

热门文章

  1. python打印数字0-100
  2. UTF8文件带BOM引起的问题——iOS端竟然加载出了html代码
  3. 双谱线插值与三谱线插值FFT的MATLAB实现
  4. sonix c语言 pdf,sonix c语言编程教程1.ppt
  5. 十大典型个人网站成功真实案例
  6. Spring Data Neumann RC2, Moore SR7, and Lovelace SR17
  7. Lightwave 3D 8 Cartoon Character Creation, Volume 2: Rigging Animation
  8. 网页加载卡通人物cavas方式实现
  9. 当《五十度灰》在软件定义存储的世界里上演
  10. DP问题从入门到精通2.2(线性DP,最短编辑距离)