swift-async-algorithms

Swift Async Algorithms 是一个开源软件包,包含异步序列和高级算法,这些算法涉及并发及其相关类型。

该软件包有三个主要目标

动机

AsyncAlgorithms 是一个用于处理 *随时间变化的值* 的算法包。 这包括主要关于 *时间* 的算法,例如 debouncethrottle,但也包括关于 *顺序* 的算法,例如 combineLatestmerge。 处理多个输入的运算(例如 zipSequence 上所做的)在实现上可能出人意料地复杂,具有微妙的行为和需要考虑的许多边缘情况。 一个共享包可以正确地处理这些细节,并进行广泛的测试和文档记录,从而使所有 Swift 应用程序受益。

AsyncAlgorithms 的基础包含在 Swift 5.5 中,来自 AsyncSequence。 Swift 5.5 还带来了使用自然的 for/in 循环和 await 来处理 AsyncSequence 中的值,以及类似于 Sequence 的 API,例如 mapfilter 的能力。 结构化并发允许我们编写代码,其中中间状态只是一个局部变量,可以直接在 throw 的函数上使用 try,并且通常以类似于同步代码的方式处理异步代码的逻辑。

该软件包是这些 API 的所在地。 开发和 API 设计在 GitHubSwift 论坛上进行。

内容

组合异步序列

创建异步序列

性能优化的异步迭代器

其他有用的异步序列

按时间事务处理的异步序列

从异步序列获取所有值

效果

每个算法都有特定的行为效果。 对于抛出效果,这些可以是序列抛出,不抛出或重新抛出错误。 某些异步序列中的可发送性效果是有条件的,而另一些异步序列则要求所有组成的部件都是可发送的,以满足 Sendable 的要求。 这些效果 在此处列出

将 Swift Async Algorithms 作为依赖项添加

要在 SwiftPM 项目中使用 AsyncAlgorithms 库,请将以下行添加到 Package.swift 文件中的依赖项中

.package(url: "https://github.com/apple/swift-async-algorithms", from: "1.0.0"),

"AsyncAlgorithms" 作为可执行目标的依赖项包含在内

.target(name: "<target>", dependencies: [
    .product(name: "AsyncAlgorithms", package: "swift-async-algorithms"),
]),

最后,将 import AsyncAlgorithms 添加到您的源代码中。

入门

⚠️请注意,此软件包需要在 macOS 主机上使用 Xcode 14。 以前版本的 Xcode 不包含所需的 Swift 版本。

在 macOS 上使用 Xcode 构建/测试

  1. swift-async-algorithms 目录中,分别运行 swift buildswift test

在 Linux 上构建/测试

  1. 下载适用于您的 Linux 发行版的最新开发工具链
  2. 将存档解压缩到 swift 可执行文件位于二进制搜索路径环境变量 ($PATH) 中的路径
  3. swift-async-algorithms 目录中,分别运行 swift buildswift test

源码稳定性

Swift Async Algorithms 包的目标是尽快实现源码稳定; 版本号将遵循 语义化版本控制。 对公共 API 的源码破坏性更改只能在新主要版本中出现。

swift-async-algorithms 包 1.0 版本的公共 API 将由 AsyncAlgorithms 模块中标记为 public 的非下划线声明组成。 不属于公共 API 的接口可能会在任何版本(包括补丁版本)中继续更改。

包的未来次要版本可能会根据需要对这些规则进行更改。

我们希望该软件包能够快速采纳与其任务相关的 Swift 语言和工具链的改进。 因此,我们预计此软件包的新版本会不时要求客户端升级到更新的 Swift 工具链版本。 要求新的 Swift 版本只会要求一个次要版本升级。