Visual C++與Delphi/C++Builder之比較及未來的發(fā)展前景之我見
(作者未知) 2010/5/24
Visual C++與Delphi/C++Builder之比較及未來的發(fā)展前景之我見
由于Delphi與C++Builder同為Inprise公司產(chǎn)品,共享集成開發(fā)界面(IDE),而且
使用同一套VCL框架(這一點最關(guān)鍵),它們帶的調(diào)試器、PVCS/TeamSource團隊開發(fā)支持
、數(shù)據(jù)庫引擎及企業(yè)版中集成的其它高級功能等都是相同的,所以本文將其與C++Build
er歸入"同一陣線"。我在網(wǎng)上見到一些Delphi程序員認為C++Builder與VC比較接近,
這是個誤解。事實上,Delphi和C++Builder除了使用的語言不同,其余幾乎都相同。為
了避免話題轉(zhuǎn)移到C++語言與Object Pascal語言(即Delphi所用的語言)的比較,下文主
要對比分析Visual C++與C++Builder。
首先,從它們的應(yīng)用程序框架(Application Frame,有時也稱為對象框架)進行比
較。Visual C++采用的框架是MFC。MFC不僅僅是人們通常理解的一個類庫。(同樣,Del
phi和C++Builder使用的VCL的概念也不僅僅是一個控件庫。)你如果選擇了MFC,也就選
擇了一種程序結(jié)構(gòu),一種編程風(fēng)格。MFC早在Windows 3.x的時代就出現(xiàn)了,那時的Visu
al C++還是16位的。經(jīng)過這些年的不斷補充和完善,MFC已經(jīng)十分成熟。但由于原型出現(xiàn)
得比較早,MFC相比于VCL落后了一個時代。盡管微軟對MFC的更新沒有停止,我也經(jīng)常讀
到持"只要Windows不過時,MFC就不會過時"之類觀點的文章,但就象Inprise(原Borl
and)的OWL框架的淡出一樣,MFC的淡出也是早晚的事。如果MFC青春永駐,微軟的開發(fā)人
員也不會"私自"開發(fā)出基于ATL的WTL呀。當(dāng)然,WTL的地位不能和MFC比,它并不是微
軟官方支持的框架,封裝的功能也相當(dāng)有限。但至少也反襯出了MFC存在的不足。
我以為,最能體現(xiàn)一個應(yīng)用程序框架的先進性的是它的委托模型,即對Windows消
息的封裝機制。(對Windows API的封裝就不用說了吧。大同小異,也沒什么技術(shù)含量。
如果高興,你也可以自己寫一個類庫來封裝。但對Windows消息驅(qū)動機制的封裝就不是那
么容易的了。)最自然的封裝方式是采用虛成員函數(shù)。如果要響應(yīng)某個消息就重載相應(yīng)的
虛函數(shù)。但出乎我的意料,MFC采用的是"古老"的宏定義方法。用宏定義方法的好處是
省去了虛函數(shù)VTable的系統(tǒng)開銷。(由于Windows的消息種類很多,開銷不算太小。)不過
帶來的缺點就是映射不太直觀。好在較新版本VC帶的ClassWizard可以自動生成消息映射
代碼,使用起來還是比較方便的。但和VCL的委托模型相比,MFC的映射方法就顯得太落
后了。而C++Builder對C++語言進行了擴展,以便引入組件、事件處理、屬性等新特性。
由于功夫做在編譯器級,生成的源代碼就顯得十分簡潔。但是由于擴展的非標準特性,
使用VCL的C++Builder的源代碼無法被其它編譯器編譯。而MFC的功夫做在源代碼級,雖
然消息映射代碼較為復(fù)雜且不直觀,但兼容性非常好。只要你有MFC庫的源代碼(隨VC企
業(yè)版的光盤提供),你的MFC程序理論上用任何符合ANSI標準的編譯器均可編譯通過。C+
+Builder 3以上版本可以原封不動直接編譯Visual C++程序,很多人認為這是C++Build
er的兼容性好,實際上很大程度應(yīng)歸功于MFC的兼容性好。微軟辛辛苦苦用標準方法寫M
FC,卻為對手制造了方便。不知他們作何感想?而因為C++Builder對語言作了擴展,VC
不能編譯C++Builder的程序?磥碓谶@方面VC要輸給C++Builder了。而且VCL所支持的組
件、屬性等都是MFC所缺乏的特性。雖然VC也能支持組件,但要通過AppWizard先生成一
個"包裹"類(wrapper),不如VCL來得簡潔。有很多人使用C++Builder就是沖著控件板
上那一大堆組件來的,VC雖然能使用的(未完,下一頁)
|