如果人們非要拿C++和Java來作比較,我建議他們?nèi)ラ喿xThe Design and Evolution of C++,看看C++為什么是今天這個樣子,用我在設(shè)計C++時遵從的原則來檢驗這兩種語言。這些原則與SUN的Java開發(fā)小組所持的理念顯然是不同的。除了表面語法的相似性之外,C++與Java是截然不同的語言。在很多方面,Java更像Smalltalk。(Sun的培訓(xùn)教材清楚地寫道:Java在設(shè)計上采用了與C++相似的語法,與Smalltalk相似的語義。所以可以說Java與C++是貌合神離,與Smalltalk才是心有靈犀。)Java語言相對簡單,這部分是一種錯覺,部分是因為這種語言還不完整。隨著時間的推移,Java在體積和復(fù)雜程度上都會大大增長。在體積上它會增長兩到三倍,而且會出現(xiàn)一些實現(xiàn)相關(guān)的擴(kuò)展或者庫。這是一條每個成功的商業(yè)語言都必須走過的發(fā)展之路。隨便分析一種你認(rèn)為在很大范圍內(nèi)取得了成功的語言,我知道肯定是無有例外者,而且實際上這非常有道理。
上邊這段話是在Java 1.1推出之前寫的。我確信Java需要類似模板的機(jī)制,并且需要增強(qiáng)對于固有類型的支持。簡單地說,就是為了基本的完整性也應(yīng)該做這些工作。另外還需要做很多小的改動,大部分是擴(kuò)展。1998年秋,我從James Gosling(Java語言的創(chuàng)始人)那里得到一份建議書,說是要在Java中增加固有類型、操作符重載以及數(shù)學(xué)計算支持。
還有一篇論文,是數(shù)學(xué)分析領(lǐng)域的世界級大師,伯克利大學(xué)的W. Kahan教授所寫的How Java's Floating-Point Hurts Everyone Everywhere(且看Java的浮點(diǎn)運(yùn)算如何危害了普天下的蕓蕓眾生),揭露了Java的一些秘密。我發(fā)現(xiàn)在電視和出版物中關(guān)于Java的鼓吹是不準(zhǔn)確的,而且氣勢洶洶,讓人討厭。大肆叫囂凡是非Java的代碼都是垃圾,這是對程序員的侮辱;建議把所有的保留代碼都用Java重寫,這是喪心病狂,既不現(xiàn)實也不負(fù)責(zé)任。Sun和他的追隨者似乎覺得為了對付微軟罪惡的“帝國時代”,就必須如此自吹自擂。但是侮辱和欺詐只會把那些喜歡使用不同編程語言的程序員逼到微軟陣營里去。
Java并非平臺無關(guān),它本身就是平臺。跟Windows一樣,它也是一個專有的商業(yè)平臺。也就是說,你可以為Windows/Intel編寫代碼,也可以為Java/JVM編寫代碼,在任何一種情況下,你都是在為一個屬于某個公司的平臺寫代碼,這些代碼都是與該公司的商業(yè)利益扯在一起的。當(dāng)然你可以使用任何一種語言,結(jié)合操作系統(tǒng)的機(jī)制來編寫可供JVM執(zhí)行的程序,但是JVM之類的東西是強(qiáng)烈地偏向于Java語言的。它一點(diǎn)也不像是通用的、公平的、語言中立的VM/OS。私下里,我會堅持使用可移植的C++作大部分工作,用不同的語言作余下的工作。
“Java is not platform-independent, it is the platform”,B. S的這句評語對于C++用戶有著很大的影響,有些C++高手甚至把這句話作為自己的簽名檔,以表明對Java的態(tài)度和誓死捍衛(wèi)C++的決心。
注: Bjarne Stroustrup博士,1950年出生于丹麥,先後畢業(yè)于丹麥阿魯斯大學(xué)和英國劍撟大學(xué),AT&T大規(guī)模程序設(shè)計研究部門負(fù)責(zé)人,AT&T 貝爾實驗室和ACM成員。1979年,B. S開始開發(fā)一種語言,當(dāng)時稱為"C with Class",後來演化為C++。1998年,ANSI/ISO C++標(biāo)準(zhǔn)建立,同年,B. S推出其經(jīng)典著作The C++ Programming Language的第三版。C++的標(biāo)準(zhǔn)化標(biāo)志 B. S博士傾20年心血的偉大構(gòu)想終於實現(xiàn)。