閱讀188 返回首頁    go 技術社區[雲棲]


專家對VC與C#的比較

  現在總能在這個版塊看到這樣那樣的討論VC、C++語言是不是要淘汰,被C#徹底取代諸如此類,這就是傳說中的“月經貼”。一些新手可能就會因為看到這些帖子感到迷茫,比如他們正在開始學VC,要是突然發現被淘汰了,豈不是白學了?對此我認真看了每次的“月經貼”,論壇中的一些老大們的言語我也都看在眼裏,他們對此是看得很清楚的。接下來我將會用中肯的語言說說我的見解,各位有什麼意見可以跟帖討論。

 

      先說語言,C++作為數據結構入門的最佳語言的說法不少,其實有人認為Java更加適合做數據結構入門的語言,我感覺其實要看個人的喜好。但是C#肯定不會用來做數據結構入門的語言,C++我認為是一個比較好的理解遠離的語言,是一切之本。Java中所說的引用,其實也就是C++中的地址傳遞的一種形式罷了,C++靈活的強製轉換,我覺得有得天獨厚的優勢,拿到一個地址,就能讓它成為指向一個數據結構的指針,這是其他語言所無法比擬的。

 

      沒有什麼語言能比C++更加貼近Windows本身了,這一點也是不可否認的。如果哪一天C#也能寫驅動的時候,那麼C++就真的會淘汰了(這天可能不會太遠又或者很遙遠)。

 

      C#能做的,C++不一定都能做,C++能做的,C#也不一定都好做,所以經常看到有人拿這2個語言對比,我覺得確實沒什麼必要。

 

      C#繁雜的調用Win32 API的方式,確實讓人很不舒服,C++這一點做得比它好。但是,C#強大的網絡操作,代碼量大大地低於C++,我們拋棄不用Socket,改用WinInet或是MFC中的封裝好的網絡類,比如CHttpFile,還是沒C#簡單。C#的傻瓜式的類庫操作和麵向對象編程的完美特性,確實讓其成為了Windows平台上最受歡迎的語言。也許,是微軟想將Win32 API漸漸地全部封裝到C#的類庫中去,我感覺微軟有這個意圖,也許將來C#就不需要調用那些繁雜的Win32 API了,類庫中均有提供也說不定。

 

      我們為什麼學VC?這點我曾經也問過自己。聖經上說:你必須知道真相,真相會使你自由。我們學VC是為了自由,不受微軟的框製。微軟通過種種的FrameWork讓你陷於其中,你覺得,哇,原來編程是這麼容易啊,幾句話就能搞定。你想知道微軟在內部幹了些什麼呢?你不知道,當然,你如果認為你沒必要知道,這個我完全讚同,我後麵會說。就說殺進程吧,C#中不通過Win32 API就那麼一種方式,通過System.Diagnostics.Process找到進程,然後Kill之(如果我說的不對,使用C#的朋友請指正),而C++中,我們完全有無數種選擇,就說不邪惡的,TerminateProcess,邪惡點的呢?不計其數。進程內存填0,卸載模塊,消息洪水,句柄強製關閉,強製釋放它的堆,太多太多了,甚至我注入進去,內部Raise一個異常,它也就掛掉了。保護進程, 不管內核下還是應用層,C#肯定是做不了的,C++有自己高端的地方,其他語言無法涉足。你見過C#做的殺毒軟件嗎?

 

      C#,極其簡易的界麵操作,令人看著很舒服的編碼,他有太多的地方,C++根本無法涉足。拿C++做Web Services除非是大腦進水,用C++做網絡蜘蛛,也根本是無聊之舉,要麼就C#,要麼就拿Python來幹(個人漏見),超級大量的數據,拿垃圾回收基本上為0的C++去做,簡直就是自找麻煩。C#的WebForm,和Jsp占據著Web的大片江山,C++能嗎?不能。C#是一門博大精深的語言,類庫強大到變態,基本上可以這麼講,所以用C++的朋友也不能隨便貶低C#程序員,C#的程序員的層次分得比C++多很多,高層的也是象牙塔級別的。C#的架構師,那種恐怖的實力,C++中級程序員是無法想象的。C#更加注重於軟件工程的應用,各種設計模式的使用,C++則注重於實現功能。

 

      C#的前景是不錯的,我個人很看好它,MSDN 雜誌每期的文章可能有8成是C#,C++不算很多,微軟的重心可能在C#上,希望C#逐漸能取代C++。但是C++會這麼容易被取代?不可能。就像一個搞管理的,你讓他接管搞開發的人,讓他從幹一樣到同時兼幹這二樣,會有這麼簡單麼?c++的生命力至少還要7-8年,之後才會漸漸的淡出,但是隻要追求自由的人存在,C++就不會消失;隻要操作係統一天是用C++寫的,C++就不會消失。

 

      下麵說說語言的選擇問題,這2種語言各自的優劣,我在上麵都做了簡要的比較。我在月經貼中總看到爭辯,討論這2種語言哪個更好,甚至會出現不和諧的字眼。我覺得這是何必呢?各自有各自的天地,請你也不要再說什麼C++會沒落的的話,那是你自己不用,就說C++沒落?就像MSDN英文你看不懂,你就說API垃圾?你自己心裏認為它不行,怎麼貶低,這個隨便你自己心裏高興,別拿出來充專家,更別用自己幼稚的思想左右別人。微軟4年前就放言,C#將要取代C++,今年都2009了,每年還不是一樣有人跳出來叫囂?

 

      選什麼語言,隨自己高興,需要哪個用哪個,這是不矛盾的。開發數據庫,我傾向於用C#,做Windows底層,我肯定是C++,都掌握下沒有壞處。VS2010中C++的新特性各位同胞可以關注下,不知道會加入什麼,VC2008的特性我探索了這麼久,還沒有探索結束。C#是越來越好用了,Linq to Sql讓不懂數據庫的人都能去操做數據庫了,輔助一些第三方類庫,能發揮強大的威力。完全取代C++,等操作係統是C#寫的,C#能開發係統中的一切組件的時候再說吧,至少現在C#還不能開發IsAPI,驅動吧?

最後更新:2017-04-03 18:52:02

  上一篇:go 今天,我依然奮戰在二級C
  下一篇:go 從零開始學習OpenCL開發(四)shader