Java上的PHP,兩者共贏?

Jerry Cuomo(IBM的WebSphere CTO)和Scott Ferguson(Resin Java Application Server及最近的Quercus PHP引擎)與我們一起討論了PHP如何融入Java的世界。目前IBM在Java/PHP混合系統方面最直接的投入是Zero項目,一個開發中的新的Web框架,支持Groovy和PHP腳本語言。當被問到爲何IBM選擇在Project Zero項目裏支持PHP,Jerry有些話要說:

Jerry:三個詞——敏捷性(Agility)、內容(Content)、訓練(Educated)。是的,PHP是我們的ACE。
敏捷性(Agility)。J2EE應用是爲了“永久的價值”而優化的……也就是說,寫出來的程序是打算要一直運行下去。PHP腳本是爲了“在週五之前投入運行”而優化的。也就是說,PHP讓你快速簡潔地編寫代碼,這對於許多應景而生的應用是合適的。
內容(Content)。我們叫它“剪貼式編程”。網上有不計其數的PHP資源。你很少需要從頭開始編寫什麼東西。搜索,剪切,粘貼,你就可以收工了……(這又涉及到敏捷性)。
訓練(Educated)。PHP很容易自學。編寫PHP腳本對很多人來說都非常容易,即使是沒有受過正規計算機科學教育的人。例如,像內存管理和線程這種複雜的東西,在你編寫PHP腳本的時候絕不會成爲注意力的中心。而且就如我在上一點所說,大多數時候你都是在修改利用別人的代碼。
Caucho採取的途徑與IBM不同。Project Zero看起來好像是一個Java/Groovy框架,只不過剛好也支持PHP語言。而Quercus,是能夠與mod_php競爭的完整的PHP語言實現。它是一個令人印象深刻的實現。事實上整個PHP解釋器都是用Java編寫的,因此不僅能夠提供原生的Java/PHP集成,還有效利用了JVM的強大能力來達到極高的效率和安全性。對於從技術的角度看,Java如何令Quercus脫穎而出,Scott如是說:

Scott:Java平臺的線程、緩存和池技術是Quercus成功的關鍵。大多數Quercus庫的實現都只是對相應Java功能的包裝。例如,數據庫訪問就是對JDBC的包裝。因爲Java平臺已經提供了堅實的基礎,Quercus不費吹灰之力就得到了那些強大的能力。

而且反射、內存管理、JDK 1.5 Annotation和動態編譯/類裝載,這些都是Quercus所需的。雖然我們不能像C PHP一樣使用智能指針來編程,我們卻可以獲得乾淨的OO設計,並依賴Java去處理內存的問題。

當然還有運行分析(profiling)。Quercus自動從JVM的CPU和堆運行分析中得益。因爲編譯後的Quercus函數實際上就是Java方法,我們可以準確地從運行分析中看出哪一塊代碼運行得太慢或者消耗了太多內存。
快速、輕量並且廣泛接受的Web層框架一直是Java平臺難以完成的目標,我們向Jerry和Scott兩人都提出了同一個問題:他們投入於PHP運行時的領域,是否由於感覺到Java社區已經放棄了使用基於Java的框架來完成高效Web層開發,轉而在這一層使用動態腳本語言。他們都認爲我的提問誇大了棄用Java的趨勢,他們如此描述使用Java和使用PHP之間的平衡:

Jerry:“轉移”和“放棄”的說法有點過了。我覺得應該說我們正“把Java提升到更高級的行政職位上”。Java自己贏得了這樣的位置。這並不是一個非黑即白的問題。除了Java目前的角色,我相信它可以成爲這些動態腳本語言的“系統編程”環境。就像Java與C/C++的關係。現在Java(以及JVM)需要成長(和退縮)來支持各種DSL。例如,當今的Java是爲長期運行的應用和進程而優化的。DSL則是短命的,經常來來去去。
Scott:我們不建議完全拋棄Java。Web應用框架底下的基礎設施如Spring、JPA/Hibernate,工具如Coherence,測試框架如JUnit,Java在這些方面是無與倫比的,遠勝過腳本世界中任何東西。除此之外,應用級緩存、服務、事件和線程這些不爲人所見的東西用Java會好得多。如果你看看像Mediawiki(維基百科所用的程序)這樣的PHP應用,可以明顯地看出底層代碼如果用Java編寫會好很多。

Quercus/PHP的成功之處是在它的表現層,腳本可以滿足許多特別要求靈活性的情況。Java表現框架如JSF、JSP/JSTL、Struts、Velocity,沒有一個能達到完整的腳本語言的靈活性和庫能力。許多框架,如JSP/JSTL,都是部分的語言實現。爲什麼不乾脆用一個完整的腳本語言,再加上一個龐大的庫呢?已經有巨大數量的網站證明了這種腳本語言的成功。

因此我們認爲結合Java(用在後臺、模型和底層服務),把PHP/Quercus用於表現層以及任何需要腳本的地方(如取代BPEL),會是最佳的選擇。
我們還問到如何比較PHP和其他語言,如Ruby和Groovy。我們請Scott告訴我們爲什麼他寫了一個PHP而不是Ruby解釋器?

Scott:我們希望選擇一門已經在Web開發社區裏證明了自身的語言,而PHP是佔統治地位的語言。Ruby目前仍然是一門實驗性的語言。Ruby語言雖然有很多令人喜愛之處,但也有一些問題。Ruby使用了一些高級語言結構如閉包和Continuation,從這個方面來說很像Scheme。我個人很喜歡這些特性,但我的經歷告訴我很多程序員都會被這些東西嚇倒,因此會損害接受程度。PHP就像BASIC,任何人都可以學會。我會捧Ruby的場,我希望它成功,但當我們必須選擇如何分配有限的時間,我們不得不先讓Ruby等等看。
我們問Jerry是否認爲PHP會繼續成長,特別是在面臨Ruby on Rails的競爭之下。我們還詢問了PHP5中引入的面向對象是否讓PHP更適合Project Zero這樣的框架。最後,由於Project Zero同時支持Groovy和PHP,我們問Jerry一個新接觸Project Zero並且不懂Groovy也不懂PHP的開發者,應該選擇哪種語言:

Jerry:PHP是和Ruby或者Groovy不一樣的動態腳本語言……這話大概沒錯。不過,要想讓世界上最受歡迎的應用(想想看Wordpress、PHPBB……)都用這些語言編寫,它們還有很長的路要走。只要PHP應用還在發揮作用,就會有新的開發者學習PHP。考慮到大學生中流行的大多數工具都是用PHP寫的,將會繼續出現新一代的PHP程序員。

雖然如此,PHP是否會繼續成長還不清楚……它已經很龐大了,而且還存在很多競爭者,它們的語法更加清晰更加簡潔。到時候再看。

不過,(PHP語言有或沒有OO特性)這並不是PHP被包括進Project Zero的原因。包括它是因爲ACE。……如果你是一名Java程序員,應該從Groovy開始。Java程序員已經期盼了很久Project Zero所提供的那種敏捷特徵。我們希望這對你“百利而無一害”。你既可以接着用Java,又可以做動態腳本編程。然而,如果你沒有深厚的Java背景,或者你打算利用網上已經存在的資源——PHP是創造敏捷應用的好手段。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章