搜尋
首頁後端開發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怎么把负数转为正整数Apr 19, 2022 pm 08:59 PM

php把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。

php怎么除以100保留两位小数php怎么除以100保留两位小数Apr 22, 2022 pm 06:23 PM

php除以100保留两位小数的方法:1、利用“/”运算符进行除法运算,语法“数值 / 100”;2、使用“number_format(除法结果, 2)”或“sprintf("%.2f",除法结果)”语句进行四舍五入的处理值,并保留两位小数。

php怎么读取字符串后几个字符php怎么读取字符串后几个字符Apr 22, 2022 pm 08:31 PM

在php中,可以使用substr()函数来读取字符串后几个字符,只需要将该函数的第二个参数设置为负值,第三个参数省略即可;语法为“substr(字符串,-n)”,表示读取从字符串结尾处向前数第n个字符开始,直到字符串结尾的全部字符。

php怎么根据年月日判断是一年的第几天php怎么根据年月日判断是一年的第几天Apr 22, 2022 pm 05:02 PM

判断方法:1、使用“strtotime("年-月-日")”语句将给定的年月日转换为时间戳格式;2、用“date("z",时间戳)+1”语句计算指定时间戳是一年的第几天。date()返回的天数是从0开始计算的,因此真实天数需要在此基础上加1。

php怎么查找字符串是第几位php怎么查找字符串是第几位Apr 22, 2022 pm 06:48 PM

查找方法:1、用strpos(),语法“strpos("字符串值","查找子串")+1”;2、用stripos(),语法“strpos("字符串值","查找子串")+1”。因为字符串是从0开始计数的,因此两个函数获取的位置需要进行加1处理。

php怎么设置implode没有分隔符php怎么设置implode没有分隔符Apr 18, 2022 pm 05:39 PM

在PHP中,可以利用implode()函数的第一个参数来设置没有分隔符,该函数的第一个参数用于规定数组元素之间放置的内容,默认是空字符串,也可将第一个参数设置为空,语法为“implode(数组)”或者“implode("",数组)”。

php怎么判断有没有小数点php怎么判断有没有小数点Apr 20, 2022 pm 08:12 PM

php判断有没有小数点的方法:1、使用“strpos(数字字符串,'.')”语法,如果返回小数点在字符串中第一次出现的位置,则有小数点;2、使用“strrpos(数字字符串,'.')”语句,如果返回小数点在字符串中最后一次出现的位置,则有。

php怎么去掉字符串首位的tab空白符php怎么去掉字符串首位的tab空白符Apr 22, 2022 pm 07:11 PM

在php中,可以利用ltrim()函数来去掉字符串首位的tab空白符,语法为“ltrim(string)”;当只给ltrim()函数传入一个参数,用于规定要检查的字符串时,可删除该字符串开始位置的空白字符(例空格、tab制表符、换行符等)。

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脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

記事本++7.3.1

記事本++7.3.1

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

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中