如何評價C#熱更框架huatuo?

為什么這么NB挎峦?huatuo革命Unity熱更新

最近huatuo(華佗)熱更新解決方案火爆了unity開發(fā)圈,起初我覺得熱更新嘛轩缤,不就是內(nèi)置一個腳本解釋器+腳本語言開發(fā),如xLua, ILRuntime, puerts。Huatuo又能玩出什么花樣急侥,憑什么會這么NB提澎,引起了那么多程序員的關(guān)注與稱贊呢姚垃?帶著這些問題我詳細(xì)的看了huatuo的資料,閱讀了示例項(xiàng)目+huatuo源碼,我也瞬間成了一位”佗粉”盼忌。接下來更新一系列的文字教程+視頻教程來詳細(xì)的講解huatuo熱更新积糯。

對惹,這里有一個游戲開發(fā)交流小組谦纱,希望大家可以點(diǎn)擊進(jìn)來一起交流一下開發(fā)經(jīng)驗(yàn)呀

要掌握huatuo熱更新,我們先搞懂一些底層的概念與原理看成,搞懂這些是掌握huatuo的關(guān)鍵。本節(jié)我將從以下3個方面來詳細(xì)的講解huatuo熱更新解決方案:

il2cpp是什么? AOT是什么?

huatuo熱更新的技術(shù)原理;

huatuo熱更方案的革命性優(yōu)勢;

il2cpp是什么? AOT是什么?

在說il2cpp之前,先說說mono, 在mono之前服协,C#雖然很好绍昂,但是只在windows家族平臺上使用,就這點(diǎn)C#與Java就無法比偿荷。于是微軟公司向ECMA申請將C#作為一種標(biāo)準(zhǔn)窘游。在2001年12月,ECMA發(fā)布了ECMA-334 C#語言規(guī)范跳纳。C#在2003年成為一個ISO標(biāo)準(zhǔn)(ISO/IEC 23270)忍饰。意味著只要你遵守CLI(Common Language Infrastructure),第三方可以將任何一種語言實(shí)現(xiàn)到.Net平臺之上寺庄。有了CLI的標(biāo)準(zhǔn),Mono就誕生了, 該項(xiàng)目的目標(biāo)是創(chuàng)建一系列符合ECMA標(biāo)準(zhǔn)(Ecma-334和Ecma-335)的.NET工具艾蓝,包括C#編譯器和通用語言架構(gòu)。與微軟的.NET Framework(共通語言運(yùn)行平臺)不同斗塘,Mono項(xiàng)目不僅可以運(yùn)行于Windows系統(tǒng)上赢织,還可以運(yùn)行于Linux,F(xiàn)reeBSD馍盟,Unix于置,OS X和Solaris,甚至一些游戲平臺贞岭,例如:Playstation 3八毯,Wii或XBox 360之上搓侄。Mono使得C#這門語言相對于微軟的.Net有了很好的跨平臺能力。

.Net Framework運(yùn)行時庫Mono使用自己的Mono VM话速。 加上C#本身快速友好的開發(fā)能力讶踪,最終使得Unity團(tuán)隊(duì)在創(chuàng)建之初就決定將Mono,C#作為其核心泊交。

接下來引出重要的一個概念”IL“乳讥。IL的全稱是 Intermediate Language,很多時候還會看到CIL(Common Intermediate Language活合,特指在.Net平臺下的IL標(biāo)準(zhǔn))雏婶。在Unity中,IL和CIL表示的是同一個東西:它是一種屬于通用語言架構(gòu)和.NET框架的低階(lowest-level)的編程語言。將.NET框架的語言編譯成CIL白指,然后匯編成字節(jié)碼留晚。CIL類似一個面向?qū)ο蟮膮R編語言,并且它是完全基于堆棧的告嘲,它運(yùn)行在.net虛擬機(jī)上错维。

