Perl、PHP磕道、Python供屉、Java和Ruby的比較【轉】

prel、php溺蕉、python伶丐、java和ruby的比較

提問

◆ Perl、Python疯特、Ruby和PHP各自有何特點?

◆ 為什么動態(tài)語言多作為輕量級的解決方案?

◆ LAMP為什么受歡迎?

◆ Ruby on Rails為什么會流行?

◆ 編程語言的發(fā)展趨勢是什么?

講解

“剩下四種動態(tài)語言哗魂,我們將之歸為后臺腳本語言±煅牛”冒號說著畫了張圖表——

引號聽得仔細:“我記得您開始是把這些語言劃分為C族靜態(tài)語言录别、非C族靜態(tài)語言和動態(tài)語言三類的×谕蹋”

冒號解釋:“那是按語法來劃分的组题,偏重理論;現(xiàn)在是按應用來劃分,偏重實踐抱冷〈蘖校”

句號旋即聯(lián)想到:“這種分法貌似三層架構——前臺語言對應表現(xiàn)層;平臺語言和后臺腳本語言對應業(yè)務邏輯層;系統(tǒng)語言對應數(shù)據(jù)層⊥冢”

“的確有幾分神似赵讯,但千萬不可混淆」⒚迹”冒號提醒道边翼,“三層架構(three-layer architecture)是模塊設計上的邏輯劃分[1];而這里是按語言應用范圍進行的物理劃分——與用戶交互的是前臺語言,與機器交互的是系統(tǒng)語言鸣剪,介于其中的為前臺提供服務同時又需要底層系統(tǒng)服務的是后臺語言组底。”

逗號詢問:“后臺語言又細分成平臺語言與后臺腳本語言?”

“這是基于程序(program)與腳本(script)西傀、靜態(tài)與動態(tài)而分的瑞筐『樘恚”冒號進行說明厦章,“其實Perl今野,PHP,Python和Ruby都有自己的虛擬機(virtual machine)饺鹃,從這種意義上說它們也可作為平臺語言莫秆。但在實際應用中间雀,它們沒有Java平臺和.NET平臺那種整合凝聚力和核心作用,通常作為輕量級的解決方案镊屎∪切”

問號想探個究竟:“這是由于它們都是動態(tài)語言的緣故嗎?”

冒號回答:“理論上動態(tài)語言同樣能承擔大型應用,但實踐上它們多作為粘合語言或用于中小型應用缝驳。用句時髦的話來形容连锯,暫時還是主流的配角或非主流的主角。畢竟在運行效率用狱、類型安全运怖、可用資源、開發(fā)工具夏伊、技術支持等方面摇展,它們與Java、C#相比尚有一定差距溺忧。另外它們同屬‘草根’語言咏连,雖有開源社區(qū)的大力支持,在影響力上與后者未可同日而語鲁森∷畹危”

嘆號揣測:“說不定在不久的將來,動態(tài)語言也會成為主流的主角刀森□馄簦”

“世易時移报账,殊難逆料研底。但有一點可以肯定,語言的發(fā)展趨勢一定是動靜結合透罢、剛柔并濟榜晦。”冒號斷言羽圃,“一方面以Java和C#為代表的靜態(tài)語言中嫁接了動態(tài)語言的枝條;另一方面以Java和.NET為代表的平臺與動態(tài)語言的交壤地帶也在逐步擴大乾胶。比如JRuby允許Ruby與Java之間互相調用,類似的還有Jython朽寞、IronRuby识窿、IronPython等等。此外值得一提的是脑融,動態(tài)語言最活躍的舞臺當數(shù)LAMP喻频,L-A-M-P≈庥”

引號接茬:“L是Linux甥温,A是Apache锻煌,M是MySQL,P是PHP姻蚓。這四大組件形成了一個完整的開源網(wǎng)絡開發(fā)平臺宋梧。”

冒號補充道:“P也可指Perl狰挡、Python捂龄,甚至Ruby〖尤”

逗號調侃:“可惜Ruby的‘R’比‘P’多了一根尾巴跺讯。”

