互聯網技術突飛猛進,編程的語言層出不窮,本來稍微平靜了幾年的網絡編程技術又不斷出現新的東西,滌盪着整個網絡世界,ruby,Python等技術使我 們本來比較老闆的編程理念和概念產生了混淆和動盪。他們有什麼區別和聯繫?怎麼定義這些新生的事物?抹去額頭由於生疏而津津的汗滴,從頭Google一下 吧。
用戶 |
前臺語言:Visual Basic,Delphi,JavaScript |
平臺語言:Java,C# 後臺腳本語言:Perl,PHP,Python,Ruby |
系統語言:C,C++,D |
機器 |
按語言應用範圍進行的物理劃分 與用戶交互的是前臺語言,與機器交互的是系統語言,介於其中的爲前臺提供服務同時又須要底層系統服務的是後臺語言。 其實Perl,PHP,Python和Ruby都有本身的虛擬機(virtual machine),從這種意義上說它們也可做爲平臺語言。但在實際應用中,它們沒有Java平臺和.NET平臺那種整合凝聚力和核心做用,一般做爲輕量級的解決方案。 理論上動態語言一樣能承擔大型應用,但實踐上它們多做爲粘合語言或用於中小型應用。用句時髦的話來形容,暫時仍是主流的配角或非主流的主角。畢竟在運行效 率、類型安全、可用資源、開發工具、技術支持等方面,它們與Java、C#相比尚有必定差距。另外它們同屬‘草根’語言,雖有開源社區的大力支持,在影響 力上與後者未可同日而語。 JSP (JavaServer Pages)是由Sun Microsystems公司倡導、許多公司參與一塊兒創建的一種動態網頁技術標準。JSP技術是用JAVA語言做爲腳本語言的,JSP網頁爲整個服務器端 的JAVA庫單元提供了一個接口來服務於HTTP的應用程序。 在傳統的網頁HTML文件(*.htm,*.html)中加入Java程序片斷(Scriptlet)和JSP標記(tag),就構成了JSP網頁 (*.jsp)。基於J2EE平臺的網絡框架是大中型企業的最佳選擇。java的穩定性業界有目共睹。java的強大的網絡處理能力是它最堅硬的基石。 其優勢表現爲: ·對於用戶界面的更新,其實就是由 Web Server進行的,因此給人的感受更新很快。 ·全部的應用都是基於服務器的,因此它們能夠時刻保持最新版本。 ·客戶端的接口不是很繁瑣,對於各類應用易於部署、維護和修改。 Python 首先就以語法而論,python沒有perl的靈活緊湊。只能說是中庸,感受和basic,pascal,java差很少。他能夠編寫運行在操做 系統的應用程序,能夠編寫web代碼,它是一種膠水語言能嵌入到C++中,這一點在遊戲開發中引用最廣,你們知道C++是作網絡遊戲的首選,是當前作遊戲 最普遍的。而Python在處理遊戲特效等很迅速。Python的語法很是嚴格以致於業界描述它爲一種清晰語言,這和perl正好背到相馳。一方面從語法 上保證了良好的編碼風格;另外一方面,每一個代碼塊再也不須要起始的大括號或begin/end之類的,減小了的代碼行數。順便插一句,另一種優雅的語言 Haskell一樣對空白符敏感,或許優雅正是來自對細節和規範的重視吧。此外許多人抱怨Python中的自引用self太多,卻不知這也是它倡導顯式表 達的一種體現。總的看來,Python主要的問題仍是在性能效率上不盡如人意,有待改進。 Python在編程領域的佔有率一直處於穩步上升之中,根據最新的數據,Python排名第六。前五名分別是Java、C、PHP、C++ 和 VB。著名的搜索引擎 Google 也大量使用Python。更加使人吃驚的是,在Nokia智能手機所採用的Symbian操做系統上,Python成爲繼C++,Java以後的第三個編 程語言!2006年的Google編程大賽已經將Python做爲參賽語言之一,可見Python的影響力之巨大。 Ruby Ruby是面向對象的編程語言,是腳本語言和PHP同樣。她追求的是「簡便快捷的面向對象編程」。Ruby是解釋型語言,所以不需編譯便可快捷地 編程。同時Ruby具備相似 Perl的強大的文本處理功能,她可並不僅是個玩具,您能夠用她來進行實用的編程。此外,您還能夠很方便地使用C語言來擴展Ruby的功能,所以能夠把她 看成各類庫的前端來使用。若您曾經「想要一種簡單的面向對象的語言」,或者認爲「Perl的功能雖然好用,但它的語法真讓人受不了」,又或者以爲 「lisp系列語言的思想不錯,但處處都是括號真讓人討厭,最起碼算式應該按照一般的樣式書寫」。那麼,Ruby或許能讓您滿意。 概括以來,Ruby有如下優勢: 解釋器 Ruby是解釋型語言,其程序無需編譯便可輕鬆執行。 變量無類型 Ruby的變量沒有類型,所以沒必要爲靜態的類型匹配而煩惱。相應地,錯誤檢查功能也變弱了。 不須要變量聲明 全部變量均無需聲明便可當即使用。另外,從變量名便可判斷出是何種變量(局部變量,全局變量,實例變量)。 語法簡單 語法比較簡單,相似Algol系語法。 不須要內存管理 具備垃圾回收(Garbage Collect,GC)功能,能自動回收再也不使用的對象。 一切都是對象 Ruby從一開始就被設計成純粹的面嚮對象語言,所以以整數等基本數據類型爲首的全部東西都是對象,它們都有發送信息的統一接口。 類,繼承,方法 Ruby固然具備面嚮對象語言的基本功能。 特殊方法可向某對象添加方法。例如,能夠把GUI按鈕被按下時的動做做爲方法記述下來,還能夠用它來進行原型庫(prototypebase)的面向對象編程(有人這麼幹吧)。 用模塊進行混合插入(Mixin) Ruby故意捨棄了多重繼承,但擁有混合插入功能。使用模塊來超越類的界限來共享數據和方法等。 迭代器 該功能能夠將循環抽象化。 閉包 能夠將某過程片斷對象化。對象化後的該過程片斷就稱做閉包。 功能強大的字符串操做/正則表達式 以Perl爲樣板創造出了功能強大的字符串操做和正則表達式檢索功能。 擁有超長整數 添加超長整數功能後,能夠計算很是大的整數。例如計算400的階乘也垂手可得。 具備錯誤處理功能 錯誤處理功能可使您編寫代碼處理出錯狀況。 能夠直接訪問OS Ruby可使用(UNIX的)絕大部分的系統調用。單獨使用Ruby也能夠進行系統編程。 動態加載 若OS支持的話,能夠在運行時讀入對象文件。 但Ruby也有下列缺點。 Ruby On Rails,優勢是不像Struts那樣須要大量的配置文件,一切都採起默認的配置,包括訪問路徑,uri等,而這也是它的缺點,不能靈活的配置。 總結就是ruby很適合作中小型web工程。他和jsp(J2EE)並不衝突,一個是低端的一個是高端的。而形成衝突的是PHP,不過php易 學、免費、通過了不少年的考驗很穩定,LAMP幾近經典,是大中小型企業樂於選擇的,是當前用的最多的腳本語言,Google、騰訊、網易等等大型網絡集 團都是使用的php這樣也給那些小的企業了信心,特別是Linux集羣技術的流行使得PHP更加不易受到ruby的衝擊。可是不容小覷。潛力很是巨大。 RERL perl和java是同樣的。 第一. Perl強大的正則表示式(regular expression)比對以及字符串操做使這個工做變得簡單而沒有其它語言能相比。Perl很是擅長於切割,扭轉,絞,弄平,總結,以及其它的操做文字 文件。生物資料大部分是文字文件:物種名稱,種屬關係,基因或序列的註解,評住,目錄查閱,甚至DNA序列也是類文字的。如今互相交換以以文字文件的形式 存在的可是具備不兼容的資料格式生物信息資料是一個很頭疼的問題,perl的這個方面的優勢,能夠在這一方面解決很多問題. 第二. Perl能容錯。生物資料一般是不徹底的,錯誤或者說偏差從數據的產生時候可能就產生了.另外生物數據的某項值欄位能夠被忽略,多是空着的,或是某個欄 位也就是某個值,被預期要出現好幾回(舉例來講,一個實驗可能被重複的操做),或是資料以手動輸入因此有錯誤。Perl並不介意某個值是空的或是有奇怪的 字符。正規表示式可以被寫成取出而且更正錯誤的通常錯誤。固然這種彈性也多是各壞處。 還有,Perl 是組件導向的。Perl 鼓勵人們將他們的軟件寫成小模組,不管是用 Perl 函式庫模組或是正統的 Unix工具導向的方式。外部程序可以輕易的被整合進 Perl 程序,靠着管道(pipe),系統呼叫,或是插座(socket)。Perl5引進的動態載入器容許人們使用C 的函式,或者讓整個編程過的函式庫,被使用在 Perl直譯器中。最近的成果是世界各地的智能結晶都會收錄在一組模組裏面,稱爲」bioPerl」(請參考 Perl Journal) Perl 很容易去寫而且能很快開發完。直譯器讓你不須要宣告你全部的函數型式以及資料型態,當未定義的函式被呼叫時只會引發一個錯誤,除錯器也能與Emacs很好的合做而且讓你能用使人舒服的交談式的開發模式。 Perl是良好的原型語言。由於它快並且髒(quick and dirty),用 Perl建構新演算的原型比直接寫成一個快的須要編程過的語言來的有意義。有時候發現結果是Perl已經夠快了,因此程序變不須要移植;更多情形是某人可 以用C寫一個小的核心程序,編程成動態載入的模組或是外部的可執行程序,而後其它的部分用Perl來完成。這部分的例子能夠參考 http://waldo.wi.mit.edu/ftp/distribution/software/rhmapper/ )。 有一點要強調的是, Perl 在寫做網頁 CGI 方面很是優秀,並且重要性隨着各實驗將資料發表在網絡上以後更是增長。我在基因中心環境下使用Perl 的經驗從頭至尾都是值得稱讚的。然而我發現 Perl也有它的問題。它的鬆散的程序風格致使許多錯誤,這些在其它嚴格的語言都會被抓到。舉例來講,Perl讓你在一個變數在被指定值以前就能使用,這 是個頗有用的特性當你須要的時候,可是倒是一個災難當你單純的打錯了辨識名稱。一樣的,很容易忘記要宣告一個函式裏面的區域變數,致使不當心地改到了全域 變數。 最後,Perl 的不足之處在於創建圖形化的使用者接口。雖然 Unix忠實信徒全部事情都能在命令模式下完成,大多數的終端使用者卻不一樣意。視窗,選單,彈跳的圖案已經變成了必要的時尚。 直到最近,直到最近,Perl 的使用者界面(GUI)發展還是不成熟的。然而 Nick Ing-Simmons的努力使得 perlTK(pTK)的整合使得以Perl 驅動的使用者接口在 X-window上面成爲可能。個人夥伴和我曾經在 MIT 基因中心寫過幾個 pTK爲基礎的應用程序供互連網使用者,並且從頭至尾都是一個使人滿意的經驗。其它的基因中心則更大規模的使用 pTK,在某些地方已經成爲主要的生產力。 簡要總結: 比起Java平臺和.NET平臺,動態語言輕便靈活、開發效率高,但整合凝聚力還不夠,在運行效率、類型安全、可用資源、開發工具、技術支持以及影響力等方面也有必定差距,故一般做爲輕量級的解決方案。 LAMP是由Linux、Apache、MySQL和包括PHP、Perl、Python或Ruby在內的腳本語言組成的網絡開發平臺,具備開放靈活、開發迅速、部署方便、高可配置、安全可靠、成本低廉等優勢。 Perl精練、複雜、強大、靈活、自由、隱晦、表現力強,但規範性、可讀性、一致性、整潔性和可維護性較差。 Python優雅規範、簡潔明晰、易學易用、類庫豐富,有些人不喜歡它對空白符敏感的特性。 Ruby語法精巧、高度靈活,兼具Perl的表現力和Python的可讀性,尤爲注重程序員的感覺,但其性能和線程模型尚有待改進。 PHP簡單、專注、實用、流行,在但相比其餘三種語言,在語法和功能上稍有欠缺。 總結 比起Java平臺和.NET平臺,動態語言輕便靈活、開發效率高,但整合凝聚力還不夠,在運行效率、類型安全、可用資源、開發工具、技術支持以及影響力等方面也有必定差距,故一般做爲輕量級的解決方案。 LAMP是由Linux、Apache、MySQL和包括PHP、Perl、Python或Ruby在內的腳本語言組成的網絡開發平臺,具備開放靈活、開發迅速、部署方便、高可配置、安全可靠、成本低廉等優勢。 Perl精練、複雜、強大、靈活、自由、隱晦、表現力強,但規範性、可讀性、一致性、整潔性和可維護性較差。 Python優雅規範、簡潔明晰、易學易用、類庫豐富,但效率稍差,有些人不喜歡它對空白符敏感的特性。 Ruby語法精巧、高度靈活,兼具Perl的表現力和Python的可讀性,尤爲注重程序員的感覺,但其性能和線程模型尚有待改進。 PHP簡單、專注、實用、流行,在但相比其餘三種語言,在語法和功能上稍有欠缺。 RoR是一種輕量級套餐式的web應用解決方案,是由好的設計(MVC架構和CoC、DRY原則)加上好的語言(Ruby)在好的時機(web2.0和敏捷開發風行之際)打造出的好的框架。 歎號——沒有最好的語言,只有最合適的語言。 逗號——沒有糟糕的語言,只有糟糕的程序員。 問號——沒有一種語言是萬能的,只會一種語言是萬萬不能的。 引號——廢除對語言的宗教信仰,創建對語言的哲學思惟。 句號——編程就是在人腦和電腦之間尋找最佳平衡點的過程。 程序員應該與程序語言同樣,既要有本身的專長,又要向通用化和全能化發展。 編程語言慣例用法、哲學理念和編程範式造成了語言的編程風格。