版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
VisualC++與Delphi/C++Builder之比擬及將來的開展前景之我見VisualC++與Delphi/C++Builder之比擬及將來的開展前景之我見VisualC++與Delphi/C++Builder之比擬及將來的開展前景之我見 VisualC++與Delphi/C++Builder之比擬及將來的開展前景之我見由于Delphi與C++Builder同為Inprise公司產品,共享集成開發(fā)界面(IDE),而且使用同一套VCL框架(這一點最關鍵),它們帶的調試器、PVCS/TeamSource團隊開發(fā)支持、數據庫引擎及企業(yè)版中集成的其它高級功能等都是一樣的,所以本文將其與C++Builder歸入"同一陣線"。我在網上見到一些Delphi程序員認為C++Builder與VC比擬接近,這是個誤解。事實上,Delphi和C++Builder除了使用的語言不同,其余幾乎都一樣。為了防止話題轉移到C++語言與ObjectPascal語言(即Delphi所用的語言)的比擬,下文主要比照分析VisualC++與C++Builder。首先,從它們的應用程序框架(ApplicationFrame,有時也稱為對象框架)進展比較。VisualC++采用的框架是MFC。MFC不僅僅是人們通常理解的一個類庫。(同樣,Delphi和C++Builder使用的VCL的概念也不僅僅是一個控件庫。)你假設選擇了MFC,也就選擇了一種程序構造,一種編程風格。MFC早在Windows3.x的時代就出現了,那時的VisualC++還是16位的。經過這些年的不斷補充和完善,MFC已經非常成熟。但由于原型出現得比擬早,MFC相比于VCL落后了一個時代。盡管微軟對MFC的更新沒有停頓,我也經常讀到持"只要Windows不過時,MFC就不會過時"之類觀點的文章,但就象Inprise(原Borland)的OWL框架的淡出一樣,MFC的淡出也是早晚的事。假設MFC青春永駐,微軟的開發(fā)人員也不會"私自"開發(fā)出基于ATL的WTL呀。當然,WTL的地位不能和MFC比,它并不是微軟官方支持的框架,封裝的功能也相當有限。但至少也反襯出了MFC存在的缺乏。我以為,最能表達一個應用程序框架的先進性的是它的委托模型,即對Windows消息的封裝機制。(對WindowsAPI的封裝就不用說了吧。大同小異,也沒什么技術含量。假設快樂,你也可以自己寫一個類庫來封裝。但對Windows消息驅動機制的封裝就不是那么容易的了。)最自然的封裝方式是采用虛成員函數。假設要響應某個消息就重載相應的虛函數。但出乎我的意料,MFC采用的是"古老"的宏定義方法。用宏定義方法的好處是省去了虛函數VTable的系統開銷。(由于Windows的消息種類很多,開銷不算太小。)不過帶來的缺點就是映射不太直觀。好在較新版本VC帶的ClassWizard可以自動生成消息映射代碼,使用起來還是比擬方便的。但和VCL的委托模型相比,MFC的映射方法就顯得太落后了。而C++Builder對C++語言進展了擴展,以便引入組件、事件處理、屬性等新特性。由于功夫做在編譯器級,生成的源代碼就顯得非常簡潔。但是由于擴展的非標準特性,使用VCL的C++Builder的源代碼無法被其它編譯器編譯。而MFC的功夫做在源代碼級,雖然消息映射代碼較為復雜且不直觀,但兼容性非常好。只要你有MFC庫的源代碼(隨VC企業(yè)版的光盤提供),你的MFC程序理論上用任何符合ANSI標準的編譯器均可編譯通過。C++Builder3以上版本可以原封不動直接編譯VisualC++程序,很多人認為這是C++Builder的兼容性好,實際上很大程度應歸功于MFC的兼容性好。微軟辛辛苦苦用標準方法寫MFC,卻為對手制造了方便。不知他們作何感想?而因為C++Builder對語言作了擴展,VC不能編譯C++Builder的程序??磥碓谶@方面VC要輸給C++Builder了。而且VCL所支持的組件、屬性等都是MFC所缺乏的特性。雖然VC也能支持組件,但要通過AppWizard先生成一個"包裹"類(wrapper),不如VCL來得簡潔。有很多人使用C++Builder就是沖著控件板上那一大堆組件來的,VC雖然能使用的組件也很多(也許不比C++Builder少),但由于不方便而對RAD程序員沒有吸引力。C++Builder的VCL比VisualC++的MFC先進的另一個特性是異常處理。但令人啼笑皆非的是,它的異常處理代碼有bug,有時會無端拋出異常。不知道在最新的版本中有沒有改正了。而VC的框架MFC也不是一無是處。經歷了那么多年的開展和完善,MFC功能非常全面,而且非常穩(wěn)定,bug很少。其中你可能遇到的bug更少。而且有第三方的專門工具幫助你避開這些bug。如此規(guī)模的一個類庫,能做到這一點不容易。不要小看了這一點,很多專業(yè)程序員就是為這個選擇VC的。而C++Builder的VCL的bug就相對較多了,而且有些它自己帶的例如程序都有錯誤??磥鞩nprise還有很長的路要走。再從它們的易用性比擬。VC有ClassWizard、SourceBrowser等一系列工具,還附帶VisualSourceSafe、VisualModeler等強大的工具,易用性非常好。(VC自帶建模工具VisualModeler,也許說明了它才是工程級的開發(fā)平臺,與C++Builder的定位不同。)它所帶的MSDN這部"開發(fā)者的百科全書"更是讓你"沒有找不到的,只有想不到的"。而且它的Autoplete之類小功能也比C++Builder要體貼。C++Builder的新版本雖然也提供了這一功能,但它的提示要等好幾秒才出來,有時你不經意間把鼠標停在某一處,也要等硬盤響好幾秒,這可是在566Mhz的賽揚II上呀。不要笑我瑣碎,有時一個開發(fā)工具的成熟和易用,就是從這些小地方表達出來的。C++Builder作為RAD工具,理應強調易用性。但與VC相比還顯出不成熟。這是不應該的。再來看看它們的可移植性。Inprise正在開發(fā)C++Builder和Delphi的Linux版本,代號為Kylix。也許通過Kylix,用VCL構架編寫的Windows程序向Linux移植成為可能。但這只是可能。因為在目前Inprise的兼容性工作做得并不好。C++Builder可以編譯VC程序還要多謝微軟使用標準方法寫MFC,而它自己各個版本之間兼容性卻不太好。低版本的C++Builder不能使用高版本的VCL組件(這還別去說它),而高版本的C++Builder竟然不能使用低版本的VCL組件。真是豈有此理,我很少看見軟件有不向下兼容的。假設Windows98不能運行95的程序,Windows95不能運行3.x的程序,Win3.x不能運行DOS程序,你還會用Windows嗎?假設不是C++Builder的其它某些方面太出色,光是這個向下不兼容就足以讓我拋棄它。而且雖說通過捆綁編譯器,C++Builder可以編譯Delphi的ObjectPascal代碼,但C++Builder仍不能使用為Delphi開發(fā)的VCL組件。所以一個組件有forD1/D2/D3/D4/D5/C1/C3/C4/C5這些不同版本是常有的事,而且隨著C++Builder版本的晉級可能還會增加。希望Inprise能先解決同門兄弟的兼容性問題。而微軟的VC就沒有這類問題。MFC1.0的程序也可以毫無障礙地在VC6.0下編譯通過。再來看看它們的前景吧。實際上,技術的進步在很多時候是此消彼長的。當初Borland的TurboC和BorlandC++幾乎是唯一的選擇。微軟的QuickC(如今還有人知道這個產品嗎?)和MicrosoftC/C++從來也沒有成為過主流。但BorlandC++又流行了多少年呢?不久就被新崛起的MicrosoftVisualC/C++壓下去了。如今的C++Builder又有后來居上的態(tài)勢,假設穩(wěn)定性再進步一些,bug再少一些,有希望成為主流。但Inprise的總體實力不及微軟,這也是無可爭議的。從C++Builder5的ReleaseNotes中的KnownIssues局部,以及它們的幫助文檔的規(guī)模和質量都可以看出。(哪個同類產品的幫助文檔能和MSDN比呢?)Inprise公司應從Netscape汲取教訓,不要讓C++Builder成為第二個Netscapemunicator。(municator也是一度技術領先,甚至曾占據了大局部的閱讀器市der是Inprise的旗艦產品之一,前景應當還是比擬樂觀的,而且Inprise已經在向Linux進軍了,而微軟還遲遲沒有動作,難道非要到Linux成燎原之勢(或許已經成燎原之勢了)才會奮起占領這個新興市場?似乎他們對Linux的態(tài)度與幾年前對互聯網的興起的反響緩慢有些相似。但后來......唉,真希望Inprise不要步Netscape的后塵。C++Builder是一個很有前途的開發(fā)工具。遺憾的是,Inprise公司Delphi的創(chuàng)始人已經跳槽到微軟去主持VisualJ++工程了。但愿對Inprise沖擊不會太大。微軟的VisualC++的前景又怎樣呢?VisualStudio7.0不久就要推出了。不知能不能在保持穩(wěn)定性的同時在技術的先進性上趕上C++Builder。另外,這一版本將加強網絡開發(fā)的特性??磥砦④涬m然被判解體,開發(fā)實力可是一點沒打折扣。就技術(主要指應用框架)來說,C++Builder目前領先于VisualC++。但多多少少的不盡人意之處讓我對Inprise"想說愛你不容易"。而VC盡管開展到今日已非常完善,但MFC框架已是明日黃花了。假設不使用MFC,目前又沒有適宜的替代品。WFC是支持組件、屬性和事件的,但那是VisualJ++里邊用的;ATL也很先進,但是用來進展/ActiveX開發(fā)的;基于ATL的WTL也不錯,可惜是非官方作品,也未必比VCL先進。微軟最近提出了C#(讀作CSharp)語言方案,但那屬于和Java同一類的東西??磥硎墙馃o足赤啊。根據你的需要做選擇吧。實際上VisualC++和C++Builder也不是單單競爭關系。它們在許多領域并不重疊,甚至是互補的。到底怎樣取舍,要根據你的工程特性決定。假設你開發(fā)系統底層的東西,需要極好的兼容性和穩(wěn)定性,選VisualC++吧。你可以只調用Windows的各種API,不用MFC。假設你寫傳統的Windows桌面應用程序,VisualC++的MFC框架是"正統"的選擇。假設你為企業(yè)開發(fā)數據庫、信息管理系統等高層應用("高層"是相對于"低層/底層"而言的,不是說技術高級或低級。)而且有比擬緊的期限限制,選C++Builder比擬好。假設你用的語言是ObjectPascal,Delphi是唯一的選擇(假設GNUPascal等免費編譯器不考慮的話)。假設你原先用Delphi(ObjectPascal語言),如今想改學C++,應領先用C++Builder。熟悉的界面和一樣的框架會讓你的轉軌事半功倍。另外,雖說MFC已顯落后,但不是說它不值得學。事實上,不學MFC就等于沒學VC。利用MFC框架開發(fā)程序仍然是目前開發(fā)桌面應用的主流形式,而且還會保持相當長的時間。即使你不使用MFC框架,花點時間學習一下MFC的封裝機制對你熟悉C++的OOP機制和Windows底層功能也是很有好處的作為程序員等級評判的標準之一c/c++(不管是mfc還是bcb)將為什么這么說呢,我認為最大理由是目前的應用程序正在從基于獨立的操作系統,傳向基于internet平臺.我們以前開發(fā)應用程序都是依賴于平臺的功能調用,mfc,bcb都是這樣.而如今日益熾熱的internet編程卻最不想關心的就是某一個平臺的調用,譬如說要實現b2b的電子商務那么就需要做不同平臺的集成,假設我是程序員我最care的就是如何實現商務邏輯而不是各種平臺之間的通信和管理.那么我們最迫切需要的就是一種與各種平臺調用無關的語言,這中語言只注重程序邏輯的設計而不涉及平臺的調用.而我們熟悉的c/c++卻恰恰不是為這個而設計的(赫赫這也不能怪c/c++在70年代誰能知道如今internet的情況呢).c/c++的最初設計目的是為了設計unix產生一種介于匯編和高級語言之間的一種開發(fā)高效而性能不低的語言.他要比其他任何高級語言都要關心系統的物理構造,譬如一直是毀譽攙半的指針.指針之所以強大就是應為涉及了系統物理內存的管理.他可以使得程序員和系統之間成為一種半透明狀態(tài).但是就是這種半透明的狀態(tài)讓指針帶來了更多的不穩(wěn)定性.c/c++在面向Internet的編程中卻無任何優(yōu)勢可言.跨平臺的電子商務軟件最害怕顧及各種平臺之間的天差地別的系統調用,最害怕時不時的由于內存泄漏而crash.c/c++的優(yōu)勢在這里卻成為了優(yōu)勢.即使在windows平臺上開發(fā)基于windowsdna的solution用的最多的還是vb做的d而不是vc的atl做的d,因為c/c++雖然高效但是太容易出錯,假設不是很小心的釋放內存nt很快就會資源缺乏.java就是最先看到這種情況,他用jvm實現了平臺無關用內存回收實現了穩(wěn)定強健.但是相當多的c/c++程序員抱怨java太慢了.確實即使到java2速度仍然是一個大問題.我曾經是一個c/c++堅決擁護者在許多論壇里和java程序員打筆仗.但是我逐漸意識到面對與internet平臺而不是特定的操作系統的時候java的速度問題往往是一個小小的瑕疵.我們可以想象那一個電子商務網站會用我們手頭的pc做效勞務邏輯的編程,而不必要關心數組是否越界,對象內存是否釋放更不需要關心是不是unix和windows的系統調用不一樣.微軟的c#可以說是一種java與c/c++的雜合體,他可以回收內存,可以平臺無關.但是他又可以實現一些java沒有的功能譬如在標記的程序段內用指針自己管理內存,可以實現操作符的重載等等.為什么要這樣做我想也許c#還肩負了一定的面向操作系統開發(fā)的任務例如winform.他根本上的思想和java類似,但是實現的方法又不一樣他不通過jvm解釋中間代碼,而是吧源代碼編譯成p代碼然后通過CLS庫和JIT在平臺上及時編譯為100%的本地代碼來執(zhí)行.他的pe代碼是獨立于平臺的,但是cls和jit卻根據不同的平臺而設計.因此c#的平臺獨立有點類似于c/c++在不同平臺上的移植使得c#比java來的更快.而且微軟還許諾cls和jit不僅針對c#還可以針對任何語言譬如pascal,smaltalk,basic因此將來有可能所有的編程語言都是可以平臺無關的(ms真是毒,所有的語言都平臺無關java還有什么優(yōu)勢呢,據說ms正在開發(fā)基于pascalsmaltalk的asp+).xml很多人可能認為與html相類似的語言和c/c++,java,c#完全不在一個檔次上的語言.其實不然.我們知道不管是c#還是java都是通過統一地層計算來實現平臺無關.那就必須在性能上付出一點代價.而xml卻可以實現不同的語言之間的調用.譬如說一個網占用java用bean實現一個出貨功能,另一個網站用d實現一個入庫功能.假設這個網站需要實現b2b,用一般的方式就是在他們之間寫轉換程序.而xml通過標記語言來描繪各自的借口特性.兩端通過解析xml文本來實現互相的調用,無需任何中間轉換程序只要一張xml文本就能實現bean和d之間的通訊(要說清楚其中的機理,需要很多xml概念假設有興趣可以到msdn.microsoft/xml或者去看看).目前ms的.net中最核心的技術soap就是完全基于xml的遠過程調用.介紹了那么多可能有點跑題,其實我最想說的就是21世紀的程序員應該從面向操作系統的傳統方法中走出來,學習一點
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 智慧解決方案:智能城市管理
- 消防應急避險
- 3.2.3離子反應 課件 高一上學期化學蘇教版(2019)必修第一冊
- 糖尿病個人教育與護理
- 傳統毛筆課件教學課件
- 日常生活食品安全
- 生產安全事故案例培訓教材
- 布谷鳥節(jié)奏游戲教案反思
- 弧度制說課稿
- 海水的運動說課稿
- 夏商周考古課件 第4章 殷墟文化(4-6節(jié))
- JJG 667-2010液體容積式流量計
- GB/T 708-2019冷軋鋼板和鋼帶的尺寸、外形、重量及允許偏差
- GB/T 6072.4-2012往復式內燃機性能第4部分:調速
- GB/T 1927.5-2021無疵小試樣木材物理力學性質試驗方法第5部分:密度測定
- GB/T 17395-2008無縫鋼管尺寸、外形、重量及允許偏差
- GB/T 14996-2010高溫合金冷軋板
- 【寫作講座】如何提升高中英語寫作能力
- 公路工程概論全套課件
- 全文《中國式現代化》PPT
- 《紅樓夢》深入研讀學習任務群設計
評論
0/150
提交評論