直播中
不要以為這個題目是聳人聽聞,但就目前的形勢來看c/c++是需要退出舞臺或者說的婉轉一點是需要更新?lián)Q代了.
我想在未來的一兩年里,作為程序員等級評判的標準之一c/c++(不管是mfc還是bcb)將會讓位給三種編程語言,1.sun的java2.windows平臺上的c#3.xml
為什么這么說呢,我認為最大理由是目前的應用程序正在從基于獨立的操作系統(tǒng),傳向基于internet平臺.
我們以前開發(fā)應用程序都是依賴于平臺的功能調用,mfc,bcb都是這樣.而現(xiàn)在日益火熱的internet編程卻最不想關心的就是某一個平臺的調用,譬如說要實現(xiàn)b2b的電子商務那么就需要做不同平臺的集成,如果我是程序員我最care的就是如何實現(xiàn)商務邏輯
而不是各種平臺之間的通信和管理.那么我們最迫切需要的就是一種與各種平臺調用無關的語言,這中語言只注重程序邏輯的設計而不涉及平臺的調用.而我們熟悉的c/c++卻恰恰不是為這個而設計的(赫赫這也不能怪c/c++在70年代誰能知道現(xiàn)在internet的情況呢).c/c++的最初設計目的是為了設計unix產(chǎn)生一種介于匯編和高級語言之間的一種開發(fā)高效而性能不低的語言.他要比其他任何高級語言都要關心系統(tǒng)的物理結構,譬如一直是毀譽攙半的指針.指針之所以強大就是應為涉及了系統(tǒng)物理內存的管理.他可以使得程序員和系統(tǒng)之間成為一種半透明狀態(tài).但是就是這種半透明的狀態(tài)讓指針帶來了更多的不穩(wěn)定性.
c/c++在面向Internet的編程中卻無任何優(yōu)勢可言.跨平臺的電子商務軟件最害怕顧及各種平臺之間的天差地別的系統(tǒng)調用,最害怕時不時的由于內存泄漏而crash.c/c++的優(yōu)勢在這里卻成為了劣勢.即使在windows平臺上開發(fā)基于windows dna的solution
用的最多的還是vb做的dcom而不是vc的atl做的dcom,因為c/c++雖然高效但是太容易
出錯,如果不是很小心的釋放內存nt很快就會資源不足.
java就是最先看到這種情況,他用jvm實現(xiàn)了平臺無關用內存回收實現(xiàn)了穩(wěn)定健壯.但是相當多的c/c++程序員抱怨java太慢了.的確即使到java2速度仍然是一個大問題.我曾經(jīng)是一個c/c++堅決擁護者在許多論壇里和java程序員打筆仗.但是我逐漸意識到面對與internet平臺而不是特定的操作系統(tǒng)的時候java的速度問題往往是一個小小的瑕疵.我們可以想象那一個電子商務網(wǎng)站會用我們手頭的pc做服務器,他們不是sun的e1000就是ibm的risc6000.在這種平臺上java這點速度問題只是a peice of cake.程序員只需要專注與商務邏輯的編程,而不必要關心數(shù)組是否越界,對象內存是否釋放更不需要關心是不是unix和windows的系統(tǒng)調用不一樣.
微軟的c#可以說是一種java與c/c++的雜合體,他可以回收內存,可以平臺無關.但是
他又可以實現(xiàn)一些java沒有的功能譬如在標記的程序段內用指針自己管理內存,可以實現(xiàn)操作符的重載等等.為什么要這樣做我想也許c#還肩負了一定的面向操作系統(tǒng)開發(fā)的任務例如winform.他基本上的思想和java類似,但是實現(xiàn)的方法又不一樣他不通過jvm解釋中間代碼,而是吧源代碼編譯成p代碼然后通過CLS庫和JIT在平臺上及時編譯為100%的本地代碼來執(zhí)行.他的pe代碼是獨立于平臺的,但是cls和jit卻根據(jù)不同的平臺而設計.因此c#的平臺獨立有點類似于c/c++在不同平臺上的移植使得c#比java來的更快.而且微軟還許諾cls和jit不僅針對c#還可以針對任何語言譬如pascal,smaltalk,basic因此將來有可能所有的編程語言都是可以平臺無關的(ms真是毒,所有的語言都平臺無關java還有什么優(yōu)勢呢,據(jù)說ms正在開發(fā)基于pascal smaltalk的asp+).
xml很多人可能認為與html相類似的語言和c/c++,java,c#完全不在一個檔次上的語言.其實不然.我們知道不管是c#還是java都是通過統(tǒng)一地層計算來實現(xiàn)平臺無關.那就必須在性能上付出一點代價.而xml卻能夠實現(xiàn)不同的語言之間的調用.譬如說一個網(wǎng)占用java用bean實現(xiàn)一個出貨功能,另一個網(wǎng)站用dcom實現(xiàn)一個入庫功能 .如果這個網(wǎng)站需要實現(xiàn)b2b,用一般的方式就是在他們之間寫轉換程序.而xml通過標記語言來描述各自的借口特性.兩端通過解析xml文本來實現(xiàn)互相的調用,無需任何中間轉換程序
只要一張xml文本就能實現(xiàn)bean和dcom之間的通訊(要說清楚其中的機理,需要很多xml概念如果有興趣可以到msdn.microsoft.com/xml或者www.s3c.org去看看).目前ms的.net中最核心的技術soap就是完全基于xml的遠過程調用.
介紹了那么多可能有點跑題,其實我最想說的就是21世紀的程序員應該從面向操作系統(tǒng)的傳統(tǒng)方法中走出來,學習一點如何面向Internet平臺編程的技術和概念.不要在無畏的那種c/c++工具好之類的地方爭論.我想不出一兩年不管是bcb還是mfc都要淘汰,
到那個時候要爭論的不是bcb好還是mfc好而是c#好還是java好.至于xml那是不管sun和ms以至于世界任何大的IT公司包括Intel,hp都在奮力研究的技術,不學習可能就要被淘汰.至于c/c++可能就會淪落到現(xiàn)在匯編的地位在某些系統(tǒng)效能敏感的地方還能見得到.
如果是編程語言的初學者那么我建議學習java同時關注c#,他們首先比c/c++簡單沒有復雜的宏,指針,摸版等等讓人摸不招頭腦的概念.而且是完全面向對象,比c/c++的半調子面向對象清楚的多好學的多.(我推薦目前學習java,畢竟c#還沒有發(fā)布而且剛發(fā)布的beta版的編譯器要求高的嚇人需要win2000 adv server沒有128M內存的別想跑.話說回來c#和java一摸一樣沒有什么太大的區(qū)別學好了java將來的c#將會信手拈來)
對于目前的windows下的編程者來說學習mfc的價值還是有一點的但是不是太大.至少可以熟悉windows內在機理.但是我還是推薦關注一下c#將來的windows.net都是基于c#而不是mfc.而且c#要比mfc簡單的多實現(xiàn)一個同樣的windows桌面應用c#的開發(fā)速度是mfc的兩到三倍而且?guī)缀蹩床灰娦阅艿膿p失. visual studio 7.0中 vc將是一個次要的開發(fā)工具最主要的開發(fā)工具就是c#和vb7.0.至于borland我想是不可能不跟著ms走至少windows平臺上是這樣說不定明年就有一個c# builder出來作為borland的主打產(chǎn)品而不是c++builder了.說一句玩笑話wenny說不定很快會把這里變成www.c#help.net了