Swift3 Linux vc Mac 调度队列

Swift3 Linux vc Mac DispatchQueue

根据 swift.org/migration-guide,调度和相关函数有一个很棒的新 swift 接口(例如 dispatch_async -> DispatchQueue.async)。还添加了其他基础类型,例如 DataDate 值类型,而不是 NSDataNSDate

然而,在 linux 上的开源版本 swift3(开发者预览版 1)上,ubuntu15.10 编译器拒绝了所有这些更改。事实上,查看 swift 和 swift-corelibs 在 github 上的开源版本,我实际上并没有看到任何这些变化。由于它将在 XCode 开发者预览版上编译,这让我相信:我在 Linux 上做错了什么,或者这些更改是在 Apple 分支而不是开源分支中进行的。任何人都可以验证这一点,如果是后者,如果是这样,我们如何知道 Apple 分支与开源分支会有哪些变化?

查看 Swift 3 Evolution Github page。他们列出了所有建议的语言更改,并将它们按已实施的和未实施的进行区分。提案 SE-0088:Swift 3 的 libdispatch 现代化 和许多其他更改一样在 "yet to be implemented list" 上。

至于数据和日期,我不能说,因为我相信这是即将到来的核心库的一部分,而且我还没有能够非常详细地查看它们。也许您也可以查看 Swift Core-Libs Github 页面,尽管状态页面引用了在 NSData 和 NSDate 上完成的工作,但没有提及更新的数据类型。

感谢 Brad Larson for finding the Foundation and Dispatch 源中的覆盖。根据swift.org:

SDK Overlays: Specific to Apple platforms, the SDK overlays (implemented in stdlib/public/SDK) provide Swift-specific additions and modifications to existing Objective-C frameworks to improve their mapping into Swift. In particular, the Foundation overlay provides additional support for interoperability with Objective-C code.

tl;dr 这些文件夹中的所有内容仅适用于 Apple 平台。仍然不确定为什么他们将 Dispatch 覆盖限制在 Apple 平台上,因为 libdispatch 也是开源的并且面向 linux,但这回答了我最初的问题。

编辑:能够通过 swift 邮件列表确认调度覆盖确实在一定程度上依赖于 objective-c 运行时。有工作让它们在非 Darwin 平台上实现,但不能保证时间。

从 Swift 开始,3.0 发行版 GCD 在 Linux 上可以使用简单的 import Dispatch,这有点令人困惑,因为在 iOS/macOS 上不需要它,其中 Dispatch模块默认导入。