Java特別象C++;由此很自然地會得出一個結論:C++似乎會被Java取代。但我對這個邏輯存有一些疑問。無論如何,C++仍有一些特性是Java沒有的。而且盡管已有大量保證,聲稱Java有一天會達到或超過C++的速度。但這個突破迄今仍未實現(盡管Java的速度確實在穩步提高,但仍未達到C++的速度)。此外,許多領域都存在為數眾多的C++愛好者,所以我並不認為那種語言很快就會被另一種語言替代(愛好者的力量是容忽視的。比如在我主持的一次“中/高級Java研討會”上,Allen Holub聲稱兩種最常用的語言是Rexx和COBOL)。
我感覺Java強大之處反映在與C++稍有不同的領域。C++是一種絕對不會試圖迎合某個模子的語言。特別是它的形式可以變化多端,以解決不同類型的問題。這主要反映在象Microsoft Visual C++和Borland C++ Builder(我最喜歡這個)那樣的工具身上。它們將庫、組件模型以及代碼生成工具等合成到一起,以開發視窗化的末端用戶應用(用於Microsoft Windows操作系統)。但在另一方面,Windows開發人員最常用的是什麼呢?是微軟的Visual Basic(VB)。當然,我們在這兒暫且不提VB的語法極易使人迷惑的事實——即使一個只有幾頁長度的程序,產生的代碼也十分難於管理。從語言設計的角度看,盡管VB是那樣成功和流行,但仍然存在不少的缺點。最好能夠同時擁有VB那樣的強大功能和易用性,同時不要產生難於管理的代碼。而這正是Java最吸引人的地方:作為“下一代的VB”。無論你聽到這種主張後有什麼感覺,請無論如何都仔細想一想:人們對Java做了大量的工作,使它能方便程序員解決應用級問題(如連網和跨平台UI等),所以它在本質上允許人們創建非常大型和靈活的代碼主體。同時,考慮到Java還擁有我迄今為止尚未在其他任何一種語言裡見到的最“健壯”的類型檢查及錯誤控制系統,所以Java確實能大大提高我們的編程效率。這一點是勿庸置疑的!
但對於自己某個特定的項目,真的可以不假思索地將C++換成Java嗎?除了Web程序片,還有兩個問題需要考慮。首先,假如要使用大量現有的庫(這樣肯定可以提高不少的效率),或者已經有了一個堅實的C或C++代碼庫,那麼換成Java後,反映會阻礙開發進度,而不是加快它的速度。但若想從頭開始構建自己的所有代碼,那麼Java的簡單易用就能有效地縮短開發時間。
最大的問題是速度。在原始的Java解釋器中,解釋過的Java會比C慢上20到50倍。盡管經過長時間的發展,這個速度有一定程度的提高,但和C比起來仍然很懸殊。計算機最注重的就是速度;假如在一台計算機上不能明顯較快地干活,那麼還不如用手做(有人建議在開發期間使用Java,以縮短開發時間。然後用一個工具和支撐庫將代碼轉換成C++,這樣可獲得更快的執行速度)。
為使Java適用於大多數Web開發項目,關鍵在於速度上的改善。此時要用到人們稱為“剛好及時”(Just-In Time,或JIT)的編譯器,甚至考慮更低級的代碼編譯器(寫作本書時,也有兩款問世)。當然,低級代碼編譯器會使編譯好的程序不能跨平台執行,但同時也帶來了速度上的提升。這個速度甚至接近C和C++。而且Java中的程序交叉編譯應當比C和C++中簡單得多(理論上只需重編譯即可,但實際仍較難實現;其他語言也曾作出類似的保證)。
在本書附錄,大家可找到與Java/C++比較.對Java現狀的觀察以及編碼規則有關的內容。