① Ruby,Perl,Python,Lua等語言相互之間都有哪些異同點
本文從RoR對Ruby的影響、Ruby的優勢等多個角度分析了Ruby比Python成功的原因。伴隨著RoR的風行,Ruby語言受到越來越多的開發者的關注,同為腳本語言,Python的地位卻略顯尷尬,什麼樣的原因,造成了這樣的局面?筆者認為有以下幾個方面:一、RoR的推波助瀾筆者認為,Ruby的成功,很大一部分是由於RoR的帶動。幾年前,如果你沒聽過RoR倒是情有可原,但如果今天,RoR對你來說,還是一個陌生詞彙的話,那你就有點危險了。:)什麼是RoR呢?全稱,RubyonRails,簡稱,RoR或者Rails。它是個全棧的(full-stack)web應用框架,它為開發者提供了構建一個web應用所需的完整基礎結構,並且嚴格按照MVC(模型-視圖-控制器)架構進行開發。RoR致力於提高開發者的開發效率,希望通過盡量少的代碼,完成盡可能多的功能。基於這樣的考慮,RoR有兩大設計原則,一是,不要重復自己(Don''tRepeatYourself);二是,慣例優於配置(ConventionOverConfiguration)。使用RoR,你甚至可以通過簡單的幾條命令行、幾行代碼,就完成一個功能強大的web應用程序,這極大地提高了開發者的開發效率。2004年7月,RoR一經發布,在短期內,便受到很多開發者的追捧。時至今日,RoR已經被全世界的開發者們所關注,它帶給開發者的效率提升,是前所未有的;它帶給業界關於軟體開發的思考,也是意義深遠的。在RoR如此風行的大背景下,RubyonRails,這個需要使用Ruby進行開發的web框架,也自然地帶動了Ruby語言的發展。在下面的「Ruby語言受關注程度趨勢圖」上,可以清晰地看出,Ruby語言在RoR發布也就是2004年7月後,進入了高速發展期。Ruby因為有了RoR這樣的「殺手級」應用,變得春風得意,那麼Python呢?在《淺談Python語言》一文中,我們提到了Python具有豐富的API庫,在web開發方面,也有Django、Turbogears這樣的一些框架,就運行速度而言,Python比Ruby快;就社區而言,Python也比Ruby成熟,可是為什麼Python沒有產生一個像RoR這樣的「殺手級」應用呢?Python語言的創始人Guido在接受InfoQ采訪時,是這樣解釋的:「我不喜歡KillerApplication,因為那會讓多數人或者社區將精力集中於一個地方。Python是一個應用廣泛的語言,基於Python已經產生了很多好用的Web框架,比如Django等。但是Python不KillerApplication,至少目前是這樣,而且我相信隨著Python社區的發展,會有很多KillerApplications自然出現。我喜歡多樣化的應用。」通過這個觀點,我們可以看出Python在其發展道路上,追求的是一種均衡,一種「大而全」。「會有很多KillerApplications自然出現」,這點,我想我們需要拭目以待。單就「均衡」而言,筆者認為這很危險,作為一門腳本語言,試圖做Java之類傳統語言做的事情,不太可取。以Java為例,在web應用上,有太多的框架可供選擇,不錯,「在不同的場景用不同的框架」,這想法很好。可是,在實際應用中,有多少開發者可以根據項目特點,正確、合理地選擇框架?與其到最後,用戶還不知道該如何選擇,還不如一開始就替用戶做出一個選擇。作為Python的使用者,我更願看到有個Python的「殺手級」應用出現,進而帶動Python更快速地發展。你可以說RoR成就了Ruby,可是Rails為什麼偏偏選擇了Ruby?!Ruby優勢何在?二、Ruby的優勢1.比Perl更強大,比Python更面向對象「比Perl更強大,比Python更面向對象」,這是Ruby創始人Matz設計Ruby的初衷。Python既支持面向過程的編程也支持面向對象的編程,而Ruby則是完全面向對象。在Ruby中,任何東西都是對象,包括Python中的基本數據類型;每個過程或函數都是方法。例如,取-3的絕對值,在Python中,是這樣的:abs(-3)。而在Ruby中,則是這樣的:-3.abs。這種OO的方式,顯得更加直觀。2.強大的語法功能單就語法的簡單性而言,Ruby不及Python。但解決一些較復雜的問題,Ruby強大的語法功能,有助於降低問題的復雜度。例如:Ruby以「塊」的方式來實現列表內的條件、循環語句,比Python的更靈活、更具通用性。Ruby具有類似Lisp的徹底的函數方式的條件、循環語句等。Ruby的迭代器功能可以將流程式控制制結構抽象化。3.強大的字元串處理、正則表達式功能Matz認為:Ruby>(Smalltalk+Perl)/2。Ruby類庫是對Perl語言功能的面向對象方式的重組,因為借鑒了很多Perl的東西,使得字元串處理、正則表達式這塊,Ruby同樣強大。4.不會僵住的「膠水語言」同樣是「膠水語言」,Ruby比Python更靈活。使用過一段時間的Python,你會發現,Python比較依賴第三方的東西。相比較,Ruby則更依賴自身。例如,Ruby可以使用(UNIX的)絕大部分的系統調用,單獨使用Ruby也可以進行系統編程等。有優勢,Ruby就一定可以成功了?Python同樣也有很多優勢!對,還得看當時所處的環境。三、時勢造英雄這點還得回到RoR的崛起。Ruby,1995年12月正式發布,2000年進入美國;2004年7月,RoR正式發布。RoR的出現時間,值得玩味。在下面的「Java語言受關注程度趨勢圖」上,可以看到,2004年7月前後,Java處於一個相對「衰退期」。提到Java,大家應該都會想到J2EE。J2EE應用程序的廣泛實現是從1999、2000年開始的,它的出現帶來了諸如事務管理之類的核心中間層概念的標准化,但是因其開發效率、學習難度和實際性能的問題,在實踐中沒有獲得完全的成功。作為J2EE核心技術的EJB(2.x),更是因其高昂的學習代價、極低的開發效率和極高的資源消耗,備受指責。在這樣一個大背景下,2003年,Spring框架誕生了。Spring的設計思想在於「使J2EE開發更加簡單」。這個設計思想,在包括Java領域在內的眾多軟體開發領域引起了廣泛關注。軟體開發者們開始思考,如何讓開發向著一個更簡單的方向發展。RoR在這一時期出現,無疑是順應了這樣一個潮流。可以這么說,是歷史選擇了RoR,當然也選擇了Ruby。遇到合適的機遇,還不夠,俗話說得好:「眾人拾柴火焰高」。四、眾星捧月Ruby的出現,受到了兩大主流平台Java和.NET的極力追捧。2006年9月,SUN僱傭了JRuby的主要開發者CharlesNutter和ThomasEnebo;一年不到,2007年6月14號,JRuby1.0正式發布。SUN在其JavaIDENetBeans6.0M10中,更是集成了對Ruby/JRuby的支持。反觀Python的Java實現——Jython,則沒有這么幸運,發展至今,它並沒有得到SUN的支持。而Microsoft,也在2007年7月,推出了Ruby的.NET實現——IronRuby的預覽版。相信SUN和Microsoft對Ruby的競相推崇,必然推動Ruby的進一步發展。基於以上幾點,筆者認為Ruby的成功不是偶然,並且相信這樣的成功還會持續下去。對於Python的未來,我們也將拭目以待。
② lua 如何應用
作為一名程序員,相信大家在軟體架構圖上經常見到 「Nginx + Lua」 的字樣,但是對於Lua在Web應用中的作用並沒有多少了解。
該篇文章對 Lua 的語言特性、優勢等方面做介紹,並通過介紹一個天氣預報的 Web 應用,讓大家對 Lua 在Web應用中充當的角色有一個直觀的認識。
什麼是 Lua
Lua 是用標准C語言編寫的一種小巧的腳本語言,並以源代碼形式開放。Lua 並沒有提供強大的庫,所以我們很少單獨使用 Lua 去編寫程序,其設計目的是為了嵌入其他應用程序中,比如嵌入 Cocos2d-x 游戲引擎或 Nginx 伺服器,從而為應用程序提供靈活的擴展和定製功能。
Lua 的語言特性
Lua 的語法並不復雜,易於上手,而且網上已有大量的語法教程,所以該篇文章不再贅敘,這里介紹幾個 Lua 語言相對重要的語言特性。
協程並發
協程相對獨立,有自己的上下文,但是其切換由程序自己控制(線程的切換是由操作系統控制,這是協程與線程的重要區別)。
Lua 的協程通過擴展庫 coroutine 來實現,通過 create 函數創建一個協程,resume 函數以運行此協程,直到新協程調用 yield 函數,程序才能返回到「主協程」中運行。