CLI標(biāo)準(zhǔn)出來后,又出現(xiàn)一個項(xiàng)目:IL2CPP,把IL轉(zhuǎn)成靜態(tài)的c++代碼文件,由本地編譯器編譯成二進(jìn)制機(jī)器指令橄唬。由于C#這樣的高級語言都有垃圾回收等機(jī)制赋焕,所以IL轉(zhuǎn)成靜態(tài)的c++代碼后,還有一個IL2CPP的runtime(IL2CPP VM)用來支撐這些高級語言特性。通過IL2CPP技術(shù)仰楚,我們IL代碼轉(zhuǎn)成本地機(jī)器碼隆判,獲得很好的性能。Unity也采用了這個技術(shù),用unity開發(fā)的C#代碼可以通過.net 轉(zhuǎn)成IL代碼僧界,再通過IL2CPP轉(zhuǎn)成靜態(tài)c++文件侨嘀,然后編譯成本地機(jī)器碼運(yùn)行。為什么Unity采用IL2CPP呢捂襟?主要原因有:

a:Mono VM在各個平臺移植咬腕,維護(hù)非常耗時,有時甚至不可能完成葬荷。

b: Mono版本授權(quán)受限, 換IL2CPP涨共,IL2CPP VM這套完全自己開發(fā)的組件,就解決了授權(quán)問題宠漩。

c: 提高運(yùn)行效率举反,換成IL2CPP以后,程序編譯成了硬件目標(biāo)機(jī)器指令,運(yùn)行效率提升1.5-2.0倍扒吁。

Unity基于IL2CPP 的架構(gòu)原理,如圖1.1-1所示:

圖1.1-1

Unity IL2CPP 運(yùn)行示意圖

最后一個概念A(yù)OT(Ahead of time)照筑,AOT技術(shù)指的是將高級開發(fā)語言直接轉(zhuǎn)成傳統(tǒng)的編譯型編程語言(如C/C++),再編譯成機(jī)器指令代碼在硬件上運(yùn)行。IL2CPP可以成為AOT技術(shù)。

huatuo熱更新的技術(shù)原理

鋪墊完IL2CPP凝危,AOT等概念后,接下來就來說huatuo了晨逝。由圖1.1-1可知Unity最終打包運(yùn)行為:AOT(本地機(jī)器指令執(zhí)行)+, IL2CPP VM(提供基礎(chǔ)服務(wù)支撐,如gc)蛾默。對于IL2CPP 底層運(yùn)行模式而言,運(yùn)行的時候是數(shù)據(jù)內(nèi)存對象+代碼機(jī)器指令兩個部分捉貌。huatuo做熱更就是擴(kuò)展了IL2CPP VM的服務(wù),讓它在使用原來數(shù)據(jù)內(nèi)存對象的情況下支鸡,擴(kuò)展了解釋執(zhí)行IL代碼的功能(注意這里的使用”原來數(shù)據(jù)內(nèi)存對象”很重要)。讓IL2CPP的運(yùn)行模式變?yōu)??數(shù)據(jù)內(nèi)存對象+AOT代碼機(jī)器指令+Interpreter IL指令解釋執(zhí)行的3個部分趁窃。huatuo做熱更的時候,我們只需要利用Unity?ADF(asmdef, 程序集定義文件)的機(jī)制牧挣,讓Unity對某一部分單獨(dú)編譯出一個IL指令的.dll。熱更時醒陆,IL2CPP_huatuo就可以裝載IL指令.dll, 由IL2CPP_huatuo來解釋執(zhí)行瀑构。這樣AOT模式+huatuo IL指令解釋執(zhí)行 (Interpreter)讓huatuo能具備熱更新的功能。同時huatuo解釋執(zhí)行使用的是原來AOT的數(shù)據(jù)內(nèi)存對象刨摩,所以huatuo熱更新不會有其它熱更新方案需要的接口導(dǎo)出寺晌,跨域調(diào)用等一系列問題。讓開發(fā)者在不用做任何特殊處理的情況下澡刹,直接使用普通的unity開發(fā)技術(shù)能做到熱更新呻征。由于可以直接使用AOT的數(shù)據(jù)內(nèi)存對象,內(nèi)存占用,性能都會更好罢浇。有了這些優(yōu)勢(不用做任何代碼上的處理就能實(shí)現(xiàn)熱更),難怪Unity開發(fā)者都?xì)g呼雀躍陆赋,因?yàn)樗麄兘K于能丟掉xLua, ILRuntime又笨又重的殼,直接從底層解決問題。所以我認(rèn)為未來的huatuo會成為Unity熱更的主流方案嚷闭。

huatuo熱更的革命性優(yōu)勢

