C#介紹
2024-07-21 02:20:10
供稿:網(wǎng)友
翻譯整理 毛竹 南海
c#介紹
最近微軟宣布了它的最新編程語(yǔ)言c#,這是一種面向?qū)ο蟮木幊陶Z(yǔ)言,它將作為visual studio中的一部分推出。c#(發(fā)音為“c-sharp”)既保持了c++中熟悉的語(yǔ)法,并且還包含了大量的高效代碼和面向?qū)ο筇匦浴?jù)微軟產(chǎn)品經(jīng)理透露,c#語(yǔ)言將在保持c/c++靈活性的基礎(chǔ)上為程序員帶來(lái)更高效的rad開(kāi)發(fā)方式。它不僅能用于web服務(wù)程序的開(kāi)發(fā),并且還能開(kāi)發(fā)強(qiáng)大的系統(tǒng)級(jí)程序。
微軟還沒(méi)有正式宣布這一新語(yǔ)言技術(shù),該技術(shù)將以測(cè)試形式出現(xiàn)在微軟打算在7月中旬在專業(yè)開(kāi)發(fā)會(huì)議上分發(fā)的visual studio 7中。visual studio 7將于明年某個(gè)時(shí)候正式發(fā)售。
layman介紹說(shuō)c#包含使xml編程更為輕松的技術(shù)。微軟將使它的下一代工具軟件、操作系統(tǒng)和應(yīng)用支持xml技術(shù)。
新的編程語(yǔ)言還將包含虛擬機(jī)設(shè)備。微軟官員已經(jīng)公開(kāi)表示c#技術(shù)和該公司去年開(kāi)發(fā)的 java競(jìng)爭(zhēng)技術(shù)cool沒(méi)有關(guān)聯(lián)。微軟官員拒絕回答是否計(jì)劃在visual studio 7中提供微軟設(shè)計(jì)的視窗版java visual j++的某個(gè)版本。
c#的特性
現(xiàn)在,微軟仍在一邊繼續(xù)反駁其競(jìng)爭(zhēng)對(duì)手sun控告它改變了java語(yǔ)言的訴訟,一邊在對(duì)美國(guó)反壟斷指控頑抗到底,但與此同時(shí),微軟的天才程序員們也在技術(shù)上進(jìn)行著一場(chǎng)補(bǔ)救的措施。那就是他們已經(jīng)開(kāi)發(fā)出來(lái)的c#語(yǔ)言,這是一種非常類似于java的語(yǔ)言,微軟深知即便是微軟陣營(yíng)中也有著相當(dāng)一部分人喜歡java語(yǔ)言,所以這次干脆就用c#來(lái)滿足他們的愿望,這是一種非常完美的語(yǔ)言,適用于各種操作系統(tǒng),并且與windows緊密地結(jié)合在一起。
微軟表示這種新的程序設(shè)計(jì)語(yǔ)言并不針對(duì)java,但它將是c++的革新。而這正是java所追求的兩個(gè)主要目標(biāo)之一(另一目標(biāo)當(dāng)然就是可移植性)。微軟一直夢(mèng)想著能開(kāi)發(fā)出能與java在windows nt系統(tǒng)上抗衡的語(yǔ)言。c#的自動(dòng)內(nèi)存管理以及和java一樣都使用的c語(yǔ)言語(yǔ)法,似乎讓這個(gè)理想成為現(xiàn)實(shí)。
微軟稱c#是由c和c++派生而來(lái)的一種“簡(jiǎn)單、流行、面向?qū)ο蟆㈩愋桶踩钡某绦蛟O(shè)計(jì)語(yǔ)言,c#意在綜合visual basic的高效率和c++的強(qiáng)大功能。但這種說(shuō)法是否準(zhǔn)確呢?由于c#的結(jié)構(gòu)很像visual basic的activex,它顯然是沖著rad開(kāi)發(fā)者來(lái)的。但同時(shí),“c#提供了c++的強(qiáng)大功能”這種說(shuō)法也稍嫌夸張,將來(lái)很可能變成空頭支票。
對(duì)某一對(duì)象接口的更新,微軟稱之為“繼承”,當(dāng)然“繼承”是就“對(duì)象”而言的。但是,雖然“對(duì)象”這個(gè)詞我們經(jīng)常碰到,卻很少有人真正理解了它的含義。微軟的用戶,甚至它自己的員工都經(jīng)常把“對(duì)象”和“接口”弄混。所以微軟干脆就用接口來(lái)定義各種對(duì)象,結(jié)果導(dǎo)致了“面向?qū)ο缶幊獭保╫op)被微軟弄得亂七八糟。現(xiàn)在,微軟又在大踏步地前進(jìn)了(雖然它內(nèi)心還是很小心),它把它建立在接口基礎(chǔ)上的“對(duì)象”集成到了開(kāi)發(fā)工具里。不過(guò)它走得實(shí)在過(guò)了頭,它甚至把對(duì)另一對(duì)象接口的更新稱之為“繼承”。
這個(gè)“繼承”給程序員們帶來(lái)的好處就是語(yǔ)言無(wú)關(guān)——只要接口維持其兼容性,用visual basic寫成的對(duì)象在c#和c++中也可以良好地運(yùn)行。但此特性是以真正的oop技術(shù)和平臺(tái)的可移植性為代價(jià)的。每個(gè)對(duì)象都被編譯和注冊(cè)到windows子系統(tǒng),只要你能訪問(wèn)這個(gè)子系統(tǒng),你就能訪問(wèn)這個(gè)對(duì)象。來(lái)吧!歡迎來(lái)到.net和ngws的世界!——windows平臺(tái)從來(lái)沒(méi)有完完全全地讓人產(chǎn)生這樣完整的依賴性。他們的動(dòng)機(jī)當(dāng)然要遭到全世界對(duì)微軟有偏見(jiàn)的人的懷疑,當(dāng)然,完全依靠此技術(shù)的c#也不例外。
事實(shí)上,c#將是完全依靠windows的最完美的產(chǎn)物。那些困繞java sdk, mfc 和set的數(shù)據(jù)庫(kù)已成為過(guò)去。你想放入c#的任何東西(無(wú)論何種語(yǔ)言),只要在windows的.net子系統(tǒng)下建立和包裝的都可以使用windows的運(yùn)行庫(kù)。
用msil進(jìn)入.net
當(dāng)人們?cè)L問(wèn)usenet或一些新聞組時(shí),會(huì)有一些諸如新語(yǔ)言和平臺(tái)有效性之類的問(wèn)題。什么時(shí)間和努力能解決這些問(wèn)題呢?當(dāng)然,如沒(méi)有牢固的事實(shí)和有說(shuō)服力的證據(jù),即使是最有幫助的響應(yīng)者,權(quán)威機(jī)構(gòu)也會(huì)對(duì)他的斷言持保留意見(jiàn)。我沒(méi)有參加今年的專業(yè)開(kāi)發(fā)者會(huì)議(pdc),因此我的發(fā)現(xiàn)都是基于那些與會(huì)者的反饋。
人們對(duì)微軟過(guò)去幾周的大肆宣傳,最基本的錯(cuò)誤理解就是c#只是visual c++的改進(jìn)版本。完全不是這么回事。c#和java沒(méi)有直接聯(lián)系。它的特征設(shè)定是從java獲得的靈感。它的語(yǔ)法同java一樣,源自c和c++,但它的執(zhí)行是完全新的,只依靠.net結(jié)構(gòu)。
c#也并非字節(jié)碼(bytecode)。微軟一位員工羅伯特.舒密特詳細(xì)描述道:“c#編譯程序產(chǎn)生的是‘微軟中間語(yǔ)言’(msil)……但虛擬機(jī)或其他類似的技術(shù)則不能用于解釋這種中間語(yǔ)言(il)。相反地,每當(dāng)應(yīng)用程序載入或jit編譯程序需要編譯它時(shí),il就會(huì)被轉(zhuǎn)換成本地代碼。一旦這種轉(zhuǎn)換完成,可以執(zhí)行的代碼實(shí)際上是本地代碼。”實(shí)質(zhì)上,雖然這種方案有點(diǎn)像java程序通過(guò)一個(gè)jil編譯程序,但這里最終的jit編譯是100%的本地代碼,而java的jit產(chǎn)生的結(jié)果是不同的。
c#的弱點(diǎn)
這個(gè)方案也暴露了微軟對(duì)c#和.net介紹中的一些有趣的漏洞。msil是.net提供的一個(gè)新特性,允許很流行的程序設(shè)計(jì)語(yǔ)言編譯到一個(gè)單獨(dú)的公用語(yǔ)言。(.net支持的語(yǔ)言種類是相當(dāng)驚人的)。這些語(yǔ)言都要服從一種叫“通用語(yǔ)言規(guī)范(cls)”的構(gòu)架。微軟稱之為“cls兼容語(yǔ)言和類庫(kù)之間可互操作的通用語(yǔ)言”。
編譯所有的語(yǔ)言到一個(gè)單一的公用語(yǔ)言上,能讓“繼承”通過(guò)多重語(yǔ)言真正執(zhí)行。這輕而易舉的掃除了c#可能遇到的錯(cuò)誤概念。.net組件使用com的idispatch,它只允許接口執(zhí)行。它比先前c#被評(píng)定為一種oop語(yǔ)言的看法容易接受得多。它在程序設(shè)計(jì)上或許像java一樣是面向?qū)ο蟮摹?br>
但不幸的是cls這種包括msil的共享語(yǔ)言基礎(chǔ),只讓rad開(kāi)發(fā)者受益,而損害了硬件的核心開(kāi)發(fā)者,有人認(rèn)為創(chuàng)造一種新程序設(shè)計(jì)語(yǔ)言的目的就是有能力充分運(yùn)用它和服務(wù)于可微調(diào)的執(zhí)行能力,這一點(diǎn)在cls世界里是做不到的。老實(shí)說(shuō),加速充分利用從來(lái)不是許多語(yǔ)言的唯一目標(biāo)。許多語(yǔ)言的唯一目標(biāo)(最矚目的是像visual basic和java的rad語(yǔ)言)是加速和美化開(kāi)發(fā)和展開(kāi)能力,而不僅僅是運(yùn)行時(shí)刻的速度。
舒密特文章中所提到的確實(shí)包含了相關(guān)和值得注意的評(píng)論:你可以用c++指定.net,并在你的代碼中運(yùn)用所有c++特性。同時(shí),因?yàn)?net在運(yùn)行時(shí)刻不能檢驗(yàn)c++代碼是否安全,此語(yǔ)言并不遵從cls規(guī)范,里面所書寫的程序也受到限制。作為應(yīng)對(duì),微軟往visual c++里添加非標(biāo)準(zhǔn)管理的擴(kuò)展。用這些擴(kuò)展寫的代碼能符合cls規(guī)范。
c#將把微軟領(lǐng)向何方就一目了然了。因?yàn)樗许?xiàng)目編寫會(huì)只依靠msil和cls jit編譯程序。這樣c#或任何msil前端語(yǔ)言比java任何時(shí)候都快。但很不幸,程序設(shè)計(jì)和編譯程序級(jí)的優(yōu)化不能在非微軟的平臺(tái)上充分利用,想在非windows平臺(tái)上展開(kāi).net,再充分運(yùn)用它們也是不現(xiàn)實(shí)的。
java是c#的競(jìng)爭(zhēng)對(duì)手
盡管.net是微軟一手締造的,它并不是只能在windows上使用。微軟準(zhǔn)備盡力為那些com對(duì)象提供傳統(tǒng)幫助(所有的ole, activex等等在下一代viual studio推出后,都將成為一個(gè)legacy平臺(tái))。但.net不會(huì)圍繞com建造。新平臺(tái)無(wú)疑將補(bǔ)充com,并與它幾乎天衣無(wú)縫地配合,但一點(diǎn)也不會(huì)依靠com。這表明這種結(jié)構(gòu)本身能夠macintosh, unix. beox展開(kāi)。這樣命名,是因?yàn)槌薱ls構(gòu)架是平臺(tái)獨(dú)立的,c#將用到的和所有遵從cls的數(shù)據(jù)庫(kù)也是平臺(tái)獨(dú)立的。也就是說(shuō),它們都是遵從cls的,如果一個(gè)本機(jī)msil編譯程序在平臺(tái)上有效,那么它們能在運(yùn)行時(shí)刻為任何結(jié)構(gòu)進(jìn)行編譯。微軟也積極爭(zhēng)取被ecma標(biāo)準(zhǔn)接納,他們先前的javascript已被接納。 當(dāng)visual studio. net推出時(shí),開(kāi)發(fā)團(tuán)體肯定會(huì)有不同的反應(yīng)。"微軟又開(kāi)發(fā)了一個(gè)新平臺(tái)",這已嚇倒那些本來(lái)對(duì)微軟平臺(tái)統(tǒng)治憂心忡忡的人了。然而更重要的是c#或.net戰(zhàn)略不會(huì)對(duì)原始c++構(gòu)成太大威脅,那么有理由推論c#和.net將是java的有力競(jìng)爭(zhēng)者。考慮相反方面:java vm靠翻譯字節(jié)碼來(lái)運(yùn)行應(yīng)用程序。cls在運(yùn)行時(shí)刻本機(jī)編譯。java平臺(tái)只支持java語(yǔ)言。.net只支持msil,但一些無(wú)限制的高級(jí)語(yǔ)言如c#,visual basic,甚至eiffel和cobol都能啟動(dòng)msil。java運(yùn)用執(zhí)行轉(zhuǎn)接提供真正的oop技術(shù)。msil,c#也是如此。在java平臺(tái),簡(jiǎn)單地移動(dòng)平級(jí)文件,項(xiàng)目就可以展開(kāi)為產(chǎn)品目錄。據(jù)說(shuō),.net平臺(tái)的項(xiàng)目也可輕松展開(kāi)而不像以registry-happy com為基礎(chǔ)的項(xiàng)目。或許java平臺(tái)真正的優(yōu)勢(shì)只在于政治上的正確性--它不是微軟搞出來(lái)的,且目前有成千上萬(wàn)的執(zhí)著的宗教追隨者。
作者的看法
具有諷刺意味的是,雖然我很了解java和c#,我仍被冠以高級(jí)visual basic程序設(shè)計(jì)師的稱號(hào)。人們會(huì)認(rèn)為我這樣一個(gè)vb設(shè)計(jì)師將是反對(duì)微軟的偏執(zhí)狂。但我也得面對(duì)現(xiàn)實(shí)。老實(shí)說(shuō):vb是一個(gè)rad開(kāi)發(fā)工具。別只顧著精美,別記著真正的對(duì)象。迅速得到結(jié)果才是重中之重。在商業(yè)世界里,純粹的技術(shù)和結(jié)果不總是能相吻合的,短期結(jié)果往往勝過(guò)長(zhǎng)期生產(chǎn)力。這是不幸的,但在許多公司中,這卻是事實(shí)。這些公司就是c#的主要用戶。我會(huì)使用c#嗎?當(dāng)然會(huì)用!我現(xiàn)在使用visual basic,但轉(zhuǎn)入c#有何不好?我更欣賞java和oop語(yǔ)言的精美,但因?yàn)槲疫M(jìn)行的所有項(xiàng)目中,短期成果一直勝過(guò)長(zhǎng)期成果,我已沒(méi)有時(shí)間去考慮替換windows平臺(tái)。但如從純技術(shù)和信仰角度來(lái)說(shuō),java和c++的程序設(shè)計(jì)師就有足夠理由關(guān)注c#,這是微軟維持壟斷的又一招。
最后,c#是好還是不好?那么,因?yàn)檫@里的“繼承”指對(duì)接口界面的再執(zhí)行,所以,它不是真正的oop。如果你是微軟,亦或如果你依靠微軟技術(shù)而不準(zhǔn)備切換平臺(tái),那c#是很棒的,并將為vb程序設(shè)計(jì)師們搬運(yùn)java和c++上的技巧提供很好的基礎(chǔ)(因?yàn)檎Z(yǔ)法是共享的)。但因?yàn)槲④泴⑷ν瞥鯿#,所以,java和c++的擁護(hù)者們肯定會(huì)設(shè)計(jì)出新的語(yǔ)言,予以還擊。同時(shí),c#不一定可轉(zhuǎn)移到其他平臺(tái),也不能真正體現(xiàn)oop的價(jià)值,甚至對(duì)oop的初學(xué)者有害無(wú)益。