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