SSWG 2021 年度更新
自从 SSWG 上次更新以来,Swift 服务器生态系统持续增长和扩展。
首先,SSWG 非常高兴地欢迎三位新成员
- Adam Fowler
- Fabian Fett (Apple)
- Patrick Freed (MongoDB)
Adam、Fabian 和 Patrick 于 9 月 3 日正式加入 SSWG。Fabian 接替了 Johannes Weiss,后者在 SSWG 完成了三年任期。我们非常感谢他在那段时间里所做的一切。
让我们回顾一下 SSWG 去年的目标,并展望未来。
Swift 并发
Swift 5.5 于 2021 年秋季发布,并为 Swift 引入了新的并发模型。这将对 Swift 在服务器端产生深远的影响,使代码更易于阅读和维护,并使用诸如分布式 Actor 等语言特性引入新的可能性。
完全迁移到新的并发模型是一个漫长的过程。许多库和 API 需要采用 async
/await
以及 Sendable
检查,随着我们向 Swift 6 迈进。
SSWG 发布了库和应用程序开发人员的并发采用指南,并且有很多关于开发人员迁移到新的并发模型后代码简化的优秀示例。
Swift 服务器生态系统在采用 async
/await
方面取得了重大进展。诸如 Vapor、Smoke 和 Hummingbird 等框架都添加了 async
/await
API。许多其他软件包和库(如 MongoDB 驱动程序 和 AsyncHTTPClient)也添加了新的 async
/await
API。
SSWG 预计并发将成为 2022 年的一个重要主题,因为 Sendable
检查将被采用,并且现有库将开始迁移以使用诸如 AsyncSequence
等新功能。还有一些底层软件包仍需要采用新的 API,特别是 SwiftLog 和 SwiftDistributedTracing,但这些应该很快完成。SSWG 认为,随着时间的推移,大多数库和框架都应该变成仅 async
/await
,而不是使用或向用户公开 EventLoopFuture
。
工具
工具是 SSWG 在 2021 年的另一个重点,并发布了许多重要的新版本,以使开发人员的生活更轻松。
首先,重点是建立更简化的方法,以便在非 Apple 平台上安装 Swift。RPM/Deb 软件包是 Linux 上安装的实际标准,并且社区贡献的号召受到了热烈欢迎。现在有安装程序脚本,用于为多个平台构建工具链软件包,并且这些脚本已被社区存储库采用,以便在许多 Linux 发行版上轻松安装。
在年底,发布了新的 Swift for VSCode 扩展,以使在 VSCode 上使用 Swift 成为无缝体验。感谢 Adam Fowler 和 Steven Van Impe 的辛勤工作,此扩展在 VSCode 以及 GitHub Codespaces 等相关工具中实现了 Swift 开发,且几乎无需设置。
接下来,社区创建了新的 Swift GitHub Actions,以使使用 GitHub Actions 构建和测试 Swift 代码变得容易。这些正在迁移到由社区领导的 新的 GitHub 组织 以进行协作。这是一个正在进行的项目,SSWG 期待看到社区如何采用它。
最后,基于 ARM 的机器在开发和部署方面的增加为那些希望使用不同架构的人提供了新的机会。Swift 5.6 提供了用于 ARM Linux 的工具链以及具有 ARM 支持的多平台 Docker 镜像。我们已开始向指南中添加有关应用程序交叉编译的信息,并将随着更多人开始为 ARM 构建 Swift 应用程序而继续完善它们。这为在 Docker 中使用 Swift 提供了出色的体验,并使部署到 ARM 服务器(如 AWS Graviton)成为可能。
文档
SSWG 在 SSWG 项目、孵化项目和服务器指南中添加了大量文档。这些是宝贵的信息来源,为从部署 Swift 应用程序到分析性能等所有内容提供技术深入探讨和解释。但是,可发现性存在重大问题,这将是 2022 年的重点。
生态系统
由于疫情以及去年更新的延迟发布,只有额外的库 MultiPartKit 被添加到 SSWG 孵化中。这已在孵化级别被接受。
根据 SSWG 的毕业标准,成熟度级别会定期审查。SSWG 很高兴地宣布,在上次审查中,许多软件包已投票进入更高的成熟度级别
- SwiftMetrics(从孵化到毕业)
- SwiftStatsdClient,(从沙箱到孵化)
- SwiftPrometheus,(从沙箱到孵化)
- gRPC Swift,(从孵化到毕业)
- MongoSwift,(从沙箱到孵化)
- Swift Service Lifecycle,(从沙箱到孵化)
- Soto for AWS,(从沙箱到孵化)
可以在 SSWG 网页上的“项目”部分下找到当前孵化的软件包列表。
在孵化过程之外,生态系统持续增长。Amazon Web Services 宣布了新的 Swift SDK,很高兴看到成熟的参与者发布第一方 Swift 库。
Swift 的演进还为编写服务器端 Swift 提供了许多独特体验的机会。一项重要的工作是正在进行的 分布式 Actor 研究,这是 Swift 的一个令人兴奋的新途径,目前其他主流语言很少具备。
2022 年目标
SSWG 认为 2022 年对于 Swift 服务器端来说将是激动人心的一年,因为新的并发工作将继续使 Swift 成为服务器端的杰出语言。2022 年的最高目标包括
- 继续关注生态系统的增长
- 继续并发之旅
- 扩展工具
- 改进构建时间
- 增加服务器端 Swift 的采用
继续关注生态系统的增长
虽然过去几年中,Swift 服务器生态系统可用的软件包范围有了显着改进,但生态系统的增长仍然是 SSWG 的重点。SSWG 对支持流行的服务器端组件(如 Kafka、Cassandra 和 RabbitMQ)的库感兴趣。如果您有兴趣为这些或您认为对 Swift 服务器生态系统有用的任何其他工具或软件包编写驱动程序,我们鼓励您提交提案。
继续并发之旅
采用 Swift 的新并发模型将继续是 SSWG 在 2022 年的重点,因为它将对生态系统产生变革性影响。最初的重点将是完成日志记录和跟踪,并使用新的并发功能,然后鼓励在软件包和库中采用这些更新。
如果您构建和维护服务器的库,我们鼓励您采用 Swift 的新并发模型,并为您的用户提供 async
/await
API。
扩展工具
工具在过去 12 个月中得到了显着发展,并将继续成为改进的重点目标。随着人们越来越关注使用替代 IDE,诸如 SourceKitLSP 等项目应该会看到更多的使用和采用,因此也会有更多的改进和错误修复。由于 Swift for Visual Studio Code 扩展的关注,最近已经修复了一些旧的错误。我们鼓励社区为更多 IDE 构建插件,因为这只会对服务器端 Swift 有好处。
Swift 5.6 还引入了 Swift Package Plugins,这将开辟工具可能性的另一条途径,包括使用 DocC 自动生成文档、运行 linters 和代码格式化程序,甚至运行其他构建工具来生成 CSS 和 JS 应用程序。它还支持代码生成,这将对 gRPC、Smoke 和 AWS SDK 有用。SSWG 将密切关注这一点,以了解可以将精力投入到哪里以产生最大的影响。
接下来,另一个目标是继续改善 Swift 的安装体验。如前所述,您已经可以使用 RPM 和 .deb 软件包安装 Swift。但是,有些人希望轻松管理 Swift 的多个版本并轻松安装特定版本。其他语言有用于此目的的工具,例如 Rust 的 rustup。SSWG 已开始构建一个 Swift 工具链安装程序,暂定名为 Swiftly,以实现类似的功能,并且在不久的将来会有更多关于此的更新。
最后,SSWG 将考虑鼓励在一些流行的通用工具(如 Dependabot 和 Sentry)中采用 Swift。服务器端 Swift 已经达到了良好的成熟度水平,很高兴看到这些工具添加对 Swift 的支持。
改进构建时间
随着框架和应用程序变得越来越复杂以及语言功能的添加,构建时间可能会受到影响。当在本地构建以进行开发时,这不太成为问题,因为您可以利用增量构建,但是为部署构建应用程序通常需要全新构建。某些应用程序在 Heroku 等服务中达到了限制。
改进构建时间将需要在多个方面努力。Swift 编译器不断进行改进,库开发人员应确保他们的代码尽可能高效,并且生态系统应确保它提供必要的组件以避免重复。
一个重点领域是使用 SwiftCrypto。目前,SwiftCrypto 支持的密码学操作集有限。这意味着任何需要超出范围功能的库都需要添加对 OpenSSL 的依赖,或者出售他们自己的另一个库的副本,例如 BoringSSL。
SwiftCrypto 现在包含一个 CryptoExtras 模块,以提供用于常见服务器需求的额外 API,例如 RSA。这允许像 Vapor 的 JWTKit 这样的库仅依赖 SwiftCrypto,而不出售他们自己的 BoringSSL 库,从而减少需要编译的代码量。
SSWG 可以支持的其他领域包括 SwiftPM 中的缓存,并确保像最近宣布的 GitHub Action 这样的工具支持这一点。
增加服务器端 Swift 的采用
最后,SSWG 今年的一个重点将是改进 Swift 在服务器端的展示方式。Swift 已被广泛使用,但为了展示这一点并使人们更容易采用,可以做更多的事情。
首要目标是提高服务器端 Swift 的可发现性。有很多优秀的指南和文档可用,但它们没有被连贯地整理在一起。鼓励采用 DocC 并从不同的文档链接到 SSWG 指南应该使这更容易被发现,无论是对于用户还是搜索引擎。如果缺少任何有用的功能,SSWG 可以帮助引导工作来弥补这些差距。
SSWG 还将发起一项关于服务器端 Swift 的深入调查,以了解更多关于使用它的人和不使用它的人的信息。工作组成员每天都使用 Swift 编写服务器应用程序,但可能存在该小组不知道的差距和缺失的工具。该调查应有助于提供一些数据,以确定努力的方向。请留意此调查公告。
最后但并非最不重要的一点,SSWG 希望改进使用服务器端 Swift 的信息传递。这包括在生产应用程序中展示它,突出成功案例,并提供为什么要使用它的具体示例。示例包括 async
/await
如何使编写代码更容易,Swift 如何帮助减少运行时错误,以及展示与其他语言相比的具体性能优势。如果您想与我们的社区分享您的故事,请联系论坛中的工作组,或向 @swift-website-workgroup
发送一份草稿提案。未来几个月将有更多关于这方面的公告。