Unity 熱更新為啥用Lua 詳解

他們說(shuō)

  閱讀了網(wǎng)上一些文章颖侄,其實(shí)使用C#進(jìn)行熱更新是可以的,將需要更新的代碼打包成程序集享郊,然后利用反射即可览祖,但是也提到在IOS平臺(tái)是不行的,至于為什么不行炊琉,就不再說(shuō)了展蒂,然后就是推薦Lua作為熱更新方案,但是温自,為啥Lua就行玄货?C#就不行?

因?yàn)镃#是編譯型語(yǔ)言悼泌,Lua是解釋型語(yǔ)言松捉?

  好多人都說(shuō)Lua能熱更新,是因?yàn)樗墙忉屝驼Z(yǔ)言馆里,不用編譯隘世,在運(yùn)行時(shí)能動(dòng)態(tài)解釋Lua代碼并運(yùn)行。這種方法實(shí)際上不準(zhǔn)確鸠踪,從某些角度來(lái)說(shuō)是錯(cuò)的丙者。Lua確實(shí)是解釋性腳本語(yǔ)言,但是不是因?yàn)槭墙忉屝筒拍苓M(jìn)行熱更新营密。即使使用C++這種編譯語(yǔ)言械媒,也能進(jìn)行熱更新,將動(dòng)態(tài)鏈接庫(kù)進(jìn)行更新就是评汰,然后動(dòng)態(tài)加載動(dòng)態(tài)鏈接庫(kù)獲取更新的函數(shù)地址即可纷捞。

  而且,還有一點(diǎn)被去,C#并不能說(shuō)是一種編譯型語(yǔ)言主儡,C#代碼會(huì)被編譯成IL,IL解釋成機(jī)器碼的過(guò)程可以在運(yùn)行之前進(jìn)行也能在運(yùn)行時(shí)進(jìn)行惨缆。如果在運(yùn)行時(shí)進(jìn)行解釋?zhuān)敲春蚅ua不就一樣了嗎糜值,為啥C#不能進(jìn)行熱更新呢?

JIT對(duì)IL進(jìn)行解釋執(zhí)行的原理

  首先說(shuō)一下坯墨,JIT對(duì)IL如何在運(yùn)行時(shí)進(jìn)行解釋并執(zhí)行的寂汇,大致過(guò)程為:將IL解釋為所在平臺(tái)的機(jī)器碼,開(kāi)辟一段內(nèi)存空間捣染,要求這段內(nèi)存空間可讀健无、可寫(xiě)、可執(zhí)行液斜,然后把解釋出的機(jī)器碼放入累贤,修改CPU中的指令指針寄存器中的地址,讓CPU執(zhí)行之前解釋出來(lái)的機(jī)器碼少漆。

  注意這段內(nèi)存的條件臼膏,最重要的一條是必須是可執(zhí)行的,一般的內(nèi)存申請(qǐng)我們只是存放數(shù)據(jù)示损,但是這里的內(nèi)存權(quán)限要是有可執(zhí)行權(quán)限

IOS限制了什么渗磅?

  IOS不允許獲取具有可執(zhí)行權(quán)限的內(nèi)存空間,這就直接要求JIT要以full AOT模式检访,這種模式會(huì)在生成之前把IL直接翻譯成機(jī)器碼而不是在運(yùn)行期間始鱼,進(jìn)行了這種操作C#從某種角度來(lái)說(shuō)和C++一樣,成為了編譯型語(yǔ)言脆贵,失去了運(yùn)行時(shí)解釋的功能医清。

Lua的解釋執(zhí)行怎么就行呢?

  如果Lua的解釋執(zhí)行原理和C#相同卖氨,肯定也不能在IOS平臺(tái)上運(yùn)行時(shí)解釋執(zhí)行会烙。Lua是使用C編寫(xiě)的腳本語(yǔ)言,它在運(yùn)行時(shí)讀入Lua編寫(xiě)的代碼筒捺,在解釋Lua字節(jié)碼(Lua自己的指令)時(shí)不是翻譯為機(jī)器碼柏腻,而是使用C代碼進(jìn)行解釋?zhuān)挥瞄_(kāi)辟特殊的內(nèi)存空間,也不會(huì)有新代碼在執(zhí)行系吭,執(zhí)行的是Lua的虛擬機(jī)五嫂,用C寫(xiě)出來(lái)的虛擬機(jī)贴妻,這和C#的機(jī)制是完全不同的帐姻,因?yàn)長(zhǎng)ua是基于C的腳本語(yǔ)言。

