Dot-Net
SOS 中的“EE”是什麼意思?
我發現“EE”對我來說是一個神奇的詞。
在 CLR 內部,有一個“EEClass”,它是由 CLR 類載入器創建的。而且不知道為什麼叫EEClass。
現在,來到 SOS 世界,這裡還有更多的 EE,比如 EEHeap、EEStack [-EE]、Name2EE…. 它們在這裡代表的意思是一樣的嗎?
CLR 早在被用於執行 .NET 程式碼之前就已開始使用。最初是 Project 42 中的 Universal Runtime,這是一個失敗的項目,但其部分在後續項目(如 .NET)中倖存下來。在演變為 .NET 的執行引擎之前,繼續發展為 NGWS(下一代 Windows 服務)。42 是該小組在微軟園區工作的建築編號。
幾個首字母縮略詞倖存下來,在 SSCLI20 原始碼和您在調試器和標頭檔中看到的名稱中非常明顯。一小部分:
- URT,通用執行時。古老的,它只保留在您從託管程式碼中獲得的本機錯誤程式碼中,它們在 WinError.h 標頭檔中有設施程式碼 19,FACILITY_URT。這使得任何此類錯誤程式碼值為 0x8013xxxx。
- COM+ 或 COMPlus。同樣古老的是,COM+ 是 COM 的演變,以在中間件戰爭中輸給 Java 和微軟中主要負責 Project 42 的小組的名稱而著稱。在異常名稱中仍然可見,包括任何 .NET 異常的本機異常程式碼:0xe0434f4d。434f4d 是“COM”的 ASCII 碼。CLR 本身實際上使用的 COM 程式碼非常少,只是從 pdb 和自定義託管、調試器和分析器介面生成堆棧跟踪。
- COR,通用對象執行時。在 Project 42 位之後開始出現的首字母縮寫詞。存在於 SDK 標頭檔的所有名稱中,例如 Cor.h、CorError.h、CorDebug.h 和幾個託管 api 名稱,例如 CorBindToRuntimeEx。順便說一句,在 .NET 4 版本中重命名為“CLR”。
- EE,執行引擎。出現在專門用於執行 .NET 程式碼的 CLR 部分的名稱中。正如你所發現的。
- SOS,罷工之子。使用 DAC(數據訪問組件)掛鉤並顯示內部 CLR 資料結構的調試器擴展。Strike 是用於使 .NET 版本 1.0 執行的調試器擴展的名稱,當時它的內部項目名稱為 Lightning。閃電打擊,你懂的。演變為通用調試工具,從而成為 Strike 之子。DAC 可從 mscordacwks.dll 執行時支持 DLL 中看到,並且當您嘗試載入使用不同 CLR 修訂版創建的小型轉儲時收到的錯誤消息。
內部項目名稱在 .NET Framework 原始碼中也很顯眼。.NET 1.0 是 Lightning,.NET 1.1 是 Everett,.NET 2.0 是 Whidbey,WPF 是 Avalon,WCF 是 Indigo。
一個類似的涉及 CLR 的高顏值項目正在發生。超級秘密,它的代號是Midori。除了它旨在實現基於託管程式碼的整個作業系統之外,對此知之甚少。對原本廣為人知的 Singularity 原型的跟進。