Unity3D的跨平臺原理核心在於對指令集CIL(通用中間語言)的應用。html
機理
首先須要知道,Unity中的Mono是基於 通用語言架構(Common Language Infrastructure,CLI)和C#的ECMA標準實現的,與微軟的.NET框架有着諸多相似之處,所以分析Unity的跨平臺性,本質即爲分析.NET框架下C#語言從編譯到運行的過程。首先拋出幾個重要概念:編程
- CIL:通用中間語言(Common Intermediate Language),屬於通用語言架構和.NET 框架的低階編程語言,徹底基於堆棧,運行在CLR上。
- CLR:公共語言運行庫,和Java虛擬機同樣也是一個運行時環境,可由面向CLR的全部語言使用,是.NET Framework的主要執行引擎。CIL在CLR內的存在形式爲IL(中間語言)。
- JIT:即時編譯,在程序執行時才編譯代碼,逐條將IL語句翻譯爲機器語句,而後執行。
機理概述:在編譯.NET編程語言如C#時,源代碼首先被Unity中Mono內的C#編譯器編譯成CIL碼,通過CLR中JIT編譯器將其翻譯爲本地代碼,最終運行於操做系統上。所以Unity可在衆多支持.NET框架的平臺上工做。架構
其餘
- 託管代碼:在CLR中執行的代碼,由多種支持.NET的語言編寫而來,實質是中間代碼。例如本例C#編寫的代碼被編譯爲CIL,運行於CLR中的形式爲IL,故IL既是中間語言,又是託管代碼
參考