gpt4 book ai didi

ios - Xcode 13.2 中为 iOS 13 宣布的 Swift Concurrency - 他们是如何实现这一目标的?

转载 作者:行者123 更新时间:2023-12-05 00:23:09 25 4
gpt4 key购买 nike

Xcode 13.2 Beta release notes promise 为 iOS 13 提供 Swift 并发支持。

You can now use Swift Concurrency in applications that deploy to macOS 10.15, iOS 13, tvOS 13, and watchOS 6 or newer. This support includes async/await, actors, global actors, structured concurrency, and the task APIs. (70738378)


然而,早在 2021 年夏季,当它首次出现在 WWDC 上时,它就很难仅在 iOS 15+ 上运行。
我的问题是:发生了什么变化?他们是如何实现向后兼容的?它的运行方式是否与它在 iOS 15 中的运行方式截然不同?

最佳答案

将并发反向部署到较旧的操作系统版本将并发运行时库与您的应用程序捆绑在一起,并提供此功能所需的支持,就像 Swift 在 Swift 5 中的 ABI 稳定性之前使用标准库所做的那样,当时 Swift 可以随操作系统。
这捆绑了 Concurrency 的部分内容标准库的部分 (stable link) 以及一些 additional support and stubs用于功能 (stable link)。
当部署到足够新的操作系统版本以包含这些运行时功能作为操作系统的一部分时,不需要这种捆绑。

由于 iOS 15+(和相关操作系统版本)上的功能被声明需要内核更改(对于新的协作线程模型),而这些更改本身不能向后移植,因此某些功能的实现包括基于现有功能的填充程序,这些功能确实存在于这些操作系统上,但它的执行可能会有所不同,或者效率较低。
您可以在 Doug Gregor's PR 的几个地方看到这一点用于反向移植并发——在一些地方,检查 SWIFT_CONCURRENCY_BACK_DEPLOYMENT更改某些假设不再成立或功能不存在的实现。例如,GlobalExecutor无法对 dispatch_get_global_queue 做出假设合作(因为旧操作系统上不存在线程模型),所以在向后移植时,它必须 create its own queue用作全局合作队列。 @objc基于 Actor 也 need to have their superclass swizzled ,这不需要在非后台部署的运行时发生。 (符号也必须在某些地方注入(inject)到 backdeploy 库中,并且某些行为必须被删除,但这有点不那么有趣。)
总体而言,没有关于反向部署和非反向部署之间确切区别的全面文档(没有阅读所有代码),但可以安全地假设反向部署的库的有效行为将是相同的,尽管可能在性能成本。

关于ios - Xcode 13.2 中为 iOS 13 宣布的 Swift Concurrency - 他们是如何实现这一目标的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69746388/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com