首頁 後端開發 php教程 perl、php、python、java和ruby的比較

perl、php、python、java和ruby的比較

Nov 30, 2016 am 11:53 AM
java perl php python ruby

預覽

◆ 語言的發展趨勢一定是動靜結合、剛柔並濟

◆ Perl凝練晦澀,Python優雅明晰,Ruby精巧靈動,PHP簡明單純

◆ 或許正是來自對細節和規範的優雅

◆ (RoR)與Ruby結合之後,便如一隻猱身而上靈貓,立刻襯托出Java和.NET大象般的身影

提問

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

◆ 為什麼動態語言多作為輕量級的解決方案?

◆ LAMP為什麼受歡迎?

◆ Ruby on Rails為什麼會流行?

◆ 程式語言的發展趨勢是什麼講

?剩下四種動態語言,我們將之歸為後台腳本語言。語言、非C族靜態語言和動態語言三類的。 「這種分法看似三層架構-前台語言對應表現層;平台語言與後台腳本語言對應業務邏輯層;系統語言對應資料層。」

「的確有幾分神似,但千萬不可混淆。冒號提醒道,「三層架構(three-layer architecture)是模組設計上的邏輯劃分[1];而這裡是按語言應用範圍進行的物理劃分——與用戶交互的是前台語言,與機器交互的是系統語言,介於其中的為前台提供服務同時又需要底層系統服務的是後台語言。基於程式(program)與腳本(script)、靜態與動態而分的。也可作為平台語言。它們都是動態語言的緣故嗎?」

冒號回答:「理論上動態語言同樣能承擔大型應用,但實踐上它們多作為粘合語言或用於中小型應用。還是主流的配角或非主流的主角。有開源社群的大力支持,在影響力上與後者未可同日而語。 ”

perl、php、python、java和ruby的比較「世易時移,殊難逆料。但有一點可以肯定,語言的發展趨勢一定是動靜結合、剛柔並濟。 」冒號斷言,「一方面以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’,這下所有語言都囊括其中了。老外就喜歡玩這種首字母縮寫(acronym)的文字遊戲,尤其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潮流裹挾下的一種身不由己的迎合。者Larry Wall是一名語言學家,他認為程式語言應該與自然語言一樣,簡潔自然、易讀易寫、表達多樣、不拘一格。嚴謹刻板的臉孔,散發出濃鬱的人文氣息。乎乎的。

「有人僅用一行Perl程式碼就實現了RSA演算法,你看了那還不得當場暈倒啊?」冒號打趣道,「Perl的各種魔符好似一把把鋒利的剪刀,做起文本裁剪之類的工作來游刃有餘。因而有'internet上的膠帶(duct tape)[2]'的說法。它又號稱瑞士軍刀,精練而復雜,實用而強大。性、整齊性和可維護性。 OO設計和豐富的類別庫,更重要的是它對程式設計師友善度大大超過Perl。一件事可以有多種方法,而Python認為一件事應該最好只有一種方法;Perl追求語言的表現力,Python追求簡單優雅;Perl喜歡隱性暗示,Python強調顯性明示;Perl強調緊湊,Python強調鬆散; Perl的語法和語義豐富,Python的語法和語義簡單而類庫豐富。敏感?這個倒真怪異。每個程式碼區塊不再需要起始的大括號或begin/end之類的,減少了的程式碼行數。細節與規範的重視吧。人意。 Ruby取代,至多只是一種再分配。 不過Ruby的確是門很可愛的語言,兼具Perl的表現力和Python的可讀性。超過語言本身的功能。就拿程式碼區塊(block)和迭代器(iterator)來說,雖然皆非Ruby首創,但其語法最為賞心悅目。類似的例子比比皆是。 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)和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脫穎而出?」

冒號作出分析:「正值web2.0和敏捷在開發(agile development)的概念流行之際,RoR將AJAX與Ruby組合在一起成為絕佳的回應。 Perl中的Catalyst、Python中的Pylon還有PHP中的CakePHP等應是效法之作。不少的歷史包袱,人們習慣了將表示邏輯和業務邏輯編織在一起。 Struts+Spring+Hibernate)組合,維護起來也比RoR繁雜得多。 RoR還有待進一步檢驗,目前無論是應用廣度還是深度上尚無法與Java相提並論;其次Java在性能、安全性等方面還是有不少優勢,而這些對於大型和關鍵性的應用來說尤為重要。中小型web應用中,RoR較之PHP還遠為不及。和Ruby一開始就定位通用語言不同,PHP是專為網路而生的。處理套接字流(socket stream)。變數名稱大小寫敏感而函數名大小寫不敏感;函數命名規則不一致;不支援namespace和unicode[4];與Perl一樣,它的物件模型不是先天的,直到PHP 5才真正完善;對線程支援不足;比起Perl、Python和Ruby,它的功能稍顯單薄等等。 ,Perl、Python還有Ruby,都能作為前台語言來開發命令列或圖形介面的應用。現代的程序語言既有自己的專長,也朝向通用化和全能化發展,以爭取更多的生存空間。試想一下,現代的程式設計師又何嘗不是如此呢?」言及於此,冒號收住話題,「語言簡評告一段落,還有不少既有趣又有用的語言,在此就不一一評說了。我們看到,每種程式語言都有其獨特的慣例用法和哲學理念,它們與程式設計範式一道形成了語言的程式設計風格。體悟愈深者程式語感愈強,思維與語言愈交融無礙,漸從必然王國走向自由王國。 ”

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

