PHP 3之后的主要語(yǔ)言開發(fā)者之一、Zend公司的創(chuàng)始人之一Andi Gutmans最近在blog中直言不諱地批評(píng)了Java語(yǔ)言。他指出,目前Java廠商試圖在JVM上提供動(dòng)態(tài)語(yǔ)言實(shí)現(xiàn)的路子根本不對(duì),應(yīng)該全面擁抱標(biāo)準(zhǔn)的動(dòng)態(tài)語(yǔ)言。
由于Gutmans的特殊地位,他的這篇長(zhǎng)文已經(jīng)在技術(shù)界引發(fā)了強(qiáng)烈爭(zhēng)議。參見其blog上和TSS上的討論1,2。
下面是對(duì)全文的一個(gè)編譯版本,基本反映了原貌。其中對(duì)多核環(huán)境中多線程(JVM)與多進(jìn)程(LAMP)的比較,C語(yǔ)言生態(tài)系統(tǒng)以及開源語(yǔ)言與Java等廠商語(yǔ)言和技術(shù)的比較,感覺都是非常有價(jià)值的。
PHP 3之后的主要語(yǔ)言開發(fā)者之一、Zend公司的創(chuàng)始人之一Andi Gutmans最近在blog中直言不諱地批評(píng)了Java語(yǔ)言。他指出,目前Java廠商試圖在JVM上提供動(dòng)態(tài)語(yǔ)言實(shí)現(xiàn)的路子根本不對(duì),應(yīng)該全面擁抱標(biāo)準(zhǔn)的動(dòng)態(tài)語(yǔ)言。
由于Gutmans的特殊地位,他的這篇長(zhǎng)文已經(jīng)在技術(shù)界引發(fā)了強(qiáng)烈爭(zhēng)議。參見其blog上和TSS上的討論1,2。
下面是對(duì)全文的一個(gè)編譯版本,基本反映了原貌。其中對(duì)多核環(huán)境中多線程(JVM)與多進(jìn)程(LAMP)的比較,C語(yǔ)言生態(tài)系統(tǒng)以及開源語(yǔ)言與Java等廠商語(yǔ)言和技術(shù)的比較,感覺都是非常有價(jià)值的。
翻譯上的問(wèn)題,請(qǐng)多指教。
--------------------------------------------------------------------------------
Gutmans回憶自己幾 年前參與的一個(gè)基于IBM Websphere的大型企業(yè)級(jí)項(xiàng)目。項(xiàng)目團(tuán)隊(duì)中無(wú)論開發(fā)還是架構(gòu)人員都非常出色,但其中最優(yōu)秀的人與Andi談起PHP和動(dòng)態(tài)語(yǔ)言時(shí),還是將之視為玩具 語(yǔ)言。這在當(dāng)時(shí)正是Java界對(duì)動(dòng)態(tài)語(yǔ)言的典型心態(tài)。但是,他們恰恰忽視了Web,因此Java EE設(shè)計(jì)時(shí)并沒有以Web為中心,而且關(guān)注在企業(yè)集成、事務(wù)管理和其他后端處理上。雖然Java EE通過(guò)servlet和JSP支持Web開發(fā)也有不短的歷史,但是掌握標(biāo)準(zhǔn)發(fā)展的大公司們忽視了Web的RESTful本質(zhì),仍然在向通用平臺(tái)的方向上 走。
而與此同時(shí),建于C語(yǔ)言庫(kù)和工具的生態(tài)系統(tǒng)之上的LAMP架構(gòu),則成了Web程序最流行的開發(fā)平臺(tái)。其中最常用的語(yǔ)言是PHP。由于PHP專注于 Web開發(fā),而且為此不斷演變,它簡(jiǎn)直就是為Web范型(paradigm)量身打造的,能夠快速和容易地解決常見的Web問(wèn)題,因此獲得了最大的市場(chǎng)份 額。根據(jù)Ajaxian。com的調(diào)查,大約50%的RIA開發(fā)人員都使用PHP。由于各種PHP程序如Wordpress, Drupal, mediaWiki, osCommerce, SugarCRM的流行,這種趨勢(shì)更加明顯。
隨著大多數(shù)業(yè)務(wù)應(yīng)用程序包括CRM、ERP、報(bào)表、文檔管理等等也都轉(zhuǎn)向了Web,那些大的Java廠商都意識(shí)到,Java對(duì)Web范型的形成和 發(fā)展影響甚微,因此他們開始支持各種標(biāo)準(zhǔn)和非標(biāo)準(zhǔn)的Java Web框架(JSF、Struts、Spring MVC等等),要使Java適應(yīng)Web。這些框架雖然有些也取得了一定成功,但是它們都無(wú)法解決Java在Web上的主要問(wèn)題:由于嚴(yán)格的類型化和架構(gòu)過(guò) 度復(fù)雜,開發(fā)時(shí)間和開發(fā)人員的技能要求都更高,也就是說(shuō),總成本無(wú)法令人滿意。
而且,大的Java廠商還什么都想占著。一方面想融入Web,一方面又不肯放棄自己已經(jīng)在Java上建立起來(lái)的數(shù)十億計(jì)的生意。甚至動(dòng)態(tài)語(yǔ)言的廣泛流行都未能顯著改變他們的行為模式。但是隨著微軟雄心勃勃的多語(yǔ)言運(yùn)行環(huán)境。NET的出現(xiàn),大勢(shì)又變了。
成功的動(dòng)態(tài)語(yǔ)言包括PHP, Perl, Python和Ruby都是用C寫的,充分利用了C語(yǔ)言庫(kù)生態(tài)系統(tǒng)的廣泛性和深入性。而且它們都是社區(qū)驅(qū)動(dòng)的,沒有什么正二八經(jīng)的語(yǔ)言規(guī)范,發(fā)展不會(huì)被公 司政治所阻礙。這些語(yǔ)言都是由使用者自己開發(fā)的,他們只有一個(gè)目的:快速搞定工作。因此語(yǔ)言可能在小的版本更新時(shí)就加入重要的改進(jìn)。這種敏捷本質(zhì)正是適應(yīng) Web應(yīng)用快速變化必需的。
而且,LAMP的部署方式有顯著的優(yōu)勢(shì)。在多進(jìn)程架構(gòu)中,Web服務(wù)器和動(dòng)態(tài)語(yǔ)言軟件中的故障一般不會(huì)使網(wǎng)站垮掉。雖然會(huì)有某個(gè)進(jìn)程崩潰,但其他 服務(wù)Web請(qǐng)求的進(jìn)程仍然可以繼續(xù)運(yùn)行。這與JVM這種多線程的環(huán)境中軟件故障包括崩潰和死鎖通常都會(huì)使系統(tǒng)垮掉,形成了鮮明對(duì)比。 而且在特定時(shí)間后回收進(jìn)程的能力能夠防止內(nèi)存泄漏和內(nèi)存碎片化這兩種常見的內(nèi)存問(wèn)題使軟件隨著時(shí)間推移性能降低。LAMP上軟件更新時(shí),可以輕松和漸增地 推到服務(wù)器,無(wú)需冗長(zhǎng)的構(gòu)建和打包。雖然有時(shí)這會(huì)帶來(lái)不規(guī)范、不嚴(yán)格的問(wèn)題,但是只要正確實(shí)施,開發(fā)人員和運(yùn)營(yíng)人員的日子都會(huì)好過(guò)得多。
相比之下,Java廠商受困于與Java綁定太緊對(duì)多種語(yǔ)言的支持很少的JVM。他們并沒有轉(zhuǎn)向能夠使其客戶兩全其美的LAMP和Java技術(shù)松 耦合的模型,而是患得患失,怕失去對(duì)客戶的控制,競(jìng)相在JVM上提供動(dòng)態(tài)語(yǔ)言。無(wú)論是微軟這個(gè)強(qiáng)敵,還是Java中互相競(jìng)爭(zhēng)的廠商,都在實(shí)施自己的動(dòng)態(tài)語(yǔ) 言策略。
現(xiàn)在,Sun正在其Java EE解決方案上支持JRuby和Jython而投入;IBM Websphere集團(tuán)則認(rèn)識(shí)到Java EE平臺(tái)運(yùn)行現(xiàn)代Web應(yīng)用的無(wú)效,在Project Zero上大力投入,該項(xiàng)目的目的是使IBM在Web 2。0世界中也能有一席之地,目前支持Groovy和PHP;BEA也有一些孵化項(xiàng)目,但是被Oracle并購(gòu)后,這些項(xiàng)目是否能有結(jié)果目前不明。Project Zero的 首席架構(gòu)師是IBM公司里最先公開承認(rèn)Java現(xiàn)在可以認(rèn)為只是一種系統(tǒng)語(yǔ)言而不適合構(gòu)建RESTful Web應(yīng)用的幾個(gè)人之一。而構(gòu)建RESTful Web應(yīng)用正是Project Zero的目的。Java堡壘花了10年多時(shí)間才承認(rèn)Java在Web上投資回報(bào)不佳,而目前的趨勢(shì),將有更多的客戶做出更明智的選擇。動(dòng)態(tài)語(yǔ)言將有大的 提升。與大型機(jī)一樣,Java已經(jīng)在企業(yè)級(jí)IT和關(guān)鍵業(yè)務(wù)應(yīng)用中根深葉茂,因此不會(huì)很快消失。但是在Web應(yīng)用上,Java語(yǔ)言很可能會(huì)在市場(chǎng)份額上急劇 下降。
問(wèn)題在于,非微軟的Web市場(chǎng)是會(huì)采用動(dòng)態(tài)語(yǔ)言的JVM實(shí)現(xiàn),還是容納這些語(yǔ)言事實(shí)標(biāo)準(zhǔn)實(shí)現(xiàn)的LAMP架構(gòu)。雖然我認(rèn)為會(huì)有客戶被前者吸引,但是市場(chǎng)主流還是會(huì)選擇LAMP。原因在于:
1。 標(biāo)準(zhǔn)實(shí)現(xiàn)更新速度很快,而JVM版本總是滯后,會(huì)帶來(lái)兼容性問(wèn)題。這與Mono跟不上。NET的問(wèn)題類似。
2。 JVM最初設(shè)計(jì)時(shí)并沒有考慮支持動(dòng)態(tài)語(yǔ)言,因此在可見的將來(lái),要滿足實(shí)際需求,挑戰(zhàn)非常大。像閉包、間接方法調(diào)用和類型juggling等動(dòng)態(tài)特性就不容易解決,這從目前JRuby與Ruby的C版本的比較中可以看出。而且,硬件廠商是否有興趣跟上也是有待觀察的。而開源技術(shù)就沒有這種問(wèn)題。
3。 現(xiàn)代Web的可伸縮需求對(duì)Web層的處理強(qiáng)度的要求越來(lái)越大。基于C的架構(gòu)更可能與操作系統(tǒng)底層(原文為primitives)最有效地互操作,提供高 效、內(nèi)存占用小的架構(gòu),滿足這種強(qiáng)度。高性能的Web服務(wù)器比如lighttpd, Zeus, IIS 7,高性能的緩存系統(tǒng)比如Facebook等最大的網(wǎng)站使用的memcached,還有其他性能關(guān)鍵的子系統(tǒng)比如內(nèi)存管理,都是例子。
4。 多核系統(tǒng)非常適合LAMP架構(gòu)的多進(jìn)程方式。隨著芯片業(yè)現(xiàn)在把主要精力都放在了多核而不是超線程技術(shù)上,JVM這樣的多線程環(huán)境的優(yōu)點(diǎn)在今天的硬件上將無(wú)法充分發(fā)揮。而多進(jìn)程方式將提供更多穩(wěn)定性和可靠性。
5。 由于LAMP的簡(jiǎn)單性,它對(duì)于開發(fā)人員而言進(jìn)入門檻非常低,而又能夠提供很好的伸縮性,包括Yahoo和Facebook這樣的大規(guī)模產(chǎn)品系統(tǒng)。
總而言之,越來(lái)越清楚的是,動(dòng)態(tài)語(yǔ)言將逐漸成為Web開發(fā)的標(biāo)準(zhǔn)。微軟和Java廠商都認(rèn)識(shí)到這個(gè)趨勢(shì),現(xiàn)在正在各自的軟件平臺(tái)之大力投入,給出 解決方案。但是,因?yàn)橹饕獎(jiǎng)討B(tài)語(yǔ)言社區(qū)都是在。NET CLR和Java JVM軟件平臺(tái)之外發(fā)展起來(lái)的,這些廠商如果只是想依靠將成功的動(dòng)態(tài)語(yǔ)言復(fù)制到自己的平臺(tái)上而反敗為勝,他們將處于困難的境地。有些廠商已經(jīng)意識(shí)到這一情 況,采用了一些混合策略,同時(shí)為客戶提供動(dòng)態(tài)語(yǔ)言的標(biāo)準(zhǔn)實(shí)現(xiàn),雖然還沒有完全與其解決方案組合配合起來(lái)。微軟在PHP上的投入就是如此,Sun也開始為客 戶提供原生的Ruby和PHP實(shí)現(xiàn)。我相信雖然JVM向動(dòng)態(tài)語(yǔ)言拋出的橄欖枝可能會(huì)吸引一些Java客戶,但是這無(wú)法跟上開源社區(qū)開發(fā)原生動(dòng)態(tài)語(yǔ)言實(shí)現(xiàn)的 步伐。JVM的動(dòng)態(tài)語(yǔ)言實(shí)現(xiàn)對(duì)于Java廠商與時(shí)俱進(jìn)是不夠的,它們需要全面地?fù)肀г氖聦?shí)標(biāo)準(zhǔn)的社區(qū)驅(qū)動(dòng)的動(dòng)態(tài)語(yǔ)言。