“有人為了自圓其說殉农,干脆讓P表示‘Programming language’刀脏,這下所有語言都囊括其中了。老外就喜歡玩這種首字母縮略(acronym)的文字游戲超凳,尤其LAMP正好還有‘燈’的含義愈污,寓意開源世界的一盞明燈,他們一定更得意了轮傍≡荼ⅲ”冒號語帶調笑,“前面我們曾提及创夜,網(wǎng)絡應用是生長動態(tài)語言最肥沃的土壤杭跪,而LAMP就是這塊土壤上搭建的平臺。作為網(wǎng)絡平臺驰吓,LAMP以其開放靈活涧尿、開發(fā)迅速、部署方便檬贰、高可配置姑廉、安全可靠、成本低廉等特色而與Java平臺和.NET平臺鼎足三分翁涤,尤其受中小企業(yè)的歡迎桥言。LAMP中Linux是操作系統(tǒng),Apache是Web服務器葵礼,MySQL是數(shù)據(jù)庫系統(tǒng)号阿,而我們當下最關心的是‘P族語言’:PHP、Perl鸳粉、Python還有Ruby扔涧。”

問號建議:“作為動態(tài)語言赁严,它們的共性上節(jié)課已經(jīng)談了不少扰柠,能說說它們的個性嗎?”

“它們的個性極為鮮明:Perl凝練晦澀粉铐,Python優(yōu)雅明晰,Ruby精巧靈動卤档,PHP簡明單純蝙泼。先看老大哥Perl,它博采眾家之長劝枣,綜合了C語言的結構汤踏、sed的正則表達式、AWK的關聯(lián)數(shù)組(associative array)舔腾、Lisp的表(list)和Unix Shell的命令溪胶,此外還有借鑒了一種語言,你們知道是哪種嗎?”冒號忽然賣了個關子稳诚。

逗號猜想:“應該是某種OOP語言吧哗脖。”

“Perl中確有不少C++的影子扳还,但它的對象模型在5.0以后才引入才避,典型的半路出家,遠不如前面的特征那么自然氨距。與其說是一種自然而然的發(fā)展桑逝,不如說是在OOP潮流裹挾下的一種身不由己的迎合。真正深入骨髓的借鑒是自然語言俏让±愣簦”冒號給出了答案,“我們提過首昔,Perl的發(fā)明者Larry Wall是一名語言學家寡喝,他認為程序語言應該與自然語言一樣,簡潔自然沙廉、易讀易寫拘荡、表達多樣、不拘一格撬陵。Perl還有不少的格言或哲學,使得編程語言一改嚴謹刻板的面孔网缝,散發(fā)出濃郁的人文氣息巨税。”

嘆號幽了一默:“我見過Perl的代碼粉臊,人文氣息沒聞出來草添,但我懷疑有乙醚氣息——看一會就覺得暈暈乎乎的《笾伲”

眾人大笑远寸。

“有人僅用一行Perl代碼就實現(xiàn)了RSA算法抄淑,你看了那還不得當場暈倒啊?”冒號打趣道,“Perl的各種魔符好似一把把鋒利的剪刀驰后,做起文本裁剪之類的工作來游刃有余肆资。這是它最大的長處,當初Perl就是Wall用來做Unix系統(tǒng)管理的灶芝,以后在CGI上的廣泛應用也得益于此郑原。這也賦予Perl極強的粘合力,因而有‘internet上的膠帶(duct tape)[2]’的說法夜涕。它又號稱瑞士軍刀犯犁,精練而復雜,實用而強大女器。但Perl過于靈活自由酸役,缺乏規(guī)范,影響了程序的可讀性驾胆、一致性簇捍、整潔性和可維護性。不熟悉該語言的固然如讀天書俏拱,熟悉語言而不熟悉問題的也頗費思量暑塑。相比之下Python被認為是Perl有力的挑戰(zhàn)者,不僅在于它天然的OO設計和豐富的類庫锅必,更重要的是它對程序員友好度大大超過Perl事格。Python也有一系列的被稱為禪(Zen)的哲學,不少與Perl是針鋒相對的搞隐。比如:Perl認為做一件事可以有多種方法驹愚,而Python認為一件事應該最好只有一種方法;Perl追求語言的表現(xiàn)力,Python追求簡單優(yōu)雅;Perl喜歡隱性暗示劣纲,Python強調顯性明示;Perl強調緊湊逢捺,Python強調松散; Perl的語法和語義豐富,Python的語法和語義簡單而類庫豐富癞季〗偻或許Python最讓人不習慣的是它對空白符敏感性”疗猓”

