小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

.NET 本質(zhì)論 讀書筆記

 牛人的尾巴 2016-12-13

.NET 本質(zhì)論 讀書筆記 - COM 與CLR

作者:ifreely0204

COM 全稱Component Object Mode 組件對象模型。

很慶幸剛?cè)胄熊浖_發(fā)的時候沒有去寫COM組件,也很遺憾沒有去做一些底層的事情。

一開始接觸.NET的時候就被灌輸一個模糊的理念,.NET中有一個叫中間語言的東西,一個模糊的說法,ASP.NET第一次運行的時候會比較慢,不過那時候就埋頭去學(xué)C#了,沒有深入研究.net framework的機制,某種意義上說就是純粹的代碼工人,干體力活的,人家搬磚我搬字母,一個重點用肩扛手拉一個輕點用腦子和指頭敲敲打打,其實還真是同行,呵呵。

 

不過一個人的知識總是有限的,但總是有大師給我們指路解惑,Don Box 的這本書讀著真的是感覺大腦做了一次升級,以前亂七八糟的知識在這里一串就全通了。

 

讀一章寫一點,結(jié)合著另一本Jeffrey Richter寫的《Microsoft .NET 框架程序設(shè)計》一起來對.NET做一個深入的了解。

 

.NET 本質(zhì)論 第一章 CLR是一個更好的COM

 

首先要知道組件的概念:一個可復(fù)用的代碼塊,可以將多個獨立函數(shù)的功能進行組合,從而擴充成諸如Office Word 這樣的應(yīng)用程序。就像兒童玩的積木一樣,一塊塊的積木就是一個個的組件,搭出來的東西就是應(yīng)用程序。組件之間有各種約定,這些約定表現(xiàn)為簡單的函數(shù)入口點,這樣不同組件之間就可以通過這些約定進行相互之間的調(diào)用

而COM 的設(shè)計規(guī)范就是將組件約定表示為類型定義。所以多數(shù)COM下的問題都能追溯到組件間約定的本性上。COM 用類型的形式表示組件約定,但是第一COM規(guī)范特別避免強制用于約定定義的交換格式,所以組件間的約定無法以標準化的方式描述;第二MS定義和支持的COM交換格式有兩個,一個是接口定義語言IDL 和類型庫TLB,但是自家兄弟之間不同心,這兩種格式不是同構(gòu)的,即互相之間無法互相支持,而且互相不能成為對方的子集,這樣一來子集內(nèi)部就會有兩種交換格式,而且沒有一種是權(quán)威的或是標準的。

COM沒有描述組件之間的依賴性dependency,說白了就是部署時候不知道哪個DLL是必須要調(diào)用的哪些可以不調(diào)用,所以似乎就是把所有的DLL都包括進去就是最保險的了,但是同一個組件的版本也沒法靜態(tài)的確定,所以版本問題的診斷液很難。

第二個大問題是COM約定描述格式缺乏擴展性,這和MS事務(wù)服務(wù)器有關(guān)系。

上面的兩個大問題是COM問題的一方面,最重要的是COM約定本身是面向物理的physical,也稱二進制約定。即COM對于組件調(diào)用有著嚴格的規(guī)定,

1、每一個方法都有精確的vtable(虛函數(shù)表)偏移量;

2、在調(diào)用的時候COM約定使用明確的堆棧規(guī)則;

3、COM約定強制每一個作為方法參數(shù)傳遞的數(shù)據(jù)結(jié)構(gòu)的明確偏移量,即傳參的時候參數(shù)順序也不能有錯誤;

4、COM約定強制命令具體使用哪一個為被調(diào)用者分配內(nèi)存的分配器;

5、COM約定強制對象引用的明確格式,成為接口指針。

所以綜上實際上COM約定最終就是形成了一個堆棧結(jié)構(gòu)的協(xié)議,確定了每一個方法、變量如何在內(nèi)存中分配,基本上就是告訴機器如何分配組件的每一部分,而沒有描述一些語義上的內(nèi)容,我的理解就是低級語言。這樣一來,對程序的可控性確實大大提高,但是過分的控制就會降低開發(fā)的效率,用“難以接受的不可靠性為代價”換取“高效的代碼”,這個確實不合算。

 

CLR的歷史經(jīng)過了幾次命名,從COM3 ->公共對象運行庫COR(Component Object Runtime -> COM+ ->通用運行庫URT(Universal Runtime) ->CLR。

和COM 相比,CLR也關(guān)注組件間的約定,這些約定也是基于類型的,這是兩者相同的地方。

 

本質(zhì)不同的在于:

1、CLR有完全規(guī)范的格式描述組件之間的約定,即我們熟悉而又陌生的元數(shù)據(jù)(metadata)。元數(shù)據(jù)是機器可讀的,其格式是遵循規(guī)范的。在開發(fā)中也會接觸到元數(shù)據(jù),而且是可讀寫的,實際上這是CLR提供的一些實用部件,使我們可以對元數(shù)據(jù)進行操作。此外,元數(shù)據(jù)包括了組件間的依賴關(guān)系和版本關(guān)系,這就避免了前面提到的那些惱人的問題。

2、第二個區(qū)別是約定本身。先說說COM,在COM中組件約定“暗示了堆棧約定、虛函數(shù)表,以及作為方法參數(shù)傳遞的數(shù)據(jù)結(jié)構(gòu)在內(nèi)存中的表示形式”,于COM 這種物理約定相比,CLR的約定是一種描述邏輯結(jié)構(gòu)的約定,沒有暗示訪問字段或者方法的精確的代碼順序,也沒有約定任何數(shù)據(jù)的內(nèi)存表示形式。CLR使用名字與簽名代替偏移量引用字段和方法,所有對于數(shù)據(jù)結(jié)構(gòu)的內(nèi)存表示形式都被延期,直到在運行類型被加載以及初始化時才確定。實現(xiàn)這種延期的方法就是采用了公共中間語言CIL(Common Intermediate Language)機制來延期那些偏移量的解析。

 

所以可以看到COM和CLR的本質(zhì)區(qū)別就在于是否對數(shù)據(jù)結(jié)構(gòu)進行內(nèi)存分配。CLR將這個操作延期的優(yōu)勢在于在部署的時候可以根據(jù)部署機器上的目標處理架構(gòu)生成與之匹配的物理耦合,這樣開發(fā)著不必關(guān)系部署機器的架構(gòu),只要編寫好了程序,通過CIL可以將程序翻譯為適合任何部署機器架構(gòu)的實際運行代碼,當然,任何程序最終運行時都要翻譯成相應(yīng)的部署機器的機器語言,使得部署機器可以執(zhí)行程序。CLR通過這種延期機制,實現(xiàn)了程序的任意遷移。

 

CLR做的所有這些虛擬化工作可以大大降低與機器交互的難度,可以讓我們使用任何我們喜歡的高級語言來進行程序的編寫。

 

以上是根據(jù)我自己的理解并摘寫原書中的一些描述來寫的,讀完這一章的東西,個人感覺,總有一天,人人都會寫程序的!呵呵

 

------Study is never too later!

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多