xcode14 废弃bitcode的原因

Bitccode实际上只是LLVM的中间语言。当您使用LLVM工具链编译源代码时,源代码被翻译成一种名为Bitcode的中间语言。然后对Bitcode进行分析、优化,并最终转换为所需目标CPU的CPU指令。

这样做的好处是,所有基于LLVM的前端(如clang)只需要将源代码转换为Bitccode,从那里起,无论源语言,它的工作是一样的,因为LLVM工具链不关心Bitcode是由C, c++, obc, Rust, Swift或任何其他源语言生成;一旦有了Bitccode,其余的工作流程总是相同的。

Bitccode的一个好处是,您可以稍后为另一个CPU生成指令,而不必重新编译原始源代码。例如,我可以编译一个C代码到Bitccode,并让LLVM生成一个x86 cpu的运行二进制文件。但是,如果我保存了Bitcode,我可以告诉LLVM也从Bitcode创建一个ARM CPU的运行二进制文件,而不需要编译任何东西,也不需要访问原始的C代码。生成的ARM代码就像我从一开始就编译到ARM一样好。

如果没有Bitccode,我将不得不将x86代码转换为ARM代码,因此这种转换产生的代码会更糟糕,因为代码的原始意图通常会在编译CPU代码的最后一步丢失,这也涉及到CPU特定的优化,这对其他CPU没有意义,而Bitccode很好地保留了原始意图,只执行所有CPU都会受益的优化。

拥有所有应用程序的Bitccode允许苹果为特定的CPU重新编译Bitcode,使应用程序与不同类型的CPU或完全不同的架构兼容,或只是从新的编译器版本的更好优化中受益。例如,如果苹果明天发布了一款使用RISC-V而不是ARM CPU的iPhone,那么所有带有Bitcode的应用都可以重新编译成RISC-V,并原生支持新的CPU架构,尽管应用的作者甚至从未听说过RISC-V。

我想这就是为什么苹果希望所有应用程序都采用Bitccode格式的原因。但这种方法一开始就存在问题。一个问题是Bitcode不是一种冻结的格式,LLVM每次发布都会更新它,他们不能保证完全向后兼容。Bitccode从来都不是用于永久存储或存档的稳定表示。另一个问题是不能使用汇编代码,因为汇编代码不会发出Bitccode。另外,你不能使用没有Bitcode的预先构建的第三方库。

最后但并非最不重要的是:据我所知,苹果迄今为止从未使用过Bitccode的任何优势。尽管过去要求所有的应用程序都包含Bitccode,但这些应用程序也必须包含针对所有支持的cpu的预构建的胖二进制文件,而苹果总是只发布这些预构建的代码。例如,对于曾经拥有32位ARMv7和64位ARM64版本的iphone,以及Bitccode,在应用细化期间,苹果会移除32位或64位版本,以及Bitccode,然后发布剩余的内容。好吧,但如果没有Bitcode,他们也可以这么做Bitccode不需要瘦架构的胖二进制!

重新构建不同的架构需要Bitccode,但苹果从未这样做过。没有一个32位的应用程序神奇地变成64位的苹果重新编译位代码。当苹果按需重新编译Bitcode时,没有64位的应用程序能够神奇地用于32位系统。作为一名开发者,我可以向你保证,iOS App Store总是准确地提供你自己构建和签名的二进制代码,而不是苹果自己从Bitcode创建的任何代码,所以没有任何服务端优化。即使当苹果从英特尔切换到M1,也没有macOS应用程序神奇地转换为原生ARM,尽管苹果拥有Bitcode,应用商店中的所有x86应用程序都可以这样做。相反,苹果仍然发布了x86版本,并让它在Rosetta 2中运行。

因此,通过强制所有代码以Bitccode的形式提供给开发者各种各样的缺点,而不使用Bitccode所能给你的任何优势,会让整个过程变得毫无意义。现在所有的平台都迁移到ARM64,在几年内甚至不会再有胖的二进制文件了(一旦x86对Mac的支持被放弃了),继续使用那些东西的意义是什么?我猜苹果抓住这个机会彻底埋葬了这个想法。即使有一天他们将RISC-V添加到他们的平台上,开发人员仍然可以同时发布包含ARM64和RISC-V代码的胖二进制文件。这一理念非常有效,非常简单,除了“更大的二进制文件”之外没有任何缺点,这是服务器端应用程序细化可以解决的问题,因为在下载过程中只需要包含当前平台的代码。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,539评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,911评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,337评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,723评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,795评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,762评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,742评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,508评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,954评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,247评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,404评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,104评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,736评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,352评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,557评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,371评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,292评论 2 352

推荐阅读更多精彩内容