Java 與 .NET 的平臺發展之爭

csdn發表於2013-08-27

  Java 8即將正式釋出,從早期版本中,我們已經可以領略到一些令人興奮的特性。但是開發者Andrew C. Oliver表示,儘管如此,Java語言在某些特性上還是落後於.Net。比如,Java 8中最令人期待的Lambda表示式,在2007年釋出的.Net 3.5中已經存在了。他認為,.Net已有的和即將到來的特性要比Java 8優秀得多,如果Java 9再不做一些大的改進,那麼Java落後於.Net就不止一點點了。

Java 與 .NET 的平臺發展之爭

  關於更新速率

  微軟有能力做出更快的改進。我記得在很早期的時候,微軟能做到每週都更新資料庫API:從ODBC、RDO、ADO到OLEDB等。自從出現了.Net之後,微軟便達到了一種前所未有的更新速度。

  但是Java為什麼落後這麼遠?在早期的時候,Java的發展也是非常快速的,從Java 1.0.2 到 Java 1.1,僅僅一年時間,我們就看到了Java徹底地改變。從Java 1.1到Java 1.2只用了一年半時間,而Java 1.2.2只用了7個月的時間(這是一個重要的版本,只是使用了一個小版本號)。而在10個月之後,具有關鍵意義的Java 1.3問世,這也正是Java發行的第一個帶有垃圾回收的版本。

  Java 1.4為我們帶來了NIO和正規表示式,但在之後不到兩年的時間裡就被取消了。Java 1.4.2版本帶來了用於多核環境的垃圾回收器。Java 1.5帶來了可用於生產環境的並行和併發GC(垃圾回收)特性,它還新增了更重要的併發和NIO功能,不過這一過程花了一年多的時間。

  總的來說,Java還是有不錯的表現的,Java 6使鎖變得更廉價,但其在本質上和Java 1.5是一樣的,還是讓使用者多等了2年時間。Java 7是第一個對底層VM技術做出重大改變的版本,同時還給使用者帶來了invokedynamic特性——用於在JVM上更好地連線其它語言,但是在兩個大版本的更新之間用了大概5年時間,這個進度著實有些太慢了。

Java 與 .NET 的平臺發展之爭

  為什麼Java進展緩慢?

  對於這個問題有一個簡單的解釋:Sun並不是一個實力超群的公司。Java創造於網際網路繁榮時期,而那個時候Sun正在出售Sparc業務。

  之後,網際網路經濟不景氣,Sun決定持續加大其在硬體業務中的投入。Sun比較擅長建立生態系統,但它就是無法創造出使用者需要的產品。Oracle是Sun的後繼者,擅於徹底毀壞生態系統,最終吞併/摧毀圈內的同行,還會開發出高利潤的產品來取代同行。

  Oracle曾在一份簡潔的公開宣告中稱:“我們都知道,由於各種商業和政治原因,該版本(Java 7)花費了不少時間。”

  當然,在分析Java的問題上,我們還必須考慮Sun公司的財政困難以及Java系統周邊的東西。Sun公司違背了其提交Java進行標準化的初衷,它創造了自己的“標準”委員會,即JCP(Java社群程式)。隨著時間的推移,JCP儘管在一定程度上已經開放,但是無論是Sun還是現在的Oracle,都擁有絕對的否決權,它們可以忽略規則,做任何想要的事情。

  什麼阻礙了JCP?不是開放性,而是利益衝突。我記得當時參與EJB3規範制定的某個供應商,它習慣延遲規範的進度。這是為什麼呢?這些供應商需要購買或開發一個產品來整合到它們的應用伺服器中,如果下一代JavaEE規範已經發布,那麼它們也必須儘快推出產品,它們不希望比市場晚。

  協調產品的釋出,對於一個公司來說都有些難,更不用說幾個公司了。因此,我認為Java最大的問題並不是由於JCP造成的。

  拋棄或分離一些東西

  Sun已經成為了過去時,現在Oracle是“老闆”,那麼為什麼Java版本的釋出週期仍然需要這麼長?最簡單的解釋是——Java太大。大專案往往意味著進展比較緩慢,且充滿風險。下面我們就來看看如何將Java變得小一些。

  首先,Oracle必須擺脫其“心愛”的客戶端技術。當然,目前還沒有更好的Swing和JavaFX的替代品,但是使用這些技術意味著需要把你捆綁在Oracle的平臺上——至少目前是這樣。

  我尚不清楚,目前JavaFX或客戶端Java為Oracle帶來的戰略上的意義是什麼,它們似乎被設計用來和VB6、Flash或一些4GL(第四代語言)進行競爭的。在現代的、多平臺的環境中,大部分人會認為觸控和滑動操作會更酷一些,而JavaFX與這種趨勢是不相匹配的。為什麼我們需要使用客戶端Java來阻礙伺服器端的發展,並且還有可能伴隨著各種風險,比如持續數月的Java零日漏洞安全問題以及關於如何禁用Java的討論。

  如今Java語言已經不再和Java平臺一樣重要。從Java平臺中砍掉Java語言,並根據自己的時間表進行釋出,這對於Oracle來說可能更容易——Oracle推出的開發工具不是Java業務的重要組成部分,並沒有為大部分的Java開發者所使用。

  Java平臺上有多種語言,比如JRuby、Scala等等。以高效能和可擴充套件的方式來支援這些語言和技術,對於雲端計算來說非常重要。如果雲端計算是未來,那麼Oracle應該首先考慮Java平臺。而目前所支援Ruby、Scala、甚至Node.js的Java平臺似乎是一個“錨”,而不是產生創新的“引擎”。

  比起Mark Reinhold(Java SE規範領導者,目前在Oracle公司),我更希望由Charles Nutter(JRuby創始人,目前在Red Hat公司)和Martin Odersky(Scala創始人,目前在Typesafe公司)來決定在Java平臺中新增哪些特性。我並沒有不尊重Mark Reinhold的意思,但是一些證據表明,在很多與Java語言合作的專案中,Java語言拖慢了專案的進度。

  對於Oracle領導的Java來說,事情發展不會那麼順利,很多Sun之前的決議現在仍然在困擾著我們。我的建議是,拋棄客戶端Java,獨立出JVM和Java語言的釋出週期,致力於將Java作為一個平臺,而不是想一次性地解決所有問題。

  英文來源:Java faces tough climb to catch up to .Net

相關文章