【发布时间】:2023-04-10 07:56:02
【问题描述】:
阅读High level SIL optimizations后,我特别注意到以下内容(在 从标准库中克隆代码):
Swift 编译器可以将代码从标准库复制到 应用。这允许优化器内联来自 stdlib 的调用和 提高使用常见运算符的代码的性能,例如 '++' 或基本容器,例如 Array。但是,从 标准库可以增加二进制大小。打标功能 使用 @_semantics("stdlib_binary_only") 将阻止复制 标记函数从标准库到用户程序中。
现在,这很棒。但是,如果我要编写自己的容器呢?
我目前正在编写一个(从哲学上)扩展标准库的框架,引入我认为缺少的一些数据结构;比如树和图。
但是,据我了解,这些容器将(在我的框架之外)不会被给予特殊的克隆/内联处理,即使它们用相关的@effects、@987654323 进行了繁琐的标记@ 或 @_transparent 等属性。据我了解,这些优化仅适用于标准库和朋友。
优化(如果有)将仅应用于我的框架内的代码,而不是导入我的框架的模块。
这对我来说很困难。这实际上意味着,为了利用这些高级优化的力量,我的所有代码都必须在一个模块中。这根本不可能。
我有大约 800 个密集的 Swift 文件,跨越 9 个框架。仅编译时间就是一场噩梦;更不用说它会给SourceKitService(以及我,就此而言)造成多么严重的创伤。
如果可能的话,我该如何解决这个问题?
【问题讨论】:
标签: swift optimization inline compiler-optimization