轉貼:MSDN訪談錄之C#編程二

來源:互聯網
上載者:User
編程 ROBERT HESS:C#被認為是微軟的私人語言嗎?

ANDERS HEJLSBERG:其實並非如此。我們與產業夥伴特別是HP和Intel合作,今年年初,我們向一個叫做ECMA(歐洲電腦製造商協會)的歐洲標準化組織提交了建議,以便標準化C#和CLI。 CLI代表通用語言基層體系(Common Language Infrastructure)。

ROBERT HESS:而這是不是有點類似於C Runtime 和VB Runtime?

ANDERS HEJLSBERG:嗯,實際上CLI是.NET framework的一個大的子集。在某種意義上,它是.NET可以移植到其它平台的那部分。這意味著,例如,它不包括任何Windows專門的UI庫,因為其它平台對此並沒有多大的興趣。

ROBERT HESS:就象記憶體管理,而且……

ANDERS HEJLSBERG:嗯,絕對如此,記憶體管理,大部份的類庫被包含在CLI中。我們於9月份向ECMA提交了這個建議,並在一次ECMA會議上得到了採用,制訂這兩個標準的工作進行中中。其中一個是C#標準,而另一個是CLI標準。

ROBERT HESS:那麼,C#具有ECMA標準又意味著什嗎?

ANDERS HEJLSBERG:嗯,這意味著其它產業夥伴們可以也最有可能在不同的平台上實現該語言。

ROBERT HESS:如果我是類似波音這樣的公司,且擁有一些老式的PDP 11/70電腦,我想讓C#在其上面運行,可能會考慮利用ECMA標準給這些老掉牙的傢伙設計編譯器,如果沒有什麼人已經做了類似工作的話。

ANDERS HEJLSBERG:絕對正確。現在這兩個標準實際上已相繼被提交,而目前C#本身並沒有規定一個runtime庫,而是依賴於.NET framework,或者,當我們正在談論到標準提議時,C#依賴於通用語言基層體係為其提供的runtime基層體系和類庫。我們目前正在與標準化組織以及我們的產業夥伴們共同研究,以確定最低的門檻。很明顯,CLI將被分成幾個層次,事實上我們向ECMA提交的方案被分為幾個層次,這些層次開始於很低的核心層,而你真正地擁有了這些核心資料類型,一些象數組那樣十分簡單的東西,以及在那裡的所有原子變數(atoms),但是分子(molecules)就不必要了。它們被構建在更高層的棧上,因此對於嵌入裝置也是這樣,實際上可以把其應用於一個非常輕量級的環境(lightweight environment),而這種輕量級環境可以移植到不同的平台。

ROBERT HESS:因而我可以讓C#的一個版本在我的手錶中或某些類似的裝置中運行。

ANDERS HEJLSBERG:是的,理論上是這樣,或在您的冰箱中,或任何需要的地方。


ROBERT HESS:在某種程度上,這就是.NET framework的全部目標,也就是允許編程的基層體系存在於多種不同類型的裝置中,通過網路或藍芽等類似串連,一個裝置就可以和另一個裝置通訊,並且借用服務,提供相互支援,

ANDERS HEJLSBERG:對,那是其中的一部分。我想,現在我們應當牢記於心,儘管您談論到了分布式應用程式或者裝置之間的相互連訊,但安置在.NET framework甚至是在CLI中的基層體系,實際上並不要求在網路的兩端都有.NET存在。而且,我們所推薦的體繫結構確實具有引導作用,何時利用類庫來設計程式完全基於XML和SOAP這樣的產業標準,並且也可以在Linux box(比方說Java和Apache web server)中實現它,然後利用其它工具在另一端開發相應的程式,如果你樂意的話。

ROBERT HESS:因此在我的C#應用程式裡,假如我正在編寫它與一個外部服務串連,就可以視其為標準的C#調用,而運行於不同的機器上的一個外部服務可能是Amazon.com,或者類似於其它一些既不運行Windows也不運行C#的系統……


ANDERS HEJLSBERG:這正是所有web服務的夢想……


ROBERT HESS:而所有要做的事情就只有實現SOAP了。

ANDERS HEJLSBERG:是的,嗯,基本上我們所要做的是利用現有的internet的基層體系,意思是,傳輸協議是http,有效承載(payload)是以XML格式封裝的SOAP(SOAP formatted XML),並且實際上在網路的另一端可以是任何東西。當從C#中訪問XML和SOAP的調用時,我們事實上有能力使它們看起來象具有方法的對象,但是我們給你提供了所有的基層體系,通過在.NET framework中所具有的所有連續的基層體系,你便可以把方法調用轉換進XML SOAP包中,這樣的包可以穿越網路並回傳然後再解包。


ROBERT HESS:好了,您說您從事C#的工作至今已經幾年了,而XML的生命期也恰好與此相同。這就意味著當它們開始時,彼此之間是毫無瞭解的。


ANDERS HEJLSBERG:嗯,XML的曆史可能要長一點。SOAP卻相當新,它與C#還有.NET framework是齊頭並進的,並且我們也非常積極地從W3C引進這些標準化主體,我們一直在跟蹤它的發展,並把這些技術追加到最新的標準中。


ROBERT HESS:那麼SOAP和XML之間在這一層次上的相互串連性(interconnectivity)是否當初就是C#一個方面的內容,或者是隨著該語言的發展而發展的?


ANDERS HEJLSBERG:嗯,我認為這裡確實存在著一些距離。大部分需要處理XML和SOAP的基層體系是由.NET framework而不是C#提供的。C#語言建立在.NET framework的頂層,並使您具有訪問這些東西的權力,例如,通過我們在C#中稱之為屬性(attribute)的東西,在代碼中就可以直接表達什麼東西正由這個類的實體映射(mapping)成為穿越internet的XML格式。所以我可以說,例如對於成員(field),我想使這個成員變成具有同樣名字的XML元素,讓這個類名變成XML裡的標籤(tag)名,等等。而且屬性可以直接地整合到代碼裡,這就是使XML 和 C#變得更便於使用的措施之一。


