HeadlinesBriefing favicon HeadlinesBriefing.com

Swift 6.4 发布:新功能与改进

Hacker News •
×

2026 年 9 月 15 日 Swift 6.4 现已发布。Swift 旨在成为全栈开发的绝佳选择,从应用程序和服务器到系统代码、嵌入式设备和浏览器。此版本深化了该支持,并使日常代码编写更加容易。亮点包括:Swift Build 现已成为 Swift Package Manager 中的默认构建系统,因此您的项目在 Linux、mac OS 和 Windows 上以相同方式构建。Subprocess 达到 1.0 版本,提供了一种稳定的跨平台方式,用于从 Swift 运行和与其他程序交互,从命令行工具到流式进程。互操作性进一步增强,Swift 的 Span 现在可直接与 C++20 的 std::span 桥接,且 Swift/Java 互操作扩展了其异步和回调支持。Swift 在浏览器中运行更快,通过 Java Script Kit 进行 Web Assembly 桥接速度最高提升 40 倍,且 Wasm SDK 可直接从 Swift.org 获取。嵌入式 Swift 功能更强大,支持存在类型并为微控制器级目标提供更丰富的错误处理。在保持内存安全的同时性能得到提升,新的数组类型可在无复制开销的情况下持有不可复制元素,新的 Iterable 协议支持无复制迭代。更简洁明了的代码 Swift 6.4 简化了您的日常编程,使代码更简洁明了。更自然的可选 some 和 any 类型。编写可选 some 或 any 类型时,不再需要用括号包裹类型。您可以直接写 some Rocket? 而非 (some Rocket)? (SE-0521)。源代码级别的编译器警告控制。当您需要控制项目中警告的行为(如抑制警告或将其提升为错误)时,现在可以使用新的 @diagnose 属性直接在代码中定义警告行为 (SE-0522)。当多个库冲突时明确使用哪个 API。当多个模块定义相同的 API 名称且您想引用它时,可以通过模块选择器指定您想使用的模块。如果您的应用导入两个都提供 Common Thing 类型的模块,使用 :: 选择器可明确指定您想要使用哪一个 (SE-0491)。在 defer 块中调用异步函数。您在 defer 块中编写的任何异步代码都会被 await 并运行至完成后再退出 (SE-0493)。确保必要的清理工作不被取消。您可以通过 with Task Cancellation Shield API 运行一个受保护免受外层任务取消影响的闭包 (SE-0504)。您可以将 defer 块中的异步调用与取消保护结合,确保清理工作始终发生,无论函数如何返回:func process File(at url: URL) async throws {let handle = try File Handle(for Reading From: url)defer {// flush Metrics 是网络调用,因此请求取消后可能会挂起;保护确保其运行至完成且不包含在取消中。await with Task Cancellation Shield {await flush Metrics(for: url)try? handle.close()}}try await process Contents(of: handle)}Foundation 和标准库的改进使将现代 API 与现有类型结合使用变得更容易。例如,Progress Manager 添加了提供 async/await 支持的 API (SF-0023),且 @Observable 类型现在具有细粒度和持续的变更通知 (SE-0506)。Subprocess 库 —— 最初作为 SF-0007 引入并于 2025 年发布 0.1 版本 —— 已达到 1.0。它提供了一个跨平台包,用于运行和与子进程交互,基于 Swift 并发从头构建。以下示例来自《Getting Started with Subprocess》,演示运行进程并捕获其输出。let result = try await Subprocess.run(.name("ls"),arguments: ["-la"],output: .string(limit: 4096))Swift 6.4 使将现有项目迁移以使用 S...