引號感到驚奇:“對空白符敏感?這個倒真怪異志于。”

冒號見慣不怪:“雖然有點違反習慣废睦,但非常符合Python一貫的規(guī)范簡潔的風格——一方面從語法上保證了良好的編碼風格;另一方面伺绽,每個代碼塊不再需要起始的大括號或begin/end之類的,減少了的代碼行數(shù)。順便插一句奈应,另外一種優(yōu)雅的語言Haskell同樣對空白符敏感澜掩,或許優(yōu)雅正是來自對細節(jié)和規(guī)范的重視吧。此外許多人抱怨Python中的自引用self太多杖挣,殊不知這也是它倡導顯式表達的一種體現(xiàn)肩榕。總的看來程梦,Python主要的問題還是在性能效率上不盡如人意点把。”

嘆號好奇地問:“Ruby怎么樣?據(jù)說它將取代Java屿附±商樱”

“不要輕言‘取代’二字⊥Ψ荩”冒號規(guī)誡道褒翰,“Java沒有取代C++,也不會被Ruby取代匀泊,至多只是一種再分配优训。不過Ruby的確是門很可愛的語言,兼具Perl的表現(xiàn)力和Python的可讀性各聘。Ruby背后最具特色的理念是:關注程序員使用語言時的感受超過語言本身的功能揣非。通俗地說,兵器的稱手比鋒利更重要;文雅地說躲因,應給予程序員更多的人文關懷早敬。就拿代碼塊(block)和迭代器(iterator)來說,雖然均非Ruby首創(chuàng)大脉,但其語法最為賞心悅目搞监。類似的例子比比皆是。Ruby的元編程能力特別強镰矿,也是它高度靈活的一種體現(xiàn)琐驴,但并不是所有人都喜歡這種風格。Ruby的主要弱點有兩個:一個與Python類似秤标,在性能上還有待提高;另一個是它的線程由用戶空間(user space)而不是內核空間(kernel space)來管理[3]绝淡,不能充分利用多核或多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應用中動態(tài)頁面較少或業(yè)務邏輯不復雜,框架的價值并不大饶号。以前CGI編程就是往Perl之類的代碼中嵌入HTML代碼铁追,如同Java中的Servlet;PHP則單純地在HTML代碼中插入PHP代碼,如同早期的JSP茫船。沒有MVC琅束,也不管什么三層架構,更沒有ORM算谈。但是——”冒號拖了個轉折音涩禀,“一旦業(yè)務邏輯變得復雜,開發(fā)人員增多然眼,手工作坊式編程開始捉襟見肘艾船,引入框架這個流水生產(chǎn)線來提高生產(chǎn)力便是大勢所趨「呙浚”

句號不解:“我想Perl屿岂、Python和PHP一定也有不少框架,Java中的框架更是泛濫成災鲸匿,何以獨獨RoR脫穎而出?”

冒號作出分析:“正值web2.0和敏捷開發(fā)(agile development)的概念流行之際爷怀,RoR將AJAX與Ruby組合在一起成為絕佳的回應。以前各種web應用框架是不少带欢,但在RoR之前輕量級套餐式解決方案并不多运授。Perl中的Catalyst、Python中的Pylon還有PHP中的CakePHP等應是效仿之作洪囤。因此RoR出現(xiàn)的時機可說是不早不晚徒坡,正當其時。此外瘤缩,Perl和PHP由于過于流行喇完,反而有不少的歷史包袱,人們習慣了將表示邏輯和業(yè)務邏輯編織在一起剥啤。至于Java企業(yè)解決方案锦溪,框架太多,搭配組合更多府怯,增加了選擇的難度刻诊。即使采用最常見的輕量級SSH(Struts+Spring+Hibernate)組合,維護起來也比RoR繁雜得多牺丙≡蜓模”

嘆號愈發(fā)擔憂:“聽這意思复局,Java還是危險啊!”

