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