Isa*_*erg 12 concurrency xcode ios async-await swift
Xcode 13.2 Beta 发行说明承诺支持 iOS 13 的 Swift 并发。
您现在可以在部署到 macOS 10.15、iOS 13、tvOS 13 和 watchOS 6 或更高版本的应用程序中使用 Swift Concurrency。此支持包括异步/等待、参与者、全局参与者、结构化并发和任务 API。(70738378)
然而,早在 2021 年夏季,当它首次出现在 WWDC 上时,就很难限制它只能在 iOS 15+ 上运行。
我的问题是:什么改变了?他们是如何实现向后兼容的?它的运行方式是否与 iOS 15 中的运行方式有很大不同?
Ita*_*ber 26
将并发向后部署到较旧的操作系统版本会将并发运行时库与您的应用程序捆绑在一起,并提供此功能所需的支持,就像 Swift 在 Swift 5 中 ABI 稳定之前使用标准库所做的那样,当时 Swift 可以随操作系统。
\n这捆绑了标准库的并发部分(稳定链接)以及一些附加支持和功能存根(稳定链接)。
\n当部署到足够新的操作系统版本以包含这些运行时功能作为操作系统的一部分时,不需要这种捆绑。
\n由于 iOS 15+(以及相关操作系统版本)上的功能被声明需要内核更改(对于新的协作线程模型),而这些更改本身无法向后移植,因此某些功能的实现包括基于这些操作系统上确实存在的现有功能的填充程序,但其性能可能会略有不同,或者效率较低。
\n您可以在Doug Gregor 的 PR 的几个地方看到这一点,用于在几个地方向后移植并发 \xe2\x80\x94,检查SWIFT_CONCURRENCY_BACK_DEPLOYMENT更改某些假设不再成立或功能不存在的实现。例如,GlobalExecutor不能做出关于dispatch_get_global_queue协作的假设(因为旧操作系统上不存在该线程模型),因此在向后移植时,它必须创建自己的队列以用作全局协作队列。@objc基于角色的参与者还需要对其超类进行 swizzled,这不需要在非反向部署的运行时上发生。(符号还必须在某些地方注入到后台部署库中,并且必须消除某些行为,但这有点不太有趣。)
总的来说,没有关于反向部署和非反向部署之间确切区别的全面文档(没有阅读所有代码),但应该可以安全地假设有效的行为将是相同的,尽管可能在性能成本。
\n| 归档时间: |
|
| 查看次数: |
4139 次 |
| 最近记录: |