Swift System 提供了针对系统调用和底层货币类型的符合语言习惯的接口。我们的愿景是让 System 成为所有受支持的 Swift 平台上底层系统接口的唯一归宿。
Swift System 不是一个跨平台库。它在每个受支持的平台上提供一套独立的 API 和行为,紧密地反映了底层操作系统接口。只需导入一个模块,即可拉取针对目标操作系统的原生平台接口。
我们的首要目标是简化跨平台库和应用程序(如 SwiftNIO 和 SwiftPM)的构建。System 的设计目标不是消除使用 #if os()
条件语句来实现跨平台抽象的需求;相反,我们的目标是使其更安全、更具表现力,以填充平台特定部分。
(也就是说,最好避免不必要的差异 -- 例如,当两个操作系统共享同一个系统调用的 C 名称时,理想情况下,Swift System 会使用相同的 Swift 名称公开它们。对于实现行业标准的系统接口(如 POSIX),这是一个特别明显的期望。)
import SystemPackage
let message: String = "Hello, world!" + "\n"
let path: FilePath = "/tmp/log"
let fd = try FileDescriptor.open(
path, .writeOnly, options: [.append, .create], permissions: .ownerReadWrite)
try fd.closeAfter {
_ = try fd.writeAll(message.utf8)
}
要在 SwiftPM 项目中使用 SystemPackage
库,请将以下行添加到您的 Package.swift
文件中的依赖项中
.package(url: "https://github.com/apple/swift-system", from: "1.4.0"),
最后,将 "SystemPackage"
作为您可执行目标的依赖项包含进来
let package = Package(
// name, platforms, products, etc.
dependencies: [
.package(url: "https://github.com/apple/swift-system", from: "1.4.0"),
// other dependencies
],
targets: [
.target(name: "MyTarget", dependencies: [
.product(name: "SystemPackage", package: "swift-system"),
]),
// other targets
]
)
目前,Swift System 包支持三种类型的操作系统:基于 Darwin 的操作系统、类 POSIX 的操作系统和 Windows。该软件包的源代码稳定性状态因平台而异
平台类型 | 源代码稳定性 |
---|---|
Darwin (macOS, iOS 等) | 稳定 |
POSIX (Linux, WASI 等) | 稳定 |
Windows | 不稳定 |
软件包版本号遵循 语义化版本控制 -- 对源代码稳定的公共 API 的源代码破坏性更改只能出现在新的主版本中。但是,对于尚未达到源代码稳定性的平台,可能会在新次要版本中看到源代码破坏性更改。
swift-system 包的公共 API 由在 SystemPackage
模块中标记为 public
的非下划线声明组成。
我们所说的“下划线声明”是指在其完全限定名称中的任何位置都有前导下划线的声明。例如,以下是一些即使在技术上被标记为 public 也不会被认为是公共 API 的名称:
FooModule.Bar._someMember(value:)
(带下划线的成员)FooModule._Bar.someMember
(带下划线的类型)_FooModule.Bar
(带下划线的模块)FooModule.Bar.init(_value:)
(带下划线的初始化器)不属于公共 API 的接口可能会在任何版本(包括补丁版本)中继续更改。如果您有一个需要使用非公共 API 的用例,请提交一个描述它的功能请求!我们希望公共接口尽可能有用 -- 尽管最好是在不损害安全性或限制未来发展的情况下。
软件包的未来次要版本可能会根据需要更新这些规则。
下表将现有软件包版本映射到其所需的最低 Swift 工具链版本
软件包版本 | Swift 版本 | Xcode 版本 |
---|---|---|
swift-system 1.3.x | >= Swift 5.8 | >= Xcode 14.3 |
swift-system 1.4.x | >= Swift 5.9 | >= Xcode 15.0 |
我们希望这个软件包能够快速采纳与其任务相关的 Swift 语言和工具链的改进。因此,这个软件包的新版本会不时要求客户端升级到更新的 Swift 工具链版本。(这使得该软件包能够利用新的语言/标准库功能,基于编译器错误修复进行构建,并尽快采用新的软件包管理器功能。)补丁(即,错误修复)版本不会增加所需的工具链版本,但任何次要(即,新功能)版本都可能会这样做。
(注意:该软件包没有最低部署目标,因此虽然它确实要求客户端使用最新的 Swift 工具链来构建它,但该代码本身可以在任何支持运行 Swift 代码的操作系统版本上运行。)
有关许可信息,请参见 LICENSE。
在贡献之前,请阅读 CONTRIBUTING.md。
我们为每个活动的软件包次要版本维护单独的分支
软件包版本 | 分支 |
---|---|
swift-system 1.3.x | release/1.3 |
swift-system 1.4.x (未发布) | release/1.4 |
swift-system 1.5.x (未发布) | main |
更改必须落在与需要发布的最早版本相对应的分支上。它们会定期沿以下方向传播到后续分支
release/1.3
→ release/1.4
→ main
例如,落在 release/1.3
上的任何内容最终都会出现在 release/1.4
和 main
上;无需为每个发行线提交独立的 PR。(更改传播目前需要手动工作 -- 由项目维护者执行。)
与所有 Swift.org 项目一样,我们希望 Swift System 项目能够培养一个多元和友好的社区。我们期望贡献者遵守 Swift.org 行为准则。本文档的副本 可在本存储库中找到。