書名: 高質量程序設計指南:C++/C語言作者名: 林銳 韓永泉編著本章字數: 2243字更新時間: 2019-01-09 14:08:56
2.5 Java陣營與Microsoft的較量
1995年5月23日,Sun公司的John Gage和Netscape公司執行副總裁Marc Andressen聯合推出了Java技術。當時Netscape的瀏覽器是進入Internet世界的最主要工具,Netscape大有“微軟終結者”的姿態。
Java最初只是Sun公司一個秘密項目的編程工具。Java的開發者們當初甚至沒有把它發展成一種編程語言的“野心”,更不用說后來的Java平臺了。那是1991年,那個秘密項目叫做“Green Project”,項目人數最多的時候也只有13人。Sun公司啟動這個秘密項目的動機是:他們認為計算模式將轉向基于消費類設備的分布式計算。
“Green Project”小組開發了一個叫做StarSeven的數字設備。當時“Green Project”成員所在辦公室的電話系統將任何電話切過來的操作方式是*7。StarSeven是一個不同數字設備之間的代理(Agent)。StarSeven可以控制多種不同平臺的設備,這得益于Gosling發明的一種叫做“OAK”的跨平臺編程工具,這個“OAK”就是后來大名鼎鼎的Java。OAK的名字來自于Gosling辦公室窗外的一棵橡樹。這些人無意之中發明了可以改變計算機計算模式的技術。
Internet的迅速普及拉開了Java時代的帷幕……
和絕大多數公司一樣,Microsoft也取得了Java的開發許可證。但在隨后推出的Visual J++中,Microsoft提供了依賴于Windows平臺的Java實現,這與Sun推崇的“一次編譯,到處運行”的口號大相徑庭。于是Sun發起了一場“100% Pure Java”的宣傳運動,其聲勢浩大,幾乎成為了一種文化。
Sun還對Microsoft提出訴訟,要求賠償35億美金。Microsoft最后被判決賠償2000萬美金。Microsoft咽不下這口氣,隨之做出了Windows XP系統不再支持Java的決定。Sun又針對Microsoft的這個決定打起了官司,指責Microsoft利用壟斷的力量阻礙Java的發展。
正如評論所說,Sun和Microsoft的這場官司,真正受害的是廣大開發者。
現在,Java陣營的最新平臺是J2EE,Microsoft則推出.NET與之對抗。最有名的一次交鋒是“Pet Store”(寵物商店)性能競賽。
Pet Store是Sun公司推出的一個范例應用程序,用來幫助人們在J2EE平臺上開發應用軟件。完整的Pet Store提供了一個基于瀏覽器的B2C購物環境(當然,你只能買寵物)、一個基于XML的網站管理工具和一個基于Web Service的B2B交易系統。
除了展示J2EE的功能之外,它還展現了Java平臺的其他功能。看看圖2-2,注意到不同的國旗了嗎?這代表了Pet Store的不同語言的版本。在Java中實現多語言是一件比較容易的事。
Pet Store雖小,但是五臟俱全,常用的搜索、賬號和購物車功能都實現了。許多J2EE應用服務器的供應商都在其產品中提供了Pet Store的相應實現。因此在J2EE社區里,Pet Store被奉為圣典。Pet Store對應于J2EE的版本,現在已經推出了1.3版,增加了許多新功能,其無線版本也發布了,這個好東西是免費的。
Pet Store是一個如此有名的范例,以至于Microsoft在推出.NET平臺時,專門實現了一個Pet Store的.NET版本,并且宣稱這個版本比Sun的快了28倍。這在當時激起了軒然大波,無數人都在討論這個話題。

圖2-2 Pet Store的界面
但是,很快證明這只不過是Microsoft的營銷手段而已。Microsoft大概是高興得昏了頭,居然公開了源代碼。于是真相大白了,Microsoft采用了一種與Sun完全不同的體系結構。Pet Store的Sun版本是為了揭示J2EE平臺的各種用法,因此采用了一種復雜的、極具擴展性的體系結構,涵蓋了J2EE的方方面面。而Microsoft的Pet Store完全出于宣傳的考慮,采用了一種極簡單的結構:在ASP頁面中直接調用存儲過程,速度自然快了很多。數年前Microsoft在比較Delphi與Visual Basic時也采用了同樣的手段,他們在Delphi示例程序中使用了一個遠程數據庫調用,而在VB的代碼中卻使用了本地調用。然后宣傳Visual Basic的性能比Delphi的優越。
最具諷刺意義的是,Oracle不久也公開宣稱,它們實現了一個J2EE平臺的Pet Store,比Microsoft的又快了3倍,不知道Oracle用了什么伎倆,事情發展到了這一步,變成了一出鬧劇。
.NET和Java淵源還是很深的。微軟公司挖來Borland的天才Anders Hejlsberg后,他推出的Windows平臺下的Java虛擬機的效率甚至超過了C語言程序的效率。由于Sun的起訴,微軟在推出Visual J++后直接把它轉移到了.NET上,甚至超越了語言。如果Sun不打官司,也許我們現在只學一門Java語言就夠了。本質上Java和.NET都是虛擬運行時平臺上的開發語言。雖然.NET現在好像只支持Windows,但我想這應該只是微軟的市場策略而已——為了鞏固微軟Windows的市場,不支持在其他操作系統上運行,現在能夠影響全世界開發人員的,微軟舍我其誰?!
拋開大公司之間的競爭話題不提,平心靜氣地看Microsoft的.NET和Sun的J2EE,盡管兩者方法不同,但都具備許多優秀的特征,兩者難分優劣。
.NET和J2EE的可移植性都非常好。雖然.NET的核心只能工作在Windows環境下,但從理論上講可以支持多種語言開發,只要這些語言的子集已經定義好,并為它們建立了IL(Intermediate Language)編譯器。對于J2EE來說,只要遵循Java VM規則和一組平臺需要的服務,就可以在任何平臺上工作。由于J2EE平臺的所有規范都已經向公眾公布,許多供應商可以提供J2EE的兼容產品和開發環境。
.NET并不是一種精巧的標志,而是意味著Microsoft產品戰略的重大轉移。Java清除了平臺的障礙,但是為了用J2EE來做開發,用戶必須在Java環境下工作。而.NET是想讓用戶使用自己喜歡的語言來建造.NET應用軟件,這個設想是十分美妙的。
對于Windows環境下的軟件開發商而言,.NET是一個好的架構,用戶可以將許多事情交給.NET去做。例如,ASP.NET比ASP好,ADO.NET比ADO和DCOM出色,C#比C/C++更好用。不過,雖然.NET平臺描繪了美好的藍圖,但其設想要全部成為現實還有較長的路要走。例如,IL公共語言的運行,目前還有某些明顯的不足。想要把每一種語言和元件在運行時集成起來,必須定義這種語言的子集或超集,并清晰地映射到IL上,此外必須定義結構,以便提供IL需要的元數據。還有,必須開發適用于兩種編譯語言結構的編譯器并集成到IL部件的代碼中,同時還要生成對現有IL元件的語言專用接口。
由于歷史原因,若想在Java語言中使用其他語言,必須開發非Java語言到Java VM的眾多轉換器。因此,在Java環境中編寫代碼,就必須承受額外的翻譯工作。如果目標環境是J2EE,程序員通常會選擇Java來編程。如果目標環境是.NET,那么程序員將會選擇C#……