Mcrosoft中間語言的主要特徵

2022-01-18 16:17:09 字數 1770 閱讀 6175

mcrosoft中間語言顯然在.net framework中起著非常重要的作用。現在討論一下il(intermideate language)的主要特徵。因為面向.net的所有語言在邏輯上都需要支援il的主要特徵。

下面是中間語言il的主要特徵:

1、物件導向和介面的支援

.net的語言無關性還有一些實際的限制。中間語言在設計時就打算實現某些特殊的程式設計方法,這表示面對它的餘元必須與程式設計方法相容,microsoft為il選擇的特定道路是傳統的物件導向的程式設計,帶有類的單一繼承性。

除了傳統的物件導向程式設計外,中間語言還引入了介面的概念,在帶有com的windows下第一次實現了介面。用.net建立的介面與com介面不同,他們不需要支援任何com基礎結構。例如,它們不是派生自iunknown,也沒有對應的guid。但它們與com介面共享下述理念:提供乙個契約,實現給定介面的類必須提供該介面指定的方法和屬性的實現方式。

2、不同的值型別和引用型別

與其他的程式語言一樣,中間語言提供了許多預定義的基本資料型別。它的乙個特性是值型別和引用型別之間有明顯的區別。對於值型別(value type)變數直接儲存其資料,而對於引用型別(reference type)變數僅儲存位址,對應的資料可以在該位址中找到。

在c++中,使用引用型別類似於通過指標來訪問變數,而在visual basic中,與引用型別最相似的是物件,visual basic 6總是通過引用來訪問物件。中間語言也有資料儲存的規範:引用型別的例項總是儲存在乙個名為「託管堆」的記憶體區域中,值型別一般儲存在堆疊中(但如果值型別在引用型別中宣告為字段,他們就內聯保存在堆中)。

3、強型別資料化

中間語言的乙個重要方面是它基於資料型別化。所有的變數都清晰地標記為屬於某個特定資料型別。特別是中間語言一般不允許對模糊的資料型別執行任何操作。c++開發人員習慣於在不同型別之間轉換指標型別。執行這類操作將極大的提高效能,但破壞了型別的安全性。

語言互操作性中強資料型別化的重要性

如果類派生自其他類,或包含其他類的例項,它就需要知道其他類使用的所有資料型別,這就是強資料型別化非常重要的原因。實際上,過去由於缺少用於指定這類資訊的系統,從而成為語言繼承和互動操作的真正障礙。

通用型別系統(common type system)

此類資料型別問題在.net中使用通用型別系統得到了解決。cts定義了可以在中間語言中使用的預定義資料型別們所有面向.net framework的語言都可以生產最終基於這些型別的編譯**。

cts不僅指定了基本資料型別,還定義了乙個內容豐富的型別層次結構,其中包含設計合理的位置,在這些位置上,**允許定義它自己的型別。cts的層次結構反映了中間語言的單一繼承的物件導向的方法,如下圖所示。

公共語言規範(cls)

公共語言規範(comom language specification,cls)和通用型別系統一起確保語言的互操作性。cls是乙個最低標準集,所有面向.net的編譯器都必須支援它。因為il是一種內涵非常豐富的語言,大多數編譯器的編寫人員有可能把給定編譯器的功能限制為只支援il和cts提供的一部分功能。 只要編譯器支援已在cls中定義的內容,這就很不錯。

4、通過異常處理錯誤

5、特性的使用

.net支援特性。在.net中,對特性的革新是可以在源**中定義自己的自定義特性。這些使用者定義的特性將和對應資料型別或方法的元資料放在一起,這對於文件記錄十分有效,它們和反射技術一起使用以根據特性執行程式設計任務。另外,與.net的語言無關性的基本原理一樣,特性也可以在一種語言的源**中定義,而被用另一種語言編寫的**讀取。

使用內聯中間語言

使用內聯中間語言 inline il 內聯中間語言 inline il 直接在中間語言 intermediate language,il 定義的函式體,中間語言 f 編譯語言,這主要是為了語言新增到達到乙個較低的比運算子和函式。例項,加法和box 和 not 的功能。我們非常少會用到這個功能,由於f...

Go語言的中介軟體

go的net http設計的 特點就是特別容易構建中介軟體。gin也提供了類似的中介軟體。需要注意的是中介軟體只對註冊過的路由函式起作 對於分組路由,巢狀使 中介軟體,可以限定中介軟體的作 範圍。下面2個中介軟體作用 統計處理的延時 列印處理的狀態 中介軟體1 直接是乙個處理函式 func midd...

訊息中介軟體的主要作用和基本概念

大多應用中,可通過訊息服務中介軟體來提公升系統非同步通訊 擴充套件解耦能力 例如使用者註冊需要傳送註冊郵件和註冊簡訊的場景 方式1 傳統做法序列呼叫,資料庫 郵件 簡訊一套下來,需要150秒相應使用者,太慢 方式2 分兩個執行緒分別去發郵件和簡訊,需要響應100ms,還是有點慢 方式3 資料庫寫入成...