【问题标题】:How do I enable high level SIL optimizations for containers in a non-stdlib Swift framework?如何在非标准库 Swift 框架中为容器启用高级 SIL 优化?
【发布时间】: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


    【解决方案1】:

    Cross-module-inlining 现在可用于 Swift 4.2 及更高版本!

    【讨论】:

      猜你喜欢
      • 2015-08-17
      • 1970-01-01
      • 1970-01-01
      • 2021-12-31
      • 2020-08-04
      • 1970-01-01
      • 2018-08-24
      • 2016-02-18
      相关资源
      最近更新 更多