Java特別象C++监憎;由此很自然地會得出一個結(jié)論:C++似乎會被Java取代纱意。但我對這個邏輯存有一些疑問。無論如何鲸阔,C++仍有一些特性是Java沒有的偷霉。而且盡管已有大量保證,聲稱Java有一天會達(dá)到或超過C++的速度褐筛。但這個突破迄今仍未實(shí)現(xiàn)(盡管Java的速度確實(shí)在穩(wěn)步提高类少,但仍未達(dá)到C++的速度)。此外渔扎,許多領(lǐng)域都存在為數(shù)眾多的C++愛好者硫狞,所以我并不認(rèn)為那種語言很快就會被另一種語言替代(愛好者的力量是容忽視的。比如在我主持的一次“中/高級Java研討會”上晃痴,Allen Holub聲稱兩種最常用的語言是Rexx和COBOL)残吩。
我感覺Java強(qiáng)大之處反映在與C++稍有不同的領(lǐng)域。C++是一種絕對不會試圖迎合某個模子的語言倘核。特別是它的形式可以變化多端泣侮,以解決不同類型的問題。這主要反映在象Microsoft Visual C++和Borland C++ Builder(我最喜歡這個)那樣的工具身上紧唱。它們將庫活尊、組件模型以及代碼生成工具等合成到一起,以開發(fā)視窗化的末端用戶應(yīng)用(用于Microsoft Windows操作系統(tǒng))漏益。但在另一方面蛹锰,Windows開發(fā)人員最常用的是什么呢?是微軟的Visual Basic(VB)绰疤。當(dāng)然铜犬,我們在這兒暫且不提VB的語法極易使人迷惑的事實(shí)——即使一個只有幾頁長度的程序,產(chǎn)生的代碼也十分難于管理峦睡。從語言設(shè)計(jì)的角度看翎苫,盡管VB是那樣成功和流行权埠,但仍然存在不少的缺點(diǎn)榨了。最好能夠同時擁有VB那樣的強(qiáng)大功能和易用性,同時不要產(chǎn)生難于管理的代碼攘蔽。而這正是Java最吸引人的地方:作為“下一代的VB”龙屉。無論你聽到這種主張后有什么感覺,請無論如何都仔細(xì)想一想:人們對Java做了大量的工作,使它能方便程序員解決應(yīng)用級問題(如連網(wǎng)和跨平臺UI等)转捕,所以它在本質(zhì)上允許人們創(chuàng)建非常大型和靈活的代碼主體作岖。同時,考慮到Java還擁有我迄今為止尚未在其他任何一種語言里見到的最“健壯”的類型檢查及錯誤控制系統(tǒng)五芝,所以Java確實(shí)能大大提高我們的編程效率痘儡。這一點(diǎn)是勿庸置疑的!
但對于自己某個特定的項(xiàng)目枢步,真的可以不假思索地將C++換成Java嗎沉删?除了Web程序片,還有兩個問題需要考慮醉途。首先矾瑰,假如要使用大量現(xiàn)有的庫(這樣肯定可以提高不少的效率),或者已經(jīng)有了一個堅(jiān)實(shí)的C或C++代碼庫隘擎,那么換成Java后殴穴,反映會阻礙開發(fā)進(jìn)度,而不是加快它的速度货葬。但若想從頭開始構(gòu)建自己的所有代碼采幌,那么Java的簡單易用就能有效地縮短開發(fā)時間。
最大的問題是速度宝惰。在原始的Java解釋器中植榕,解釋過的Java會比C慢上20到50倍。盡管經(jīng)過長時間的發(fā)展尼夺,這個速度有一定程度的提高尊残,但和C比起來仍然很懸殊。計(jì)算機(jī)最注重的就是速度淤堵;假如在一臺計(jì)算機(jī)上不能明顯較快地干活寝衫,那么還不如用手做(有人建議在開發(fā)期間使用Java,以縮短開發(fā)時間拐邪。然后用一個工具和支撐庫將代碼轉(zhuǎn)換成C++慰毅,這樣可獲得更快的執(zhí)行速度)。
為使Java適用于大多數(shù)Web開發(fā)項(xiàng)目扎阶,關(guān)鍵在于速度上的改善汹胃。此時要用到人們稱為“剛好及時”(Just-In Time,或JIT)的編譯器东臀,甚至考慮更低級的代碼編譯器(寫作本書時着饥,也有兩款問世)。當(dāng)然惰赋,低級代碼編譯器會使編譯好的程序不能跨平臺執(zhí)行宰掉,但同時也帶來了速度上的提升。這個速度甚至接近C和C++。而且Java中的程序交叉編譯應(yīng)當(dāng)比C和C++中簡單得多(理論上只需重編譯即可轨奄,但實(shí)際仍較難實(shí)現(xiàn)孟害;其他語言也曾作出類似的保證)。
在本書附錄挪拟,大家可找到與Java/C++比較.對Java現(xiàn)狀的觀察以及編碼規(guī)則有關(guān)的內(nèi)容