總結(jié)

  說(shuō)白了贼陶,就是由于Lua這種腳本語(yǔ)言的特性蟆盹,基于已經(jīng)存在的某種語(yǔ)言的一種新的語(yǔ)言孩灯,這也是腳本語(yǔ)言和C#、C++這類(lèi)語(yǔ)言的本質(zhì)區(qū)別逾滥。當(dāng)然峰档,Lua虛擬機(jī)不僅可以使用C寫(xiě),也可以用C#寫(xiě)寨昙。使用熱更新也不一定非要用Lua讥巡,Python同樣可以,只不過(guò)Lua短小精悍舔哪,本身代碼長(zhǎng)度就不是很大欢顷,可以從GitHub上看到。

什么是IL

?? ??? ?中間語(yǔ)言(中間代碼)是一種面向語(yǔ)法捉蚤,易于翻譯成目標(biāo)程序源程序的等效內(nèi)部表示代碼抬驴。其可理解性及易于生成目標(biāo)代碼的程度介于源語(yǔ)言和目標(biāo)語(yǔ)言之間炼七。常用的中間語(yǔ)言有逆波蘭表示、四元式布持、三元式和樹(shù)表示等豌拙。

什么是JIT編譯

?? ???運(yùn)行時(shí)需要代碼時(shí),將 Microsoft?中間語(yǔ)言?(MSIL) 轉(zhuǎn)換為機(jī)器碼的編譯题暖。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末按傅,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子胧卤,更是在濱河造成了極大的恐慌唯绍,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,591評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件枝誊,死亡現(xiàn)場(chǎng)離奇詭異况芒,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)侧啼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)牛柒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人痊乾,你說(shuō)我怎么就攤上這事皮壁。” “怎么了哪审?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,823評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵蛾魄,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我湿滓,道長(zhǎng)滴须,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,204評(píng)論 1 292
  • 正文 為了忘掉前任叽奥,我火速辦了婚禮扔水,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘朝氓。我一直安慰自己魔市,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布赵哲。 她就那樣靜靜地躺著待德,像睡著了一般。 火紅的嫁衣襯著肌膚如雪枫夺。 梳的紋絲不亂的頭發(fā)上将宪,一...
    開(kāi)封第一講書(shū)人閱讀 51,190評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼较坛。 笑死印蔗,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的燎潮。 我是一名探鬼主播喻鳄,決...
    沈念sama閱讀 40,078評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼确封!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起再菊,我...
    開(kāi)封第一講書(shū)人閱讀 38,923評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤爪喘,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后纠拔,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體秉剑,經(jīng)...
    沈念sama閱讀 45,334評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評(píng)論 2 333
  • 正文 我和宋清朗相戀三年稠诲,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了侦鹏。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,727評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡臀叙,死狀恐怖略水,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情劝萤,我是刑警寧澤渊涝,帶...
    沈念sama閱讀 35,428評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站床嫌,受9級(jí)特大地震影響跨释,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜厌处,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評(píng)論 3 326
  • 文/蒙蒙 一鳖谈、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧阔涉,春花似錦缆娃、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,672評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至凶伙,卻和暖如春郭毕,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背函荣。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,826評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工显押, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留扳肛,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,734評(píng)論 2 368
  • 正文 我出身青樓乘碑,卻偏偏與公主長(zhǎng)得像挖息,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子兽肤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評(píng)論 2 354

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

  • Lua 5.1 參考手冊(cè) by Roberto Ierusalimschy, Luiz Henrique de F...
    蘇黎九歌閱讀 13,788評(píng)論 0 38
  • 第一篇 語(yǔ)言 第0章 序言 Lua僅讓你用少量的代碼解決關(guān)鍵問(wèn)題套腹。 Lua所提供的機(jī)制是C不擅長(zhǎng)的:高級(jí)語(yǔ)言,動(dòng)態(tài)...
    testfor閱讀 2,666評(píng)論 1 7
  • 指令集 lua_capture_error_log lua_use_default_type lua_malloc...
    吃瓜的東閱讀 11,999評(píng)論 0 2
  • 中秋佳節(jié)资铡,最讓我思念的不是月餅电禀,而是那鮮嫩肥美的上海大閘蟹。笤休。尖飞。 在加州,往年雖然吃不到大閘蟹店雅,鮮美的珍寶蟹(Du...
    漾漾美味閱讀 1,125評(píng)論 3 2