ROBERT HESS:那麼它們真的很合適在一起?


ANDERS HEJLSBERG: 是的,確實如此。


ROBERT HESS:當考慮一個應用程式的設計時,為了更好地運用C#,我想要有條有理地建立應用程式,有沒有什麼不同的辦法?或者還是與正常地開發一個C應用程式具有相同的思路?

ANDERS HEJLSBERG:嗯,我認為關其中的一個關鍵原則就是,您是以一種很深的物件導向的方式進行編程的,甚至當您在使用C#時,是以一種面向組件的方式進行的。所以會趨向於認為您的應用程式設計有點區別。好,如果您正在使用C++,就可能會想到寫對象等等。當您用C#寫程式時,例如您可能會想到,哎呀,我正在寫一個組件嗎?嗯,這個組件必須能加入到Visual Studios的工具列,以便我可以把它拖到表單,或拖到一個商業對象,或拖到一個網頁,然後它是不是會被屬性偵測器(property inspector)顯示出來,哎呀,那麼在那裡我到底應該擁有什麼屬性,我怎麼控制下拉單裡的東西,我能不能擁有那樣的編輯器?現在,我們把基層體系的所有東西都呈現給您,它使您認識到您的設計不同於C++傳統的設計。

ROBERT HESS:因此很多時候,您仍然在編寫應用程式,通過裝點修飾應用程式,您正好有更多的效能要展示。


ANDERS HEJLSBERG:是的,您可以這麼說。


ROBERT HESS: 有關更多此類面向服務的完整概念是什麼呢?因此我正在編寫一個幾乎無GUI的應用程式並且運行在一台伺服器上,並計劃用一個web客戶程式對其進行攻擊。客戶程式請求首先到達伺服器並要求回應以便跟蹤包(package)等類似的東西。這是否從根本上改變了思路,或者仍然是同樣的服務方向?


ANDERS HEJLSBERG:嗯,我認為在某種意義上,它讓您多一點地考慮應用程式中的抽象。您應更加註意認識到,我是怎樣把應用程式安置到商業邏輯層(business logic tier)和展示層(presentation tier),是怎樣把API放到商業邏輯層,以便它既可以被表示邏輯用來表示HTML或基於UI的客戶,甚至也為遍布網上的Web服務指明進入點(entry points)。因此,您應注意一點,再也不能編寫那些鐵板一塊的程式了。

ROBERT HESS:您是否想象這本身有助於人們利用他人的組件比過去更容易?我記得在波音公司工作時,我們老是遇到有關代碼重用這個關鍵問題。我們必須確保所編寫的任何應用程式、任何代碼都是專為代碼重用而設計的,雖然這聽起來在理論上確實是一個偉大的主意,但在實踐中,卻由於從來沒有得到好好的利用而壽終正寢了,因為重用別人的代碼簡直是難上加難。您認為這樣居然能使代碼重用更容易嗎?

ANDERS HEJLSBERG:我認為會的,這裡起關鍵作用的實際上就是.NET framework。事實我們已經定義了這樣一個底層(substrate),在其之上可以產生組件。而說到許多關於如何把它們裝入類中,如何使它們成為組件,我們給您明確的指導,而事實上整個framework都當作其中一個範例,但關鍵是組件一律要能被各種各樣的語言所訪問,因此這裡您已經談論過這個問題,例如,如果某些傢伙在用Cobol編寫一些語言或庫而您卻想從C++中利用它們,您知道,這會特別困難。實際上我們提供給您一個substrate,讓您進行上述互動性操作。所以您大有希望使組件互動操作。因為事實上令人感到困惑的是,組件是以不同的設計觀點或在不同的抽象層上編寫而成的,這正是使人們糊塗之處。他們並不習慣於這種風格的API,因此迷失在基層體系之中,只見樹木不見森林,您應該明白我的意思。因此通過說明許多關於如何寫組件,並且提供了用於寫組件的永久有效API和基層體系,您就極其有希望獲得更好的重用性


ROBERT HESS:嗯,我認為解釋恰到好處。為了能抓住C#語言體系的重點,您認為最後還有什麼重要的概念要讓觀眾去理解?

ANDERS HEJLSBERG:我想最好的方法就是您應親自擺弄它。所以我會催促人們從我的網站下載,而我也相信您會給他們地址的。下載它,擺弄擺弄,寫出一些例子,參加我們的使用者組或新聞群組,和其他用過它的人交談,看看他們有什麼經驗。我想你會過得很舒心的。


ROBERT HESS:我肯定會在本記錄稿的後面建立一個連結,以讓他們下載目前的版本的C# runtime以及我們在PDC上公開的.NET材料,我猜我們會有另一個版本的……


ANDERS HEJLSBERG:我們的beta 1.0版要發布了……


ROBERT HESS: Beta 1.0版很快就要發布了,因此您提到的新聞群組裡也要建立一個串連到beta 1.0的連結。因此您應保證寄給我的email裡要含有這些新聞群組,以便我能建立。


ANDERS HEJLSBERG: 好的。


ROBERT HESS:謝謝Anders,感謝您的談話,而且我希望觀眾感謝這位真正協助過設計C#語言的專家,感謝他有關開發應用程式的心得。
    在短暫的休息之後,我們會繼續與一位程式員交談,至今他用C#開發應用程式已經有些時日了,我們會瞭解到他對這種語言的想法,以及任何有助於我們用C#開發自己應用程式的線索。所以請不要走開哦。

相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。