“言之過早∷谂校”冒號不以為然亿昏,“首先RoR還有待進一步檢驗,目前無論是應用廣度還是深度上尚無法與Java相提并論;其次Java在性能档礁、安全等方面還是有不少優(yōu)勢角钩,而這些對于大型和關鍵性的應用來說尤為重要。即使在中小型web應用中呻澜,RoR較之PHP還遠為不及递礼。”

問號接下話題:“PHP為何如此流行?”

“因為它簡單羹幸、專一脊髓。”冒號答得很干脆睹欲,“與Python和Ruby一開始就定位通用語言不同供炼,PHP是專為網(wǎng)絡而生的。同早期的Perl相似窘疮,PHP起初主要起文本過濾器的作用袋哼,只不過Perl多處理文件流(file stream),而PHP多處理套接字流(socket stream)闸衫。PHP的語法簡單涛贯,且為網(wǎng)絡應用度身定造,受到網(wǎng)絡開發(fā)人員的追捧當在情理之中蔚出。它雖很實用很流行弟翘,但并不完美。比如:變量名大小寫敏感而函數(shù)名大小寫不敏感;函數(shù)命名規(guī)則不一致;不支持namespace和unicode[4];與Perl一樣骄酗,它的對象模型不是先天的稀余,直到PHP 5才真正完善;對線程支持不足;相比Perl、Python和Ruby趋翻,它的功能稍顯單薄等等睛琳。”

引號突然想起:“我記得您在第一堂課提到PHP還能用于桌面應用踏烙∈ζ”

“不僅PHP,Perl讨惩、Python還有Ruby辟癌,都能作為前臺語言來開發(fā)命令行或圖形界面的應用。同樣地荐捻,VB黍少、Delphi和JavaScript也能作為后臺語言」鸭校現(xiàn)代的程序語言既有自己的專長,又向通用化和全能化發(fā)展仍侥,以爭取更多的生存空間要出。試想一下鸳君,現(xiàn)代的程序員又何嘗不是如此呢?”言及于此农渊,冒號收住話題,“語言簡評告一段落或颊,還有不少既有趣又有用的語言砸紊,在此就不一一評說了。我們看到囱挑,每種編程語言都有其獨特的慣例用法和哲學理念醉顽,它們與編程范式一道形成了語言的編程風格。體悟愈深者編程語感愈強平挑,思維與語言愈交融無礙游添,漸從必然王國走向自由王國⊥ㄏǎ”

逗號滿懷憧憬:“那是不是一種人劍合一的境界?”

“或許人器合一更準確吧唆涝,程序員可不能只會一種兵器喲〈奖妫”冒號故意摳他的字眼廊酣,“現(xiàn)在請大家每人寫一句對本節(jié)課的感言∩兔叮”

眾人沉思片刻亡驰,齊齊揮筆而就——

嘆號——沒有最好的語言,只有最合適的語言饿幅。

逗號——沒有糟糕的語言凡辱,只有糟糕的程序員。

問號——沒有一種語言是萬能的栗恩,只會一種語言是萬萬不能的透乾。

引號——廢除對語言的宗教信仰,建立對語言的哲學思維摄凡。

句號——編程就是在人腦和電腦之間尋找最佳平衡點的過程续徽。

冒號讀罷大悅,順手一掌拍出五記馬屁:“精彩之極!可謂字字珠璣亲澡、句句聯(lián)璧啊钦扭。茲決定,給諸位的獎賞是——立時下課!”

眾人欣然領賞而去床绪。

插語

[1] 有兩種三層架構客情,一種是three-layer architecture其弊,一種是three-tier architecture。它們經(jīng)常換用膀斋,但其實是有分別的:前者僅僅在邏輯進行劃分梭伐,而后者在物理上也進行了劃分——不同層次的模塊運行在不同的主機上。

[2] 不少地方譯作‘輸送帶’仰担、‘傳送帶’糊识,因為duct有‘輸送管’、‘導管’之意摔蓝,于是想當然地認為這表明Perl在internet上起著輸送作用赂苗。殊不知‘duct type’專指一種萬能的粘性極強的膠帶,用以比喻Perl的粘合力贮尉。

[3] 這類線程被稱為綠色線程(green thread)拌滋,也稱偽線程。據(jù)稱Ruby2.0將支持原生線程(native thread)猜谚。