「或許人器合一更準確吧,程式設計師可不能只會一種兵器喲。 」冒號故意摳他的字眼,「現在請大家每人寫一句對本節課的感言。 」

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

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

逗號——沒有糟糕的語言,只有糟糕的程式設計師。

問號-沒有一種語言是萬能的,只會一種語言是萬萬不能的。

引號-廢除對語言的宗教信仰,建立對語言的哲學思維。腦和電腦之間尋找最佳平衡點的過程。茲決定,給諸位的獎賞是-立時下課!”

眾人欣然領賞而去。

插語

[1] 有兩種三層架構,一種是three-layer architecture,一種是three-tier architecture。 ] 不少地方譯作'輸送帶'、'傳送帶',因為duct有'輸送管'、'導管'之意,於是想當然地認為這表明Perl在internet上起著輸送作用。萬能的黏性極強的膠帶,用以比喻Perl的黏合力。執行緒(native thread)。但整合凝聚力還不夠,在運作效率、類型安全、可用資源、開發工具、技術支援以及影響力等方面也有一定差距,故通常作為輕量級的解決方案。

◆ LAMP是由Linux、Apache、MySQL和包括PHP、Perl、Python或Ruby在內的腳本語言組成的網頁開發平台,具有開放靈活、開發迅速、部署方便、高可配置、安全可靠、成本低廉等優點。

◆ Perl精練、複雜、強大、靈活、自由、隱晦、表現力強,但規範性、可讀性、一致性、整潔性和可維護性較差。

◆ Python優雅規範、簡潔明晰、易學易用、類別庫豐富,但效率稍差,有些人不喜歡它對空白符敏感的特性。

◆ Ruby語法精巧、高度靈活,兼具Perl的表現力和Python的可讀性,尤其註重程式設計師的感受,但其效能和執行緒模型仍有待改進。

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

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

◆ 靜態語言與動態語言從語言特徵到運作環境都在逐漸融合。

◆ 程式設計師應該與程式語言一樣,既要有自己的專長,也要朝向通用化和全能化發展。

◆ 程式語言慣例用法、哲學理念和程式設計典範形成了語言的程式設計風格。


本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1663
14
CakePHP 教程
1420
52
Laravel 教程
1315
25
PHP教程
1266
29
C# 教程
1239
24
繼續使用PHP:耐力的原因 繼續使用PHP:耐力的原因 Apr 19, 2025 am 12:23 AM

PHP仍然流行的原因是其易用性、靈活性和強大的生態系統。 1)易用性和簡單語法使其成為初學者的首選。 2)與web開發緊密結合,處理HTTP請求和數據庫交互出色。 3)龐大的生態系統提供了豐富的工具和庫。 4)活躍的社區和開源性質使其適應新需求和技術趨勢。

Golang vs. Python:性能和可伸縮性 Golang vs. Python:性能和可伸縮性 Apr 19, 2025 am 12:18 AM

Golang在性能和可擴展性方面優於Python。 1)Golang的編譯型特性和高效並發模型使其在高並發場景下表現出色。 2)Python作為解釋型語言,執行速度較慢,但通過工具如Cython可優化性能。

Python與C:學習曲線和易用性 Python與C:學習曲線和易用性 Apr 19, 2025 am 12:20 AM

Python更易學且易用,C 則更強大但複雜。 1.Python語法簡潔,適合初學者,動態類型和自動內存管理使其易用,但可能導致運行時錯誤。 2.C 提供低級控制和高級特性,適合高性能應用,但學習門檻高,需手動管理內存和類型安全。

IIS和PHP的兼容性:深度潛水 IIS和PHP的兼容性:深度潛水 Apr 22, 2025 am 12:01 AM

IIS和PHP可以兼容,通過FastCGI實現。 1.IIS通過配置文件將.php文件請求轉發給FastCGI模塊。 2.FastCGI模塊啟動PHP進程處理請求,提高性能和穩定性。 3.實際應用中需注意配置細節、錯誤調試和性能優化。

Python項目是否需要進行分層? Python項目是否需要進行分層? Apr 19, 2025 pm 10:06 PM

Python項目中的分層結構探討在學習Python的過程中,很多初學者會接觸到一些開源項目,特別是使用Django框架的項...

Python vs. C:了解關鍵差異 Python vs. C:了解關鍵差異 Apr 21, 2025 am 12:18 AM

Python和C 各有優勢,選擇應基於項目需求。 1)Python適合快速開發和數據處理,因其簡潔語法和動態類型。 2)C 適用於高性能和系統編程,因其靜態類型和手動內存管理。

Laravel vs. Python(與框架):比較分析 Laravel vs. Python(與框架):比較分析 Apr 21, 2025 am 12:15 AM

Laravel適合團隊熟悉PHP且需功能豐富的項目,Python框架則視項目需求而定。 1.Laravel提供優雅語法和豐富功能,適合需要快速開發和靈活性的項目。 2.Django適合複雜應用,因其“電池包含”理念。 3.Flask適用於快速原型和小型項目,提供極大靈活性。

在後端開發中,如何區分service層和dao層的職責? 在後端開發中,如何區分service層和dao層的職責? Apr 19, 2025 pm 01:51 PM

探討後端開發中的分層架構在後端開發中,分層架構是一種常見的設計模式,通常包括controller、service和dao三層�...

See all articles