xcode14 廢棄bitcode的原因

Bitccode實(shí)際上只是LLVM的中間語言。當(dāng)您使用LLVM工具鏈編譯源代碼時翅溺,源代碼被翻譯成一種名為Bitcode的中間語言脑漫。然后對Bitcode進(jìn)行分析、優(yōu)化未巫,并最終轉(zhuǎn)換為所需目標(biāo)CPU的CPU指令窿撬。

這樣做的好處是启昧,所有基于LLVM的前端(如clang)只需要將源代碼轉(zhuǎn)換為Bitccode叙凡,從那里起,無論源語言密末,它的工作是一樣的握爷,因?yàn)長LVM工具鏈不關(guān)心Bitcode是由C, c++跛璧, obc, Rust, Swift或任何其他源語言生成;一旦有了Bitccode,其余的工作流程總是相同的新啼。

Bitccode的一個好處是追城,您可以稍后為另一個CPU生成指令,而不必重新編譯原始源代碼燥撞。例如座柱,我可以編譯一個C代碼到Bitccode,并讓LLVM生成一個x86 cpu的運(yùn)行二進(jìn)制文件物舒。但是色洞,如果我保存了Bitcode,我可以告訴LLVM也從Bitcode創(chuàng)建一個ARM CPU的運(yùn)行二進(jìn)制文件冠胯,而不需要編譯任何東西火诸,也不需要訪問原始的C代碼。生成的ARM代碼就像我從一開始就編譯到ARM一樣好荠察。

如果沒有Bitccode置蜀,我將不得不將x86代碼轉(zhuǎn)換為ARM代碼,因此這種轉(zhuǎn)換產(chǎn)生的代碼會更糟糕悉盆,因?yàn)榇a的原始意圖通常會在編譯CPU代碼的最后一步丟失盯荤,這也涉及到CPU特定的優(yōu)化,這對其他CPU沒有意義焕盟,而Bitccode很好地保留了原始意圖廷雅,只執(zhí)行所有CPU都會受益的優(yōu)化。

擁有所有應(yīng)用程序的Bitccode允許蘋果為特定的CPU重新編譯Bitcode京髓,使應(yīng)用程序與不同類型的CPU或完全不同的架構(gòu)兼容航缀,或只是從新的編譯器版本的更好優(yōu)化中受益。例如堰怨,如果蘋果明天發(fā)布了一款使用RISC-V而不是ARM CPU的iPhone芥玉,那么所有帶有Bitcode的應(yīng)用都可以重新編譯成RISC-V,并原生支持新的CPU架構(gòu)备图,盡管應(yīng)用的作者甚至從未聽說過RISC-V灿巧。

我想這就是為什么蘋果希望所有應(yīng)用程序都采用Bitccode格式的原因。但這種方法一開始就存在問題揽涮。一個問題是Bitcode不是一種凍結(jié)的格式抠藕,LLVM每次發(fā)布都會更新它,他們不能保證完全向后兼容蒋困。Bitccode從來都不是用于永久存儲或存檔的穩(wěn)定表示盾似。另一個問題是不能使用匯編代碼,因?yàn)閰R編代碼不會發(fā)出Bitccode雪标。另外零院,你不能使用沒有Bitcode的預(yù)先構(gòu)建的第三方庫溉跃。

最后但并非最不重要的是:據(jù)我所知,蘋果迄今為止從未使用過Bitccode的任何優(yōu)勢告抄。盡管過去要求所有的應(yīng)用程序都包含Bitccode撰茎,但這些應(yīng)用程序也必須包含針對所有支持的cpu的預(yù)構(gòu)建的胖二進(jìn)制文件,而蘋果總是只發(fā)布這些預(yù)構(gòu)建的代碼打洼。例如龄糊,對于曾經(jīng)擁有32位ARMv7和64位ARM64版本的iphone,以及Bitccode募疮,在應(yīng)用細(xì)化期間绎签,蘋果會移除32位或64位版本,以及Bitccode酝锅,然后發(fā)布剩余的內(nèi)容诡必。好吧,但如果沒有Bitcode搔扁,他們也可以這么做Bitccode不需要瘦架構(gòu)的胖二進(jìn)制!

