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

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

Nov 30, 2016 am 11:53 AM
javaperlphppythonruby

預覽

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

◆ 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
如何使PHP應用程序更快如何使PHP應用程序更快May 12, 2025 am 12:12 AM

tomakephpapplicationsfaster,關注台詞:1)useopcodeCachingLikeLikeLikeLikeLikePachetoStorePreciledScompiledScriptbyTecode.2)MinimimiedAtabaseSqueriSegrieSqueriSegeriSybysequeryCachingandeffeftExting.3)Leveragephp7 leveragephp7 leveragephp7 leveragephpphp7功能forbettercodeefficy.4)

PHP性能優化清單:立即提高速度PHP性能優化清單:立即提高速度May 12, 2025 am 12:07 AM

到ImprovephPapplicationspeed,關注台詞:1)啟用opcodeCachingwithapCutoredUcescriptexecutiontime.2)實現databasequerycachingingusingpdotominiminimizedatabasehits.3)usehttp/2tomultiplexrequlexrequestsandreduceconnection.4 limitesclection.4.4

PHP依賴注入:提高代碼可檢驗性PHP依賴注入:提高代碼可檢驗性May 12, 2025 am 12:03 AM

依赖注入(DI)通过显式传递依赖关系,显著提升了PHP代码的可测试性。1)DI解耦类与具体实现,使测试和维护更灵活。2)三种类型中,构造函数注入明确表达依赖,保持状态一致。3)使用DI容器管理复杂依赖,提升代码质量和开发效率。

PHP性能優化:數據庫查詢優化PHP性能優化:數據庫查詢優化May 12, 2025 am 12:02 AM

DatabasequeryoptimizationinPHPinvolvesseveralstrategiestoenhanceperformance.1)Selectonlynecessarycolumnstoreducedatatransfer.2)Useindexingtospeedupdataretrieval.3)Implementquerycachingtostoreresultsoffrequentqueries.4)Utilizepreparedstatementsforeffi

簡單指南:帶有PHP腳本的電子郵件發送簡單指南:帶有PHP腳本的電子郵件發送May 12, 2025 am 12:02 AM

phpisusedforsenderemailsduetoitsbuilt-inmail()函數andsupportivelibrariesLikePhpMailerAndSwiftMailer.1)usethemail()functionForbasiceMails,butithasimails.2)butithasimail.2)

PHP性能:識別和修復瓶頸PHP性能:識別和修復瓶頸May 11, 2025 am 12:13 AM

PHP性能瓶颈可以通过以下步骤解决:1)使用Xdebug或Blackfire进行性能分析,找出问题所在;2)优化数据库查询并使用缓存,如APCu;3)使用array_filter等高效函数优化数组操作;4)配置OPcache进行字节码缓存;5)优化前端,如减少HTTP请求和优化图片;6)持续监控和优化性能。通过这些方法,可以显著提升PHP应用的性能。

PHP的依賴注入:快速摘要PHP的依賴注入:快速摘要May 11, 2025 am 12:09 AM

依賴性注射(DI)InphpisadesignPatternthatManages和ReducesClassDeptions,增強量強制性,可驗證性和MATIALWINABIOS.ItallowSpasspassingDepentenciesLikEdenciesLikedAbaseConnectionStoclasseconnectionStoclasseSasasasasareTers,interitationAseTestingEaseTestingEaseTestingEaseTestingEasingAndScalability。

提高PHP性能:緩存策略和技術提高PHP性能:緩存策略和技術May 11, 2025 am 12:08 AM

cachingimprovesphpermenceByStorcyResultSofComputationsorqucrouctationsorquctationsorquickretrieval,reducingServerLoadAndenHancingResponsetimes.feftectivestrategiesinclude:1)opcodecaching,whereStoresCompiledSinmememorytssinmemorytoskipcompliation; 2)datacaching datacachingsingMemccachingmcachingmcachings

See all articles

熱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

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

熱門文章

熱工具

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具