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 中的運行方式截然不同?
uj5u.com熱心網友回復:
將并發反向部署到較舊的作業系統版本將并發運行時庫與您的應用程式捆綁在一起,并提供此功能所需的支持,就像 Swift 在 Swift 5 中的 ABI 穩定性之前使用標準庫所做的那樣,當時 Swift 可以隨作業系統。
這捆綁了標準庫的并發部分(穩定鏈接)以及一些額外的支持和功能存根(穩定鏈接)。
當部署到足夠新的作業系統版本以包含這些運行時功能作為作業系統的一部分時,這種捆綁不是必需的。
由于 iOS 15 (和相關作業系統版本)上的功能被宣告需要內核更改(對于新的協作執行緒模型),而這些內核本身無法向后移植,因此某些功能的實作包括基于這些作業系統上確實存在的現有功能的墊片,但其性能可能略有不同,或者效率較低。
您可以在Doug Gregor 的反向移植并發PR的幾個地方看到這一點——在一些地方,您可以看到檢查SWIFT_CONCURRENCY_BACK_DEPLOYMENT哪些更改實作,其中一些假設不再成立,或功能不存在。例如,GlobalExecutor在向后移植時不能依賴獲取全域 Dispatch 佇列作為其主要共享佇列,而必須創建自己的佇列以供使用。@objc基于 actor還需要讓他們的超類 swizzled,這不需要在非后臺部署的運行時發生。(符號還必須在某些地方注入到后臺部署庫中,某些行為必須被剔除,但這有點不那么有趣。)
總的來說,沒有關于后臺部署和非后臺部署之間的確切區別的全面檔案(沒有閱讀所有代碼),但可以安全地假設后臺部署庫的有效行為將是相同的,盡管可能在性能成本。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/339606.html
