C++當(dāng)年從應(yīng)用開發(fā)的王座上跌落,不是因?yàn)樗心0澹且驗(yàn)樗鄙俑鼜?qiáng)的動(dòng)態(tài)能力。基本上C++就是一種靜態(tài)語言,其所謂動(dòng)態(tài)性都是就編譯時(shí)而言的。一旦編譯完成就成為鐵板一塊。這個(gè)問題在單機(jī)時(shí)代還可以將就,到了網(wǎng)絡(luò)時(shí)代就是不可容忍的問題。因此,按照毛主席的矛盾論思想說,實(shí)際上C++在90年代中期面臨的主要矛盾是落后的靜態(tài)執(zhí)行模型與應(yīng)用程序動(dòng)態(tài)化之間的矛盾。但是C++當(dāng)時(shí)并沒有著力解決這個(gè)矛盾(到現(xiàn)在連個(gè)統(tǒng)一的ABI都沒有),反而在次要矛盾(開發(fā)效率)上下功夫,花了極大的精力去完善模板設(shè)施。再加上其他固有的問題(GC, debug, pointer, 復(fù)雜性),C++就從王座上跌下來了。
這也可以解釋,為什么Windows/MFC/COM仍然是目前C++應(yīng)用的單一最大場(chǎng)合——因?yàn)镃OM是微軟為C++提供的一個(gè)動(dòng)態(tài)運(yùn)行環(huán)境。遺憾的是,COM設(shè)計(jì)得太復(fù)雜,而且犯了一些錯(cuò)誤(讀讀這篇文章http://www.relisoft.com/win32/olerant.html),所以跟后來的那些什么Java、.NET相比就相形見絀了。
總之,C++仍然是目前制造單塊系統(tǒng)最好的語言(效率高,抽象機(jī)制豐富,可移植性好),但用于構(gòu)造整個(gè)應(yīng)用,特別是網(wǎng)絡(luò)應(yīng)用,就很不合適了,至少是不經(jīng)濟(jì)。
因此,C++未來的位置只能是不斷完善自己作為系統(tǒng)級(jí)部件語言的位置。從這個(gè)角度看:
1. Ice:用C++開發(fā)了完整的網(wǎng)絡(luò)中間件,解決了動(dòng)態(tài)性問題,并且可以跨語言。這是我認(rèn)為3年以來C++開發(fā)中最令人激動(dòng)的項(xiàng)目。
2. 陳榕的Elastos:陳榕對(duì)于這個(gè)問題的認(rèn)識(shí)是很深刻的。幾年以前他給我講得其實(shí)就是這個(gè)道理,只不過我最近才想明白。他認(rèn)為在構(gòu)造單個(gè)部件方面,C++由于C#、VB、Java,特別是在嵌入式平臺(tái)上優(yōu)勢(shì)明顯。而主要的缺陷是C++部件的動(dòng)態(tài)性能極度匱乏,這里的關(guān)鍵因素又是因?yàn)镃++部件中的metadata匱乏。因此陳榕給C++部件添加完整的metadata,并開發(fā)運(yùn)行時(shí)來支持。陳榕的思想實(shí)際上與Ice是一致的,只不過兩者一個(gè)是從CORBA出來的,一個(gè)是從COM出來的,殊途同歸而已。我非常認(rèn)同陳榕的發(fā)展方向,唯一的擔(dān)憂是,陳榕的C++部件metadata是與.NET兼容的,而目前企業(yè)應(yīng)用中的主流是Java。這個(gè)矛盾應(yīng)該得到解決。如果陳榕的Elastos能夠同時(shí)兼容Java的metadata和.NET的metadata,我相信他會(huì)取得成功。
3. 微軟的C++/CLI,這個(gè)東西被罵得很慘,其實(shí)放在大背景下考慮,它是有意義的。實(shí)際上它的出現(xiàn)是同樣基于我上面提到的一個(gè)觀點(diǎn),即做零件的話,你們誰也不如C++。所以C++是有優(yōu)勢(shì)的,只不過要把C++作出來的零件跟其他的零件自如拼裝。C++/CLI致力于在.NET體系內(nèi)部解決這個(gè)問題,不能說這個(gè)想法是不對(duì)的,我認(rèn)為這個(gè)技術(shù)將會(huì)得到一定程度的應(yīng)用。
4. 相比之下,像ACE/MFC/Qt這類大型的框架,雖然已經(jīng)非常成熟,但是未來將局限在一個(gè)比較小的領(lǐng)域里,局面會(huì)比較尷尬。因?yàn)樗鼈兪怯脕黹_發(fā)整個(gè)應(yīng)用程序的,而未來大家不太會(huì)用C++來開發(fā)整個(gè)應(yīng)用。那么用它們來開發(fā)部件如何呢?不好,因?yàn)樗鼈冮_發(fā)出來的部件不能與外界交互。不過ACE還是有一定空間的,因?yàn)樗目梢浦残猿茫梢酝度霑r(shí)平臺(tái)上擠,而且在上面還有TAO和CIAO。
5. ATL怎樣呢?那完全取決于COM的命運(yùn)。只要COM在Windows中還處于核心的地位,ATL就還是很重要的技術(shù)。
6. Boost對(duì)于C++來說,只是一個(gè)補(bǔ)充性質(zhì)的事件,無關(guān)乎大局。
7. 我一直堅(jiān)信未來會(huì)出現(xiàn)高低搭配的局面,像Java/C#這樣的半動(dòng)不靜的中級(jí)語言會(huì)逐漸“淪為”JVM和CLR上的系統(tǒng)語言,應(yīng)用開發(fā)的任務(wù)必將由更加動(dòng)態(tài)的腳本語言承擔(dān)。目前的Python, Ruby和Lua都有可能。如果從我的角度講,我希望最后勝出的是Lua,因?yàn)镻ython思維有些混亂,Ruby雖然很純,但是語言設(shè)計(jì)過于復(fù)雜,只有Lua是符合我的美學(xué)觀——簡(jiǎn)單而又強(qiáng)大,這一點(diǎn)跟云風(fēng)意見一致。