ROBERT HESS:C#被認(rèn)為是微軟的私有語(yǔ)言嗎?
ANDERS HEJLSBERG:其實(shí)并非如此。我們與產(chǎn)業(yè)伙伴特別是HP和Intel合作,今年年初,我們向一個(gè)叫做ECMA(歐洲計(jì)算機(jī)制造商協(xié)會(huì))的歐洲標(biāo)準(zhǔn)化組織提交了建議,以便標(biāo)準(zhǔn)化C#和CLI。 CLI代表通用語(yǔ)言基層體系(Common Language Infrastructure)。
ROBERT HESS:而這是不是有點(diǎn)類似于C Runtime 和VB Runtime? ANDERS HEJLSBERG:嗯,實(shí)際上CLI是.NET framework的一個(gè)大的子集。在某種意義上,它是.NET可以移植到其它平臺(tái)的那部分。這意味著,例如,它不包括任何Windows專門(mén)的UI庫(kù),因?yàn)槠渌脚_(tái)對(duì)此并沒(méi)有多大的興趣。
ROBERT HESS:就象內(nèi)存管理,而且…… ANDERS HEJLSBERG:嗯,絕對(duì)如此,內(nèi)存管理,大部份的類庫(kù)被包含在CLI中。我們于9月份向ECMA提交了這個(gè)建議,并在一次ECMA會(huì)議上得到了采用,制訂這兩個(gè)標(biāo)準(zhǔn)的工作正在進(jìn)行中。其中一個(gè)是C#標(biāo)準(zhǔn),而另一個(gè)是CLI標(biāo)準(zhǔn)。
ROBERT HESS:那么,C#具有ECMA標(biāo)準(zhǔn)又意味著什么?
ANDERS HEJLSBERG:嗯,這意味著其它產(chǎn)業(yè)伙伴們可以也最有可能在不同的平臺(tái)上實(shí)現(xiàn)該語(yǔ)言。
ROBERT HESS:如果我是類似波音這樣的公司,且擁有一些老式的PDP 11/70計(jì)算機(jī),我想讓C#在其上面運(yùn)行,可能會(huì)考慮利用ECMA標(biāo)準(zhǔn)給這些老掉牙的家伙設(shè)計(jì)編譯器,如果沒(méi)有什么人已經(jīng)做了類似工作的話。 ANDERS HEJLSBERG:絕對(duì)正確。現(xiàn)在這兩個(gè)標(biāo)準(zhǔn)實(shí)際上已相繼被提交,而目前C#本身并沒(méi)有規(guī)定一個(gè)runtime庫(kù),而是依賴于.NET framework,或者,當(dāng)我們正在談?wù)摰綐?biāo)準(zhǔn)提議時(shí),C#依賴于通用語(yǔ)言基層體系為其提供的runtime基層體系和類庫(kù)。我們目前正在與標(biāo)準(zhǔn)化組織以及我們的產(chǎn)業(yè)伙伴們共同研究,以確定最低的門(mén)檻。很明顯,CLI將被分成幾個(gè)層次,事實(shí)上我們向ECMA提交的方案被分為幾個(gè)層次,這些層次開(kāi)始于很低的核心層,而你真正地?fù)碛辛诉@些核心數(shù)據(jù)類型,一些象數(shù)組那樣十分簡(jiǎn)單的東西,以及在那里的所有原子變量(atoms),但是分子(molecules)就不必要了。它們被構(gòu)建在更高層的棧上,因此對(duì)于嵌入設(shè)備也是這樣,實(shí)際上可以把其應(yīng)用于一個(gè)非常輕量級(jí)的環(huán)境(lightweight environment),而這種輕量級(jí)環(huán)境可以移植到不同的平臺(tái)。 ROBERT HESS:因而我可以讓C#的一個(gè)版本在我的手表中或某些類似的設(shè)備中運(yùn)行。 ANDERS HEJLSBERG:是的,理論上是這樣,或在您的冰箱中,或任何需要的地方。
ROBERT HESS:在某種程度上,這就是.NET framework的全部目標(biāo),也就是允許編程的基層體系存在于多種不同類型的設(shè)備中,通過(guò)網(wǎng)絡(luò)或藍(lán)牙等類似連接,一個(gè)設(shè)備就可以和另一個(gè)設(shè)備通訊,并且借用服務(wù),提供相互支持, ANDERS HEJLSBERG:對(duì),那是其中的一部分。我想,現(xiàn)在我們應(yīng)當(dāng)牢記于心,盡管您談?wù)摰搅朔植际綉?yīng)用程序或者設(shè)備之間的相互通訊,但安置在.NET framework甚至是在CLI中的基層體系,實(shí)際上并不要求在網(wǎng)絡(luò)的兩端都有.NET存在。而且,我們所推薦的體系結(jié)構(gòu)確實(shí)具有引導(dǎo)作用,何時(shí)利用類庫(kù)來(lái)設(shè)計(jì)程序完全基于XML和SOAP這樣的產(chǎn)業(yè)標(biāo)準(zhǔn),并且也可以在Linux box(比方說(shuō)Java和Apache web server)中實(shí)現(xiàn)它,然后利用其它工具在另一端開(kāi)發(fā)相應(yīng)的程序,如果你樂(lè)意的話。 ROBERT HESS:因此在我的C#應(yīng)用程序里,假如我正在編寫(xiě)它與一個(gè)外部服務(wù)連接,就可以視其為標(biāo)準(zhǔn)的C#調(diào)用,而運(yùn)行于不同的機(jī)器上的一個(gè)外部服務(wù)可能是Amazon.com,或者類似于其它一些既不運(yùn)行Windows也不運(yùn)行C#的系統(tǒng)……
ANDERS HEJLSBERG:這正是所有web服務(wù)的夢(mèng)想……
ROBERT HESS:而所有要做的事情就只有實(shí)現(xiàn)SOAP了。 ANDERS HEJLSBERG:是的,嗯,基本上我們所要做的是利用現(xiàn)有的internet的基層體系,意思是,傳輸協(xié)議是http,有效承載(payload)是以XML格式封裝的SOAP(SOAP formatted XML),并且實(shí)際上在網(wǎng)絡(luò)的另一端可以是任何東西。當(dāng)從C#中訪問(wèn)XML和SOAP的調(diào)用時(shí),我們事實(shí)上有能力使它們看起來(lái)象具有方法的對(duì)象,但是我們給你提供了所有的基層體系,通過(guò)在.NET framework中所具有的所有連續(xù)的基層體系,你便可以把方法調(diào)用轉(zhuǎn)換進(jìn)XML SOAP包中,這樣的包可以穿越網(wǎng)絡(luò)并回傳然后再解包。
ROBERT HESS:好了,您說(shuō)您從事C#的工作至今已經(jīng)幾年了,而XML的生命期也恰好與此相同。這就意味著當(dāng)它們開(kāi)始時(shí),彼此之間是毫無(wú)了解的。
ANDERS HEJLSBERG:嗯,XML的歷史可能要長(zhǎng)一點(diǎn)。SOAP卻相當(dāng)新,它與C#還有.NET framework是齊頭并進(jìn)的,并且我們也非常積極地從W3C引進(jìn)這些標(biāo)準(zhǔn)化主體,我們一直在跟蹤它的發(fā)展,并把這些技術(shù)追加到最新的標(biāo)準(zhǔn)中。
ROBERT HESS:那么SOAP和XML之間在這一層次上的相互連接性(interconnectivity)是否當(dāng)初就是C#一個(gè)方面的內(nèi)容,或者是隨著該語(yǔ)言的發(fā)展而發(fā)展的?
ANDERS HEJLSBERG:嗯,我認(rèn)為這里確實(shí)存在著一些距離。大部分需要處理XML和SOAP的基層體系是由.NET framework而不是C#提供的。C#語(yǔ)言建立在.NET framework的頂層,并使您具有訪問(wèn)這些東西的權(quán)力,例如,通過(guò)我們?cè)贑#中稱之為屬性(attribute)的東西,在代碼中就可以直接表達(dá)什么東西正由這個(gè)類的實(shí)體映射(mapping)成為穿越internet的XML格式。所以我可以說(shuō),例如對(duì)于成員(field),我想使這個(gè)成員變成具有同樣名字的XML元素,讓這個(gè)類名變成XML里的標(biāo)簽(tag)名,等等。而且屬性可以直接地集成到代碼里,這就是使XML 和 C#變得更易于使用的措施之一。
ROBERT HESS:那么它們真的很合適在一起?
ANDERS HEJLSBERG: 是的,確實(shí)如此。
ROBERT HESS:當(dāng)考慮一個(gè)應(yīng)用程序的設(shè)計(jì)時(shí),為了更好地運(yùn)用C#,我想要有條有理地建立應(yīng)用程序,有沒(méi)有什么不同的辦法?或者還是與正常地開(kāi)發(fā)一個(gè)C應(yīng)用程序具有相同的思路? ANDERS HEJLSBERG:嗯,我認(rèn)為關(guān)其中的一個(gè)關(guān)鍵原則就是,您是以一種很深的面向?qū)ο蟮姆绞竭M(jìn)行編程的,甚至當(dāng)您在使用C#時(shí),是以一種面向組件的方式進(jìn)行的。所以會(huì)趨向于認(rèn)為您的應(yīng)用程序設(shè)計(jì)有點(diǎn)區(qū)別。好,如果您正在使用C++,就可能會(huì)想到寫(xiě)對(duì)象等等。當(dāng)您用C#寫(xiě)程序時(shí),例如您可能會(huì)想到,哎呀,我正在寫(xiě)一個(gè)組件嗎?嗯,這個(gè)組件必須能加入到Visual Studios的工具欄,以便我可以把它拖到表單,或拖到一個(gè)商業(yè)對(duì)象,或拖到一個(gè)網(wǎng)頁(yè),然后它是不是會(huì)被屬性檢查器(property inspector)顯示出來(lái),哎呀,那么在那里我到底應(yīng)該擁有什么屬性,我怎么控制下拉單里的東西,我能不能擁有那樣的編輯器?現(xiàn)在,我們把基層體系的所有東西都呈現(xiàn)給您,它使您認(rèn)識(shí)到您的設(shè)計(jì)不同于C++傳統(tǒng)的設(shè)計(jì)。 ROBERT HESS:因此很多時(shí)候,您仍然在編寫(xiě)應(yīng)用程序,通過(guò)裝點(diǎn)修飾應(yīng)用程序,您正好有更多的性能要展示。
ANDERS HEJLSBERG:是的,您可以這么說(shuō)。
ROBERT HESS: 有關(guān)更多此類面向服務(wù)的完整概念是什么呢?因此我正在編寫(xiě)一個(gè)幾乎無(wú)GUI的應(yīng)用程序并且運(yùn)行在一臺(tái)服務(wù)器上,并計(jì)劃用一個(gè)web客戶程序?qū)ζ溥M(jìn)行攻擊。客戶程序請(qǐng)求首先到達(dá)服務(wù)器并要求回應(yīng)以便跟蹤包(package)等類似的東西。這是否從根本上改變了思路,或者仍然是同樣的服務(wù)方向?
ANDERS HEJLSBERG:嗯,我認(rèn)為在某種意義上,它讓您多一點(diǎn)地考慮應(yīng)用程序中的抽象。您應(yīng)更加注意認(rèn)識(shí)到,我是怎樣把應(yīng)用程序安置到商業(yè)邏輯層(business logic tier)和表示層(presentation tier),是怎樣把API放到商業(yè)邏輯層,以便它既可以被表示邏輯用來(lái)表示HTML或基于UI的客戶,甚至也為遍布網(wǎng)上的Web服務(wù)指明入口點(diǎn)(entry points)。因此,您應(yīng)注意一點(diǎn),再也不能編寫(xiě)那些鐵板一塊的程序了。 ROBERT HESS:您是否想象這本身有助于人們利用他人的組件比過(guò)去更容易?我記得在波音公司工作時(shí),我們老是遇到有關(guān)代碼重用這個(gè)關(guān)鍵問(wèn)題。我們必須確保所編寫(xiě)的任何應(yīng)用程序、任何代碼都是專為代碼重用而設(shè)計(jì)的,雖然這聽(tīng)起來(lái)在理論上確實(shí)是一個(gè)偉大的主意,但在實(shí)踐中,卻由于從來(lái)沒(méi)有得到好好的利用而壽終正寢了,因?yàn)橹赜脛e人的代碼簡(jiǎn)直是難上加難。您認(rèn)為這樣居然能使代碼重用更容易嗎? ANDERS HEJLSBERG:我認(rèn)為會(huì)的,這里起關(guān)鍵作用的實(shí)際上就是.NET framework。事實(shí)我們已經(jīng)定義了這樣一個(gè)底層(substrate),在其之上可以生成組件。而說(shuō)到許多關(guān)于如何把它們裝入類中,如何使它們成為組件,我們給您明確的指導(dǎo),而事實(shí)上整個(gè)framework都當(dāng)作其中一個(gè)范例,但關(guān)鍵是組件一律要能被各種各樣的語(yǔ)言所訪問(wèn),因此這里您已經(jīng)談?wù)撨^(guò)這個(gè)問(wèn)題,例如,如果某些家伙在用Cobol編寫(xiě)一些語(yǔ)言或庫(kù)而您卻想從C++中利用它們,您知道,這會(huì)特別困難。實(shí)際上我們提供給您一個(gè)substrate,讓您進(jìn)行上述交互性操作。所以您大有希望使組件交互操作。因?yàn)槭聦?shí)上令人感到困惑的是,組件是以不同的設(shè)計(jì)觀點(diǎn)或在不同的抽象層上編寫(xiě)而成的,這正是使人們糊涂之處。他們并不習(xí)慣于這種風(fēng)格的API,因此迷失在基層體系之中,只見(jiàn)樹(shù)木不見(jiàn)森林,您應(yīng)該明白我的意思。因此通過(guò)說(shuō)明許多關(guān)于如何寫(xiě)組件,并且提供了用于寫(xiě)組件的永久有效的API和基層體系,您就極其有希望獲得更好的重用性
ROBERT HESS:嗯,我認(rèn)為解釋恰到好處。為了能抓住C#語(yǔ)言體系的重點(diǎn),您認(rèn)為最后還有什么重要的概念要讓觀眾去理解? ANDERS HEJLSBERG:我想最好的方法就是您應(yīng)親自擺弄它。所以我會(huì)催促人們從我的站點(diǎn)下載,而我也相信您會(huì)給他們地址的。下載它,擺弄擺弄,寫(xiě)出一些例子,參加我們的用戶組或新聞組,和其他用過(guò)它的人交談,看看他們有什么經(jīng)驗(yàn)。我想你會(huì)過(guò)得很舒心的。
ROBERT HESS:我肯定會(huì)在本記錄稿的后面建立一個(gè)鏈接,以讓他們下載當(dāng)前版本的C# runtime以及我們?cè)赑DC上公開(kāi)的.NET材料,我猜我們會(huì)有另一個(gè)版本的……
ANDERS HEJLSBERG:我們的beta 1.0版要發(fā)布了……
ROBERT HESS: Beta 1.0版很快就要發(fā)布了,因此您提到的新聞組里也要建立一個(gè)連接到beta 1.0的鏈接。因此您應(yīng)保證寄給我的email里要含有這些新聞組,以便我能建立。
ANDERS HEJLSBERG: 好的。
ROBERT HESS:謝謝Anders,感謝您的談話,而且我希望觀眾感謝這位真正幫助過(guò)設(shè)計(jì)C#語(yǔ)言的專家,感謝他有關(guān)開(kāi)發(fā)應(yīng)用程序的心得。 在短暫的休息之后,我們會(huì)繼續(xù)與一位程序員交談,至今他用C#開(kāi)發(fā)應(yīng)用程序已經(jīng)有些時(shí)日了,我們會(huì)了解到他對(duì)這種語(yǔ)言的想法,以及任何有助于我們用C#開(kāi)發(fā)自己應(yīng)用程序的線索
|
溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!