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