重新構(gòu)建不同的架構(gòu)需要Bitccode爸舒,但蘋果從未這樣做過。沒有一個32位的應(yīng)用程序神奇地變成64位的蘋果重新編譯位代碼稿蹲。當(dāng)蘋果按需重新編譯Bitcode時扭勉,沒有64位的應(yīng)用程序能夠神奇地用于32位系統(tǒng)。作為一名開發(fā)者苛聘,我可以向你保證涂炎,iOS App Store總是準(zhǔn)確地提供你自己構(gòu)建和簽名的二進(jìn)制代碼,而不是蘋果自己從Bitcode創(chuàng)建的任何代碼设哗,所以沒有任何服務(wù)端優(yōu)化唱捣。即使當(dāng)蘋果從英特爾切換到M1,也沒有macOS應(yīng)用程序神奇地轉(zhuǎn)換為原生ARM网梢,盡管蘋果擁有Bitcode震缭,應(yīng)用商店中的所有x86應(yīng)用程序都可以這樣做。相反战虏,蘋果仍然發(fā)布了x86版本拣宰,并讓它在Rosetta 2中運(yùn)行。

因此烦感,通過強(qiáng)制所有代碼以Bitccode的形式提供給開發(fā)者各種各樣的缺點(diǎn)巡社,而不使用Bitccode所能給你的任何優(yōu)勢,會讓整個過程變得毫無意義∈秩ぃ現(xiàn)在所有的平臺都遷移到ARM64晌该,在幾年內(nèi)甚至不會再有胖的二進(jìn)制文件了(一旦x86對Mac的支持被放棄了),繼續(xù)使用那些東西的意義是什么?我猜蘋果抓住這個機(jī)會徹底埋葬了這個想法。即使有一天他們將RISC-V添加到他們的平臺上气笙,開發(fā)人員仍然可以同時發(fā)布包含ARM64和RISC-V代碼的胖二進(jìn)制文件。這一理念非常有效怯晕,非常簡單潜圃,除了“更大的二進(jìn)制文件”之外沒有任何缺點(diǎn),這是服務(wù)器端應(yīng)用程序細(xì)化可以解決的問題舟茶,因?yàn)樵谙螺d過程中只需要包含當(dāng)前平臺的代碼谭期。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市吧凉,隨后出現(xiàn)的幾起案子隧出,更是在濱河造成了極大的恐慌,老刑警劉巖阀捅,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件胀瞪,死亡現(xiàn)場離奇詭異,居然都是意外死亡饲鄙,警方通過查閱死者的電腦和手機(jī)凄诞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來忍级,“玉大人帆谍,你說我怎么就攤上這事≈嵩郏” “怎么了汛蝙?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長朴肺。 經(jīng)常有香客問我窖剑,道長,這世上最難降的妖魔是什么戈稿? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任苛吱,我火速辦了婚禮,結(jié)果婚禮上器瘪,老公的妹妹穿的比我還像新娘翠储。我一直安慰自己,他們只是感情好橡疼,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布援所。 她就那樣靜靜地躺著,像睡著了一般欣除。 火紅的嫁衣襯著肌膚如雪住拭。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天,我揣著相機(jī)與錄音滔岳,去河邊找鬼杠娱。 笑死,一個胖子當(dāng)著我的面吹牛谱煤,可吹牛的內(nèi)容都是我干的摊求。 我是一名探鬼主播,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼刘离,長吁一口氣:“原來是場噩夢啊……” “哼室叉!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起硫惕,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤茧痕,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后恼除,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體踪旷,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年豁辉,在試婚紗的時候發(fā)現(xiàn)自己被綠了埃脏。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡秋忙,死狀恐怖彩掐,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情灰追,我是刑警寧澤堵幽,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站弹澎,受9級特大地震影響朴下,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜苦蒿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一殴胧、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧佩迟,春花似錦团滥、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至秉溉,卻和暖如春力惯,著一層夾襖步出監(jiān)牢的瞬間碗誉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工父晶, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留哮缺,地道東北人。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓甲喝,卻偏偏與公主長得像尝苇,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子俺猿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評論 2 354

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