[4] PHP將在5.3.0支持namespace败砂,將在6.0支持unicode。

總結

◆ 比起Java平臺和.NET平臺魏铅,動態(tài)語言輕便靈活昌犹、開發(fā)效率高,但整合凝聚力還不夠沦零,在運行效率祭隔、類型安全、可用資源路操、開發(fā)工具疾渴、技術支持以及影響力等方面也有一定差距,故通常作為輕量級的解決方案屯仗。

◆ LAMP是由Linux搞坝、Apache、MySQL和包括PHP魁袜、Perl桩撮、Python或Ruby在內的腳本語言組成的網(wǎng)絡開發(fā)平臺,具有開放靈活峰弹、開發(fā)迅速店量、部署方便、高可配置鞠呈、安全可靠融师、成本低廉等優(yōu)點。

◆ Perl精練蚁吝、復雜旱爆、強大舀射、靈活、自由怀伦、隱晦脆烟、表現(xiàn)力強,但規(guī)范性房待、可讀性邢羔、一致性、整潔性和可維護性較差吴攒。

◆ Python優(yōu)雅規(guī)范张抄、簡潔明晰、易學易用洼怔、類庫豐富,但效率稍差左驾,有些人不喜歡它對空白符敏感的特性镣隶。

◆ Ruby語法精巧、高度靈活诡右,兼具Perl的表現(xiàn)力和Python的可讀性安岂,尤其注重程序員的感受,但其性能和線程模型尚有待改進帆吻。

◆ PHP簡單域那、專一、實用猜煮、流行次员,在但相比其他三種語言,在語法和功能上稍有欠缺王带。

◆ RoR是一種輕量級套餐式的web應用解決方案淑蔚,是由好的設計(MVC架構和CoC、DRY原則)加上好的語言(Ruby)在好的時機(web2.0和敏捷開發(fā)風行之際)打造出的好的框架愕撰。

◆ 靜態(tài)語言與動態(tài)語言從語言特征到運行環(huán)境都在逐漸融合刹衫。

◆ 程序員應該與程序語言一樣,既要有自己的專長搞挣,又要向通用化和全能化發(fā)展带迟。

◆ 編程語言慣例用法、哲學理念和編程范式形成了語言的編程風格囱桨。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市蝇摸,隨后出現(xiàn)的幾起案子婶肩,更是在濱河造成了極大的恐慌,老刑警劉巖律歼,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異险毁,居然都是意外死亡,警方通過查閱死者的電腦和手機畔况,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來跷跪,“玉大人,你說我怎么就攤上這事吵瞻「鸸剑” “怎么了?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵橡羞,是天一觀的道長眯停。 經(jīng)常有香客問我,道長卿泽,這世上最難降的妖魔是什么莺债? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮签夭,結果婚禮上齐邦,老公的妹妹穿的比我還像新娘。我一直安慰自己覆致,他們只是感情好侄旬,可當我...
    茶點故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著煌妈,像睡著了一般儡羔。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上璧诵,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天汰蜘,我揣著相機與錄音,去河邊找鬼之宿。 笑死族操,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播色难,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼泼舱,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了枷莉?” 一聲冷哼從身側響起娇昙,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎笤妙,沒想到半個月后冒掌,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡蹲盘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年股毫,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片召衔。...
    茶點故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡铃诬,死狀恐怖,靈堂內的尸體忽然破棺而出薄嫡,到底是詐尸還是另有隱情氧急,我是刑警寧澤,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布毫深,位于F島的核電站毒姨,受9級特大地震影響,放射性物質發(fā)生泄漏闸迷。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一腥沽、第九天 我趴在偏房一處隱蔽的房頂上張望鸠蚪。 院中可真熱鬧,春花似錦盾舌、人聲如沸蘸鲸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至仍稀,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間判沟,已是汗流浹背崭篡。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工琉闪, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人斯入。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓刻两,卻偏偏與公主長得像,于是被迫代替她去往敵國和親磅摹。 傳聞我的和親對象是個殘疾皇子霎奢,可洞房花燭夜當晚...
    茶點故事閱讀 44,884評論 2 354

推薦閱讀更多精彩內容