直播中
2002.04.01
版權(quán)所有,翻錄不究
cashcao@msn.com
開始
2000年6月我大學(xué)畢業(yè),從北京回到了石家莊,正式開始了我的職業(yè)生涯。如前所述,一開始我使用的語(yǔ)言是asp,我一直認(rèn)為這不能稱之為編程,因?yàn)閍sp不是一種編程語(yǔ)言,把它叫做動(dòng)態(tài)網(wǎng)頁(yè)實(shí)現(xiàn)技術(shù)可能更好。另外,asp很簡(jiǎn)單,并且,簡(jiǎn)單就是它全部的特點(diǎn)--這使得它很容易就能學(xué)會(huì)(在后來(lái)的工作中,我接觸到許多應(yīng)聘的學(xué)生,他們都告訴我自己精通asp語(yǔ)言)。雖然學(xué)習(xí)起來(lái)很簡(jiǎn)單,但是在使用起來(lái)卻不得不多費(fèi)點(diǎn)兒勁兒:我還能記得自己晚上一個(gè)人在辦公室用VI一步一步調(diào)試某一個(gè)網(wǎng)頁(yè)的情景,每當(dāng)遇到挫折失敗的時(shí)候,總是想起給桐桐打一個(gè)電話,聽聽她的聲音。如你所知,我總是遇到困難。
現(xiàn)在你能看出來(lái),我不是高手,只是一個(gè)低手...
2000年6月我大學(xué)畢業(yè),從北京回到了石家莊,同一時(shí)間(美國(guó)西部時(shí)間6月22日上午),微軟公司在位于美國(guó)西雅圖郊外的總部?jī)?nèi)邀請(qǐng)新聞?dòng)浾摺⑿侣劮治黾业燃s400人,舉行了新聞發(fā)布會(huì)“Forum2000”,宣布正式推出.Net計(jì)劃。這個(gè)計(jì)劃中包括了新的網(wǎng)絡(luò)計(jì)算平臺(tái)(.Net Framework)、新的語(yǔ)言(C#)、新的開發(fā)工具(Visual Studio.Net)以及asp的下一個(gè)版本ASP.NET,后者最開始被稱為ASP+。那時(shí)候我學(xué)習(xí)的主要興趣就在ASP.NET上,并且通過(guò)這個(gè)窗口開始了解Microsoft.Net的各個(gè)方面。
ASP.NET仍然不能稱之為一種編程語(yǔ)言,但是現(xiàn)在可以把它看作是一個(gè)創(chuàng)建、管理、部署Web應(yīng)用程序的平臺(tái)??梢允褂萌魏?Net語(yǔ)言在這個(gè)平臺(tái)上開發(fā)互聯(lián)網(wǎng)應(yīng)用程序,這其中當(dāng)然包括C#。它們之間的關(guān)系可以從下圖中看出:
這就是著名的.Net 平臺(tái)結(jié)構(gòu)圖,從這個(gè)圖上可以看到,ASP.NET、Windows Forms和VS.Net都不過(guò)是.Net開發(fā)平臺(tái)的一部分,用于.Net應(yīng)用程序的開發(fā)及展示。.Net 平臺(tái)的核心技術(shù)為:通用語(yǔ)言運(yùn)行時(shí)(CLR:Common Language Runtime)、基類庫(kù)(Base Class Library)、.Net語(yǔ)言及Visual Studio.Net。
從這個(gè)圖上也可以看出,.Net Framework是架構(gòu)在Windows平臺(tái)上的一個(gè)虛擬的運(yùn)行平臺(tái),你可以想象將最下層的Windows換作其它的操作系統(tǒng),比如說(shuō)Linux,一樣可以實(shí)現(xiàn)使用符合了CLS(Common Language Specification,通用語(yǔ)言規(guī)范)的.Net語(yǔ)言(VB.Net、C#、JScript.Net等)來(lái)創(chuàng)建ASP.NET或Windows Forms(可能會(huì)叫做Linux Forms)應(yīng)用程序的功能,這其實(shí)就是我們前面介紹的Mono計(jì)劃所要實(shí)現(xiàn)的功能。所以可以這么認(rèn)為,理論上,C#是一種可以跨平臺(tái)的語(yǔ)言,這很像Java,另一個(gè)比較像Java的地方是,C#也是一種(特殊意義上的)解釋性的語(yǔ)言。同Java一樣,C#編寫的程序代碼也是先通過(guò)C#編譯器編譯為一種特殊的字節(jié)代碼(中間語(yǔ)言,Microsoft Intermediate Language,MSIL),運(yùn)行的時(shí)候再經(jīng)由特定的編譯器(JIT編譯器,Just In Time,JITer)編譯為機(jī)器代碼以供操作系統(tǒng)執(zhí)行。
不僅是C#語(yǔ)言,所有.Net語(yǔ)言(將會(huì)包括我們常用的幾十種現(xiàn)代的編程語(yǔ)言)都可以編寫面向CLR的程序代碼,這種代碼在.Net中被稱為托管代碼(Managed Code),所有的Managed Code都直接運(yùn)行在CLR上,具有與平臺(tái)無(wú)關(guān)的特性。
解釋性的語(yǔ)言很安全,并且可以通過(guò)它的運(yùn)行平臺(tái)為其賦予更多的功能,比如自動(dòng)內(nèi)存管理、異常處理等。事實(shí)上,C#語(yǔ)言的許多特點(diǎn)都是由CLR提供的,下面的CLR結(jié)構(gòu)圖說(shuō)明了這一點(diǎn)。
可以看到,類型安全(Type Checker)、垃圾回收(Garbage Collector)、異常處理(Exception Manager)、向下兼容(COM Marshaler)、多線程支持(Thread Support)這些C#的特點(diǎn)都是由CLR來(lái)提供的。CLR最早被稱為下一代Windows服務(wù)運(yùn)行時(shí)(NGWS Runtime),是直接建立在操作系統(tǒng)層上的一個(gè)虛擬的運(yùn)行環(huán)境,主要的功能是管理代碼的運(yùn)行。在.Net 平臺(tái)結(jié)構(gòu)圖中,CLR的上面是.Net的基類庫(kù)(Base Class Library,BCL),這組基類庫(kù)包括了從基本輸入輸出到數(shù)據(jù)訪問(wèn)等各方面,提供了一個(gè)統(tǒng)一的面向?qū)ο蟮?、層次化的、可擴(kuò)展的編程接口。從.Net 平臺(tái)結(jié)構(gòu)圖中也可以看到,基類庫(kù)可以被各種語(yǔ)言調(diào)用和擴(kuò)展,也就是說(shuō),不管是C#、VB.NET還是VC++.NET,都可以自由地調(diào)用.Net的基類庫(kù)。事實(shí)上, C#并沒(méi)有屬于自己的類庫(kù),它所使用的編程接口就是.Net提供的基類庫(kù)。所以,在決定使用C#時(shí),真正需要費(fèi)工夫?qū)W習(xí)的其實(shí)是.NET框架的基類庫(kù):C#自身只有區(qū)區(qū)77個(gè)關(guān)鍵詞,而且其語(yǔ)法對(duì)許多程序員來(lái)說(shuō)都是他們非常熟悉的。BCL則相反,它包含了超過(guò)4500個(gè)以上的類和無(wú)數(shù)的方法、屬性,在你的C# 程序中隨時(shí)都可能會(huì)用到它來(lái)完成自己的任務(wù)。
很多人都思考過(guò)應(yīng)如何開始學(xué)習(xí)一種新的語(yǔ)言,對(duì)于一個(gè)有經(jīng)驗(yàn)的編程人員來(lái)講,這確非難事。但是對(duì)于一個(gè)對(duì)編寫代碼一無(wú)所知的人而言,如果你是以C#開始你的編程之旅的,數(shù)目繁多的概念及新名詞可能會(huì)令你有些不知所措。這時(shí)候請(qǐng)注意你的學(xué)習(xí)順序,任何一種編程語(yǔ)言的學(xué)習(xí)都是按照運(yùn)行平臺(tái)、語(yǔ)法、基類庫(kù)直至各方面的應(yīng)用這一順序來(lái)進(jìn)行的,但是在實(shí)際的學(xué)習(xí)中,它們之間并不是孤立的。推薦的方法是:對(duì)運(yùn)行平臺(tái)和語(yǔ)法有了一個(gè)整體的認(rèn)識(shí)后,在應(yīng)用中學(xué)習(xí)各種基類庫(kù)的用法。鑒于C#這一語(yǔ)言的特殊性,全面了解它的運(yùn)行平臺(tái)(.Net Framework)必會(huì)使你的學(xué)習(xí)事半功倍。所以請(qǐng)記住上面提到的兩個(gè)圖,在以后的學(xué)習(xí)中,雖然可能不會(huì)明確的涉及到它們,但是在整個(gè)C#的學(xué)習(xí)過(guò)程中,它們卻是無(wú)處不在的。
還有一個(gè)很重要的概念需要你明白,這就是公共語(yǔ)言架構(gòu)(Common Language Infrastructure ,CLI)。CLI是CLR的一個(gè)子集,也就是.NET中最終對(duì)編譯成MSIL代碼的應(yīng)用程序的運(yùn)行環(huán)境進(jìn)行管理的那一部分。在CLR結(jié)構(gòu)圖中CLI位于下半部分,主要包括類加載器(Class Loader)、實(shí)時(shí)編譯器(IL To Native Compilers)和一個(gè)運(yùn)行時(shí)環(huán)境的垃圾收集器(Garbage Collector)。CLI是.Net和CLR的靈魂,CLI為IL代碼提供運(yùn)行的環(huán)境,你可以將使用任何語(yǔ)言編寫的代碼通過(guò)其特定的編譯器轉(zhuǎn)換為MSIL代碼之后運(yùn)行其上,甚至還可以自己寫MSIL代碼在CLI上面運(yùn)行。如你所知,歐洲計(jì)算機(jī)制造商協(xié)會(huì)(ECMA)已經(jīng)于2001年10月13日批準(zhǔn)C#語(yǔ)言規(guī)范(ECMA-334)成為一種新誕生的計(jì)算機(jī)產(chǎn)業(yè)標(biāo)準(zhǔn)。同時(shí)國(guó)際標(biāo)準(zhǔn)組織ISO也同意該標(biāo)準(zhǔn)進(jìn)入該組織的審批階段。并且,作為.Net與CLR的核心部分,CLI與C#也同時(shí)獲得了ECMA的批準(zhǔn)(ECMA-335)。擁有了C#與CLI這兩項(xiàng)標(biāo)準(zhǔn),你可以自己寫出能夠運(yùn)行于任何操作系統(tǒng)上的.Net平臺(tái)(只要你愿意)。如前所述,著名的Mono項(xiàng)目就是這么干的,Mono項(xiàng)目包括三個(gè)核心的部分:一個(gè)C#語(yǔ)言的編譯器,一個(gè)CLI和一個(gè)類庫(kù)。在Java的世界中,這項(xiàng)工作是由SUN公司完成的,SUN針對(duì)不同的操作系統(tǒng)開發(fā)出相應(yīng)的Java虛擬機(jī)以便讓一個(gè)由Java開發(fā)的應(yīng)用程序運(yùn)行在不同的操作系統(tǒng)上,但是迄今為止還沒(méi)聽說(shuō)過(guò)微軟有這方面打算(為用戶提供非Windows系統(tǒng)的.Net平臺(tái))。
2000年的6月還有很多事情發(fā)生,2000年的6月我在學(xué)校做畢設(shè),晚上就跑到系試驗(yàn)室看歐錦賽,我很喜歡的坎普君(Bergkamp)大放異彩,幫助荷蘭隊(duì)6比1大勝南斯拉夫,米哈伊洛維奇 (Mihajlovic)在比賽最后莫名的笑容永遠(yuǎn)留在了我的心中。說(shuō)實(shí)話,那時(shí)候只顧著看EURO2000,可沒(méi)管什么.Net、.Not。另外,離別的愁緒圍繞在每個(gè)人的周圍,廣播里開始反反復(fù)復(fù)播放一些古老的歌曲,不知道為什么,戀曲1980卻是那時(shí)候的最愛(ài)。
后來(lái),我們都畢了業(yè)。如你所知,我離開了北京。
>>>未完,待續(xù)...