Xcode 13.2 Beta发行说明承诺对iOS 13提供Swift并发支持。
您现在可以在部署到macOS 10.15、iOS 13、tvOS 13和watchOS 6或更高版本的应用程序中使用Swift并发。这种支持包括异步/等待、参与者、全局参与者、结构化并发性和任务API。(70738378)
然而,早在2021年夏天,它第一次出现在WWDC时,很难只在iOS 15+上运行。
我的问题是:什么改变了?它们是如何实现向后兼容的?它的运行方式是否与iOS 15中的运行方式有很大的不同?
发布于 2021-10-28 00:42:05
将并发性重新部署到较早的操作系统版本,将并发运行库与应用程序捆绑在一起,并提供此功能所需的支持,就像Swift 5中的ABI稳定性之前的标准库Swift一样,Swift可以随操作系统一起提供。
这个包将标准库(稳定链路)的稳定链路部分和一些附加支持和存根 for functionality (稳定链路)捆绑在一起。
在将这些运行时特性作为OS的一部分部署到足够新的操作系统版本时,这种捆绑是不必要的。
由于iOS 15+上的特性(以及相关的OS版本)要求对内核进行修改(对于新的协作线程模型),而这些内核本身是不能支持的,因此某些特性的实现包括基于现有功能的shims,这些功能确实存在于这些OSes上,但执行起来可能有点不同,或者效率较低。
您可以在道格·格雷戈的公关中的一些地方看到这一点,用于支持并发性--在一些地方,对SWIFT_CONCURRENCY_BACK_DEPLOYMENT的检查会改变某些假设不再成立或功能不存在的实现。例如,GlobalExecutor不能假设dispatch_get_global_queue是协作的(因为旧的OSes上不存在线程模型),所以在支持移植时,它必须使用创建自己的队列作为全局协作队列。@objc-based参与者也是需要把他们的超级阶级,这不需要在非回部署的运行时发生。(还必须在一些地方将符号注入回部署库中,并且必须删除某些行为,但这一点并不那么有趣。)
总的来说,没有关于反部署和不部署之间的确切区别的全面文档(除了阅读所有的代码),但是应该可以安全地假设后部署库的有效行为将是相同的,尽管可能会以性能为代价。
https://stackoverflow.com/questions/69746388
复制相似问题