阅读High level SIL optimizations之后,我特别注意到以下内容(在{ 克隆标准库中的代码):
Swift编译器可以将标准库中的代码复制到 应用。这允许优化器内联来自stdlib和的调用 提高使用常见运算符的代码的性能 '++'或基本容器,如Array。但是,从中导入代码 标准库可以增加二进制大小。标记功能 使用@_semantics(“stdlib_binary_only”)将阻止复制 将标准库中的功能标记为用户程序。
现在,这很棒。但是,如果我正在编写自己的容器怎么办?
我目前正在编写一个框架(哲学上)扩展标准库,介绍我认为缺乏数据结构的东西;如树木和图表。
但是,根据我的理解,这些容器(在我的框架之外)不会被给予特殊的克隆/内联处理,即使它们被相关的@effects
繁琐地标记, @inline(__always)
或@_transparent
等属性。根据我的理解,这些优化仅适用于标准库和朋友。
优化(如果有的话)只会应用于我的框架中的 代码,而不是导入我的框架的模块。
这对我来说非常困难。它实际意味着,要利用这些高级优化的强大功能,我的所有代码都必须在一个模块中。这根本不可能。
我有大约800个密集的Swift文件,跨越9个框架。编辑时间本身就是一场噩梦;更不用说它会对SourceKitService
(和我,就此而言)造成多大的创伤。
如果可能的话,我该如何解决这个问题?