分析完原理后攒岛,我們來看下huatuo的革命性優(yōu)勢:

huatuo第1個優(yōu)勢是基于AOT(本地機(jī)器代碼執(zhí)行)+Interpreter (IL解釋執(zhí)行)使用同一個內(nèi)存數(shù)據(jù)對象,沒有跨域訪問的問題凌受。我們來拿xLua或ILRuntime熱更方案來舉例阵子,這些方案都有一條原則,盡量減少與Unity C#層的交互胜蛉,但是這種交互又避免不了而且量大挠进,比如我們要在邏輯熱更代碼里面訪問 Unity C#的GameObject對象數(shù)據(jù),最終在運(yùn)行的時候誊册,GameObject 會在AOT模式下的原生內(nèi)存數(shù)據(jù)結(jié)構(gòu)對象领突。由于xLua或ILRuntime有自己的虛擬機(jī),所以不能直接訪問原生GameObject數(shù)據(jù)對象案怯,往往要把訪問里面的數(shù)據(jù)包裝成函數(shù)君旦,這樣性能開銷就大大的增加了。而huatuo是在IL2CPP模式下的解釋執(zhí)行,直接可以訪問原生的數(shù)據(jù)對象金砍。

huatuo第2個優(yōu)勢是我們的邏輯代碼更新后(1.0版本到2.0版本)局蚀,如果你發(fā)布新版本2.0(重新安裝新版本的app),可以直接把更新的邏輯,直接使用AOT編譯出來恕稠,不用解釋執(zhí)行,從而獲得AOT的性能琅绅。而基于xLua, ILRuntime的熱更方案開發(fā)的代碼(1.0版本到2.0版本),用戶即使重新安裝2.0客戶端后鹅巍,還是解釋執(zhí)行,新版本的性能無法達(dá)到AOT的性能級別千扶。

huatuo 第3個好處是相比傳統(tǒng)的Lua或ILRuntime熱更,他能更新任意部分的代碼。不用像Lua或ILRuntime一樣骆捧,分熱更代碼+框架代碼澎羞,框架代碼有bug還不能熱更。

有了這些革命性的優(yōu)勢敛苇,你沒有理由不關(guān)注+使用huatuo妆绞。

今天的分享就到這里了, 關(guān)注我們, 接下來會繼續(xù)有huatuo熱更的系列教程接谨。

下節(jié)預(yù)告: huatuo解決方案源碼結(jié)構(gòu)與項(xiàng)目實(shí)戰(zhàn)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末摆碉,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子脓豪,更是在濱河造成了極大的恐慌巷帝,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件扫夜,死亡現(xiàn)場離奇詭異楞泼,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)笤闯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進(jìn)店門堕阔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人颗味,你說我怎么就攤上這事超陆。” “怎么了浦马?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵时呀,是天一觀的道長。 經(jīng)常有香客問我晶默,道長谨娜,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任磺陡,我火速辦了婚禮趴梢,結(jié)果婚禮上漠畜,老公的妹妹穿的比我還像新娘。我一直安慰自己坞靶,他們只是感情好憔狞,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著滩愁,像睡著了一般躯喇。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上硝枉,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天,我揣著相機(jī)與錄音倦微,去河邊找鬼妻味。 笑死,一個胖子當(dāng)著我的面吹牛欣福,可吹牛的內(nèi)容都是我干的责球。 我是一名探鬼主播,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼拓劝,長吁一口氣:“原來是場噩夢啊……” “哼雏逾!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起郑临,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤栖博,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后厢洞,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體仇让,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年躺翻,在試婚紗的時候發(fā)現(xiàn)自己被綠了丧叽。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡公你,死狀恐怖踊淳,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情陕靠,我是刑警寧澤迂尝,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站懦傍,受9級特大地震影響雹舀,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜粗俱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一说榆、第九天 我趴在偏房一處隱蔽的房頂上張望虚吟。 院中可真熱鬧,春花似錦签财、人聲如沸串慰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽邦鲫。三九已至,卻和暖如春神汹,著一層夾襖步出監(jiān)牢的瞬間庆捺,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工屁魏, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留滔以,地道東北人。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓氓拼,卻偏偏與公主長得像你画,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子桃漾,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內(nèi)容