Unity框架與.NET, Mono框架的關係

什麼是C#
C#是一種面向對象的編程語言。

什麼是.NET
.NET是一個開發框架,它遵循並採用CIL(Common Intermediate Language)和CLR(Common Language Runtime)兩種約定,
CIL標準爲一種編譯標準:將不同編程語言(C#, JS, VB等)使用各自的編譯器,按照統一的標準編譯成語義一致的CIL中間碼, 這樣雖然代碼使用的語言不同,但編譯出的產物是一樣的。
CLR標準爲一種執行標準:不同的操作系統可以根據CLR這一執行標準開發出自己平臺的中間碼執行器,這樣CIL這個標準中間產物就可以在不同的平臺執行了。其中Mono框架就扮演了這樣一個重要的角色,實現了各個平臺的CLR執行器。

 

什麼是Mono
Mono是一個框架,它是.NET這個開源框架的子集,它建立在.NET框架基礎上,在使用.NET基礎能力的基礎上,自己做了多個操作系統的CLR實現來實現跨平臺。同時也重寫了一些.NET框架中的基本功能。

Unity是什麼
Unity是一個遊戲開發框架,框架的各種庫是使用C#來實現。
Unity 引擎的外層是用C#實現,內部則是對 C/C++ 做直接調用。它的內部是用原生 C/C++ 構建的。

Unity與Mono之間的關係
使用Unity做遊戲腳本開發,腳本編寫好後,使用Mono將C#代碼編譯成CIL標準中間碼,再使用Mono的跨平臺能力將編寫的CIL運行到各個目標平臺上,比如運行到iOS,安卓手機上。

如何看待.NET Framework,Mono和.NET Core
隨着微軟對.NET框架的開源,現在在.NET的實現上有了三個.NET Framework,Mono和.NET Core。
.NET Core是一個模塊化的開發棧,它提供了框架的基礎能力,包含跨平臺,它是未來的所有.NET平臺的基礎。
.NET Framework可以看做是.NET Core在Windows上的一個發行版,Mono可以看做是.NET Core的一個跨平臺發行版。
隨着.NET Core Framework的開發完成,.NET Framework與Mono將基於.NET Core重新構建。

.NET框架
.NET是一個框架,它具有跨語言,跨平臺的特性。
.NET通過將各語言先編譯成中間語言(IL),然後再執行時用即時(Just In Time)編譯器將之編譯成本地平臺代碼來實現異構平臺下對象的互操作,.NET通過公共語言運行庫CR(Common Language Runtime)來實現資源對象,類型的安全。
.NET有很多種語言組成,比如C#、 VB.NET、J#、JS、 C++,它們的編譯產物都是運行在.NET FrameWork Run Time之上的。其中,C#是主流。

C#源碼編譯流程
C#源代碼在.NET程序的編譯中,代碼編譯會生成exe公共中間語言文件。
C#源代碼Unity和這個很相似,代碼會被編譯成dll公共中間語言文件。
它的編譯過程如下:
源代碼.cs - CLS編譯(公共語言標準)- 通用中間語言(exe, Unity中編譯成dll格式)-CLR編譯- 機器碼
.NET框架可以支持多種語言,那麼在一個項目中同時存在這麼多語言,它們如何通信呢?
1.首先將它們各自編譯成通用中間語言
2.再使用通用中間語言進行互相調用。
這樣做的目的:跨語言
3.點擊exe, 系統會調用CLR編譯(目的是優化,跨平臺,一個exe可以編譯成多個window平臺,甚至編譯成Linux系統)進行即時編譯,生成01二進制
4.unity的跨平臺是重寫了CLR(公共語言運行庫)編譯,可以編譯成java,android(需要編譯成哪種平臺,就拿哪種平臺的CLR,這樣對應的系統就可以識別,來實現跨平臺)多種平臺的01機器碼


參考文章
https://blog.51cto.com/u_16099186/6280958
https://zhuanlan.zhihu.com/p/266037775
https://www.cnblogs.com/shanyou/p/4295163.html
 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章