宮成剛
以一個(gè)程序員的角度,從技術(shù)水平、功能、性能、易用性、穩(wěn)定性、發(fā)展歷程和前景等方面,Visual C++ 6和Delphi 5這兩大主流開(kāi)發(fā)工具的優(yōu)缺點(diǎn)是什么呢?其中,還將涉及到語(yǔ)言、應(yīng)用框架、控件、編譯和連接、調(diào)試、數(shù)據(jù)庫(kù)開(kāi)發(fā)等。筆者將對(duì)如何選擇使用這兩個(gè)開(kāi)發(fā)工具提出一些建議。
一、語(yǔ)言:存在即是合理
有人認(rèn)為Object Pascal是“玩具語(yǔ)言”,C++才是“專業(yè)語(yǔ)言”,這是不對(duì)的。單從語(yǔ)言本身看,Object Pascal與C++屬同一重量級(jí)。它們都是完全支持面向?qū)ο蟮恼Z(yǔ)言,都扎根于“歷史悠久”的面向過(guò)程的語(yǔ)言。C++由C發(fā)展而來(lái),Object Pascal由Pascal進(jìn)化而來(lái)。它們都有很強(qiáng)的靈活性,都有自己的特長(zhǎng)和不足。例如,Object Pascal不支持多重繼承、模板、操作符重載、內(nèi)聯(lián)函數(shù)定義等等,而這些都是C++支持的。但同樣地,C++也不支持object pascal的虛構(gòu)造函數(shù)、過(guò)程嵌套、內(nèi)置集合類型、內(nèi)置字符串類型等等,在rtti方面Object Pascal也比C++做得好。實(shí)際上,這些并不重要,因?yàn)榭梢酝ㄟ^(guò)其它方式達(dá)到同樣的目的,如C++可以通過(guò)類擴(kuò)展支持集合、字符串,Object Pascal可以通過(guò)“Interface”多重繼承等等。關(guān)鍵是二者都可以很好地完成任務(wù)。
二、編譯和連接:速度的較量
不同的語(yǔ)言帶來(lái)的另一個(gè)不同是:編譯和連接的速度不同,以及執(zhí)行速度的不同。Delphi的編譯和連接速度,比VC快幾十倍。即使把VC的Incremental link選項(xiàng)打開(kāi),Delphi的編譯和連接速度仍比VC快好幾倍。當(dāng)然,這并不是說(shuō)微軟的編譯器不行,這是由C++的復(fù)雜性決定的。模板的處理、預(yù)處理和宏的展開(kāi)都是很費(fèi)時(shí)的。前文已提到Object Pascal沒(méi)有模板、預(yù)處理和宏,這本來(lái)是缺點(diǎn),但其帶來(lái)的一個(gè)好處就是編譯速度極快。至于編譯完的二進(jìn)制代碼,在打開(kāi)相同的優(yōu)化選項(xiàng)的情況下,Delphi和VC的執(zhí)行速度并沒(méi)有太大的差別。
三、應(yīng)用框架:mfc有kfc流行嗎?
應(yīng)用程序框架(application frame),也稱為對(duì)象框架。Visual C++采用的框架是mfc。mfc不僅僅是人們通常理解的一個(gè)類庫(kù)。經(jīng)過(guò)多年的不斷補(bǔ)充和完善,mfc已經(jīng)十分成熟。但由于原型出現(xiàn)得較早,mfc相比于vcl,落后了一個(gè)時(shí)代。盡管微軟對(duì)mfc的更新沒(méi)有停止,但就像inprise的owl框架淡出一樣,mfc的淡出也是早晚的事情。其實(shí),mfc是和owl同一個(gè)時(shí)代的產(chǎn)物。owl已經(jīng)不在了,mfc怎能不“居安思危”呢?如果mfc青春永駐,微軟的開(kāi)發(fā)人員也不會(huì)“私自”開(kāi)發(fā)出基于atl的wtl呀。當(dāng)然,wtl的地位不能和mfc比,它并不是微軟官方支持的框架,封裝的功能也相當(dāng)有限。但至少也反襯出mfc存在的不足。
四、穩(wěn)定性與完善程度:VC是老大哥
VC要比Delphi穩(wěn)定和完善。VC的發(fā)展歷史比Delphi長(zhǎng),微軟的總體實(shí)力比Inprise強(qiáng)。VC的框架mfc經(jīng)歷多年的發(fā)展和完善,功能非常全面,而且十分穩(wěn)定,bug很少。千萬(wàn)不要小看這一點(diǎn),很多專業(yè)程序員就是因?yàn)檫@個(gè)原因選擇VC的。盡管vcl比mfc的抽象程度高,封裝較為高層,但由此帶來(lái)的開(kāi)發(fā)效率的提高,對(duì)高手來(lái)說(shuō)畢竟是有限的。而如果遇到一個(gè)怪問(wèn)題,調(diào)試了半天,發(fā)現(xiàn)不是代碼有錯(cuò),而是vcl的bug,會(huì)作何感想呢?Delphi的ide太占資源,啟動(dòng)速度太慢,和某些顯卡驅(qū)動(dòng)程序沖突,vcl中有bug,調(diào)試器不夠健壯,對(duì)不穩(wěn)定的第三方控件沒(méi)有防護(hù)措施,問(wèn)題多多,在這一方面Delphi不如VC。
五、可移植性:立足現(xiàn)實(shí),放眼未來(lái)
目前,Inprise的兼容性做得并不好。低版本的Delphi不能使用高版本的vcl組件,而高版本的Delphi竟然不能使用低版本的vcl組件。如果Windows 98不能運(yùn)行95的程序,Windows 95不能運(yùn)行3.x的程序,還會(huì)有人用Windows嗎?如果Windows 95的程序必須經(jīng)過(guò)重新編譯才能在Windows98下運(yùn)行,Windows98會(huì)賣得那么好嗎?“同門(mén)兄弟”C++Builder和Delphi也不能互相使用對(duì)方的組件,甚至同一套vcl庫(kù)的文件名也不一樣。所以,Inprise應(yīng)先解決同門(mén)兄弟的兼容性問(wèn)題。而微軟的VC沒(méi)有這類問(wèn)題,mfc1.0的程序可以毫無(wú)障礙地在VC6.0下編譯通過(guò)。
六、調(diào)試:細(xì)微之處見(jiàn)真功
Visual C++和Delphi的調(diào)試功能都非常強(qiáng)大,都具有單步可視化調(diào)試、斷點(diǎn)跟蹤、運(yùn)行時(shí)改變變量、鼠標(biāo)指向可以得到變量值等功能。另外,對(duì)dll的輸入輸出也能方便管理,能夠進(jìn)行源碼級(jí)別的調(diào)試。
相對(duì)而言,Visual C++能夠更加方便地看到變量的變化情況,包括對(duì)結(jié)構(gòu)可以展開(kāi)成數(shù)據(jù)樹(shù),從而了解每一個(gè)變量的值,每一步調(diào)試,變化了的變量會(huì)加紅,從而使調(diào)試更加方便。另外,Visual C++的塊內(nèi)存察看,比Delphi也要方便。
七、數(shù)據(jù)庫(kù)開(kāi)發(fā):Delphi一枝獨(dú)秀
數(shù)據(jù)庫(kù)支持是Delphi的強(qiáng)項(xiàng)。這主要體現(xiàn)在Delphi與bde的無(wú)縫集成,以及Delphi提供的現(xiàn)成數(shù)據(jù)庫(kù)操作控件。這是VC望塵莫及的。目前,Delphi支持bde、ado、Interbase三種數(shù)據(jù)庫(kù)訪問(wèn)方式。所有的方式都能拖拉到應(yīng)用程序中實(shí)現(xiàn)可視化操作,明顯地提高了開(kāi)發(fā)速度。在Delphi中使用Webbroker控件,還能很方便地構(gòu)造出基于數(shù)據(jù)庫(kù)的Web頁(yè)面,通過(guò)html管理Web數(shù)據(jù)庫(kù)。
八、魚(yú)和熊掌:艱難的選擇
選擇一個(gè)開(kāi)發(fā)工具,依賴多種不同的因素,每個(gè)人都能因?yàn)槟撤N語(yǔ)言的某個(gè)缺陷而放棄學(xué)習(xí)或使用這種語(yǔ)言。任何程序員都希望自己喜歡的工具能達(dá)到理想的境界,通過(guò)上面不完善的比較,筆者認(rèn)為,影響選擇開(kāi)發(fā)語(yǔ)言的因素主要包括:
1.語(yǔ)言入門(mén)的難易程度
學(xué)習(xí)一種語(yǔ)言需要投入大量的時(shí)間和精力。開(kāi)發(fā)程序的開(kāi)發(fā)成本是值得考慮的現(xiàn)實(shí)因素。一個(gè)熟練的Delphi程序員和一個(gè)熟練的VC程序員,其工作效率是一樣的。但是,成為熟練的程序員必須快速掌握一門(mén)語(yǔ)言技巧。不幸的是,目前熟練的Visual C++程序員是十里挑一。相對(duì)而言,Delphi更適合初學(xué)者。
2.哪門(mén)語(yǔ)言有更多可繼承的代碼
語(yǔ)言代碼的可重用性是加快開(kāi)發(fā)效率明顯方面,從早期的過(guò)程、函數(shù)到現(xiàn)在的組件技術(shù)都是朝這個(gè)目標(biāo)奮斗的。這兩種語(yǔ)言對(duì)代碼重用的理解是不一樣的,Delphi主要通過(guò)vcl控件來(lái)實(shí)現(xiàn)代碼重用,Visual C++實(shí)現(xiàn)起來(lái)就比較復(fù)雜。
3.語(yǔ)言自身的本性
就技術(shù)(主要指應(yīng)用框架)來(lái)說(shuō),Delphi目前領(lǐng)先于Visual C++,但穩(wěn)定性和健壯性不足。而VC盡管發(fā)展到今日已十分完善,但mfc框架已是明日黃花了。如果不使用mfc,目前又沒(méi)有合適的替代品。
4.語(yǔ)言的前景和可擴(kuò)充性
Delphi是Inprise的旗艦產(chǎn)品之一,前景還是比較樂(lè)觀的。微軟的Visual C++的前景又怎樣呢?Visual Studio 7.0即將推出,這一版本將加強(qiáng)網(wǎng)絡(luò)開(kāi)發(fā)的特性。
(作者單位:山東省即墨市技工學(xué)校)