huatuoUnity 全平臺(tái)原生 c# 熱更方案
huatuo是一個(gè)特性完整、零成本、高性能、低內(nèi)存的 Unity 全平臺(tái)原生 c# 熱更方案。
huatuo 擴(kuò)充了 il2cpp的代碼,使它由純 AOT runtime 變成 ‘AOT+Interpreter’ 混合 runtime,進(jìn)而原生支持動(dòng)態(tài)加載assembly,使得基于 il2cpp backend 打包的游戲不僅能在 Android 平臺(tái),也能在 IOS、Consoles 等限制了 JIT 的平臺(tái)上高效地以 AOT+interpreter 混合模式執(zhí)行,從底層徹底支持了熱更新。
huatuo 開(kāi)創(chuàng)性地實(shí)現(xiàn)了 differential hybrid dll 技術(shù) ====,可以對(duì) AOT dll 任意增刪改,huatuo 會(huì)智能地讓變化或者新增的類(lèi)和函數(shù)以 interpreter 模式運(yùn)行,但未改動(dòng)的類(lèi)和函數(shù)以 AOT 方式運(yùn)行,讓熱更新的游戲邏輯的運(yùn)行性能基本達(dá)到原生 AOT 的水平。
特性
- 特性完整。 近乎完整實(shí)現(xiàn)了 ECMA-335規(guī)范,除了 下文中"限制和注意事項(xiàng)" 之外的特性都支持。
- 零學(xué)習(xí)和使用成本。 huatuo 將純 AOT runtime 增強(qiáng)為完整的 runtime,使得熱更新代碼與 AOT 代碼無(wú)縫工作。腳本類(lèi)與 AOT 類(lèi)在同一個(gè)運(yùn)行時(shí)內(nèi),可以隨意寫(xiě)繼承、反射、多線程(volatile、ThreadStatic、Task、async)之類(lèi)的代碼。不需要額外寫(xiě)任何特殊代碼、沒(méi)有代碼生成,也沒(méi)有什么特殊限制。
- 執(zhí)行高效。實(shí)現(xiàn)了一個(gè)極其高效的寄存器解釋器,所有指標(biāo)都大幅優(yōu)于其他熱更新方案。性能測(cè)試報(bào)告
- 內(nèi)存高效。 熱更新腳本中定義的類(lèi)跟普通 c# 類(lèi)占用一樣的內(nèi)存空間,遠(yuǎn)優(yōu)于其他熱更新方案。內(nèi)存占用報(bào)告
- 原生支持 hotfix 修復(fù) AOT 部分代碼。幾乎不增加任何開(kāi)發(fā)和運(yùn)行開(kāi)銷(xiāo)。
- 開(kāi)創(chuàng)性地實(shí)現(xiàn)了
differential hybrid dll技術(shù)。即可以將某個(gè)熱更新dll先AOT形式打包,后面可以對(duì)該dll任意增刪改,huatuo會(huì)智能地讓變化或者新增的類(lèi)和函數(shù)以interpreter模式運(yùn)行,但未改動(dòng)的類(lèi)和函數(shù)以AOT方式運(yùn)行。這意味著熱更新的游戲邏輯的運(yùn)行性能將接近原生AOT的水平。
工作原理
huatuo 從 mono 的 hybrid mode execution 技術(shù)中得到啟發(fā),為 unity 的 il2cpp 之類(lèi)的 AOT runtime 額外提供了interpreter 模塊,將它們由純 AOT 運(yùn)行時(shí)改造為 "AOT + Interpreter" 混合運(yùn)行方式。
更具體地說(shuō),huatuo做了以下幾點(diǎn)工作:
- 實(shí)現(xiàn)了一個(gè)高效的元數(shù)據(jù)(dll)解析庫(kù)
- 改造了元數(shù)據(jù)管理模塊,實(shí)現(xiàn)了元數(shù)據(jù)的動(dòng)態(tài)注冊(cè)
- 實(shí)現(xiàn)了一個(gè)IL指令集到自定義的寄存器指令集的compiler
- 實(shí)現(xiàn)了一個(gè)高效的寄存器解釋器
- 額外提供大量的 instinct 函數(shù),提升解釋器性能
- 提供 hotfix AOT 的支持
文檔
評(píng)論
圖片
表情
