Swift Linux 移植
随着 Swift 开源项目的发布,我们也发布了一个与 Linux 操作系统兼容的移植版本!您可以从 Swift 源代码构建它,或者下载 Ubuntu 的预构建二进制文件。这个移植版本仍然在开发中,但我们很高兴地说,它现在已经可以用于实验。目前,x86_64 是 Linux 上唯一支持的架构。
以下是目前移植版本中一些亮点
-
不依赖 Objective-C 运行时的 Swift:Linux 上的 Swift 不依赖 Objective-C 运行时,也不包含它。虽然 Swift 被设计为在 Objective-C 存在时与其紧密互操作,但它也被设计为在 Objective-C 运行时不存在的环境中工作。
-
核心 Swift 语言和 标准库 在 Linux 上与 Apple 平台上的实现和 API 大部分相同。由于 Linux 上缺少 Objective-C 运行时,行为上存在一些细微差异(如下所述)。
-
Glibc 模块:大部分 Linux C 标准库都通过这个模块提供,类似于 Apple 平台上的 Darwin 模块。一些头文件尚未导入到该模块中,例如 tgmath.h。
要试用它,只需
import Glibc
。 -
Swift 核心库:核心库 提供了来自 Foundation 和 XCTest 的核心 API 的实现,以便在没有 Objective-C 的 Linux 上使用。其目的是无论您是在 Apple 平台上使用 Swift 还是在 Linux 上使用 Swift,这些 API 都可以跨平台使用。
-
LLDB Swift 调试和 REPL:您可以像在 macOS 上一样调试您的 Swift 二进制文件和在 REPL 中进行实验。
-
Swift 包管理器 是一个一等公民,就像在 Apple 平台上一样。
以下是一些尚未完全工作或计划在未来实现的功能
-
libdispatch:作为核心库的一部分,更新的 Linux 支持正在进行中。您可以关注 GitHub 上的 libdispatch 项目的开发。
-
一些 C API:虽然这通常适用于我们所有支持的平台,但 C 中的一些构造尚未导入到 Swift 中。这将导致一些 API 不可用,例如那些包含 varargs /
va_list
的 API。然而,最近几个月,Swift 与 C 的互操作性取得了显著进展,获得了对命名和匿名联合、匿名结构和位域的支持。 -
一些
String
API:标准库的String
缺少几个重要 API 的实现,因为它们目前与 Apple 平台上NSString
的实现绑定在一起。 -
运行时内省:当 Apple 平台上的 Swift 类被标记为
@objc
或继承自NSObject
时,您可以使用 Objective-C 运行时来枚举对象上可用的方法或使用选择器调用方法。由于这些功能依赖于 Objective-C 运行时,因此它们不存在。 -
Array<T> as? Array<S>
:一些机制,例如使用不同关联类型转换容器,目前无法工作,因为它们依赖于与 Objective-C 的桥接机制。
我们非常高兴能够发布开源项目,并为 Linux 支持提供良好的开端,您可以立即尝试! 还有很多工作要做,所以我们希望看到您为 Swift 做出贡献,使 Linux 移植版本更加完善。