運行語言特點是交叉語言集成、自描述組件、簡單配制和版本化及集成安全服務。
運行語言使用一種新的能表達大部分現代編程語言語義的通用類型系統,通用類型系統定義了一套標準類型及生成新標準的規則。運行語言知道怎樣生成、執行這些類型。編譯器和解釋器使用運行語言服務定義類型、管理對象、進行方法調用,而不是使用工具或特定于語言的方法。
類型系統的主要設計目的是使多種語言能深度集成。用一種語言所寫的代碼能繼承用另一種語言所寫的類的實現,用一種語言所寫的代碼拋出的異常能被用另一種語言寫的代碼捕獲,像調試和剖析之類的操作會在完全封閉下工作,而不用考慮代碼所用的語言。這就意味著編寫可重用類庫的開發者,不再需要為每一種編程語言或編譯器生成一個版本,并且類庫的開發者不再受到為他們使用的編程語言開發的庫的限制。
自描述組件——現在microsoft .net框架上已成為可能,簡化了開發和配制,并提高了系統的可靠性。許多由運行語言提供的服務是由元數據及用于補充可執行代碼的信息所驅動。因為所有的信息都儲存在一起,只有可執行的(代碼)才被稱為自描述組件。
自描述組件的一個主要優點是,使用它們并不需要其它文件。類的定義不需要單獨的頭文件;通過檢查原數據對類的定義可以從組件自身獲得。跨語言或過程邊界訪問組件并不需要各自的idl文件、類型文件或proxy/stubs;所必需的信息已存在于元數據之中。為識別開發者請示的服務屬性,并不需要展開各自的配制信息。 最主要的是,由于元數據是在編譯過程中由源代碼生成,并與可執行代碼儲存在一起,它將永遠和可執行部分同步。
除了改善對單個組件的配制,microsoft .net框架定義了一個應用程序配制模板,以解決定置應用程序安裝和dll版本化(通常被稱為“dll hell”)這一復雜過程的問題,運行語言提供了支持這個模板的服務。
microsoft .net框架 引入了組合體的概念。一個組合體是一組資源和類型,并包括有關這些資源和類型的元數據,也就是被作為一個單元配制的。元數據被稱為組合體的名單,它包含象類型和資源表之類能被組合體外看得見的信息,這個名單也包括有關從屬關系之類的信息,例如組合體建立時的版本號。開發人員可以指定版本策略,以指示運行語言是否裝入系統上已安裝的依賴于組合體的最新版本,裝入一個指定版本,或在編譯時使用的版本。
某軟件組件的多個拷貝總可以存在于同樣的操作系統上,然而,通常說來,只有其中的一個拷貝能被操作系統注冊、調入內存、執行。對系統來說,定位和調入內存的策略是全局性。。net framework common language runtime 增加了所必須的體系架構以支持管理組件定位和調入的每個應用程序策略,這通常被稱為并行配制。
組合體可以被一個應用程序私有,或被多個應用程序共享。一個組合體的多個版本可以同時配制在同一臺機器上。應用程序配制信息定義了到何處去查找組合體,這樣runtime就能為同時運行的兩個不同的應用程序裝入同一組合體的不同版本。這就消除了由組件版本的不兼容性引起的問題,提高了系統整體的穩定性。如果必要,管理員可以為配制時刻的組合體增加配制信息,例如一個不同的版本策略,但是編譯時提供的原始信息永遠不會丟失。
因為組合體是自描述的,所以并不需要在系統上進行顯式注冊。應用程序的配制簡單到只需將文件拷貝到目錄中既可(如果為了使應用程序能夠運行,必須安裝未經組織過的組件的話,情況會稍微復雜一點)。配制信息保存在可被任何文本編輯器編輯的xml文件中。
最后,運行語言也提供完整的、普遍深入的安全服務,以確保未經授權的用戶不能訪問機器上的資源,并且代碼不會執行未經允許的動作。這就提高了系統整體的安全性可靠性。 由于運行語言用于裝入代碼、生成對象、執行方法調用,所以當受控代碼裝入內存執行時,運行語言能進行安全檢查,強化安全策略。
microsoft .net框架不僅規定代碼訪問安全,還規定基于角色的安全。通過代碼訪問安全機制,開發人員能為應用程序指定完成工作所必需的權限。例如,代碼或許需要寫文件或訪問環境變量的權力。這類信息和有關代碼標志的信息一起存儲在配制級上的。當代碼裝入內存及執行方法調用時,運行語言驗證是否能給予代碼所要求的權限。如果不能,將記錄一條安全沖突信息。給予權限的策略,這被稱為信任策略,是由系統管理員建立的,并且是建立在關于代碼的證據基礎之上,比如:代碼是誰發布的,是從什么地方獲得的,以及在組合體中找到的代碼標志和它要求的權限。開發人員可以指定他們顯然不需要的權限,以防止其它人惡意使用他們的代碼。如果所需要的權限依賴直到運行時刻才會知道的信息,那么就可寫入綱鄰性的安全檢查。
除了代碼訪問安全,運行語言還支持基于角色的安全。基于角色的安全建立同代碼訪問安全一樣的權限模板,只是這些權限是建立在用戶的身份之上,而不是建立在代碼的標志之上。角色表明了用戶所屬的類,并且可以在開發和配制階段定義。給予權限的策略被分配到每個預定義的角色。在運行時刻,用戶的身份被確定,代碼將代表這個身份運行。運行語言決定用戶是哪個角色的成員,然后給予基于這個角色的權限。
新聞熱點
疑難解答
圖片精選