Hacker News 中文摘要

RSS订阅

Swift 6.4 发布 -- Swift 6.4 Released

2026年9月15日,Swift 6.4 正式发布。Swift 希望从应用、服务器到系统代码、嵌入式设备和浏览器都能胜任。此版本深化相关支持,让日常代码更易编写。亮点包括:Swift 构建系统(Swift Build)成为包管理器(Swift Package Manager)的默认选项,让项目在 Linux、macOS 和 Windows 上构建方式一致;子进程库(Subprocess)达到 1.0;互操作性进一步扩展,Span 与 C++20 的 std::span 直接桥接。

正文

2026年9月15日

Swift 标志,文字为 Swift 6.4

Swift 标志(暗色),文字为 Swift 6.4

Swift 6.4 现已发布。Swift 旨在成为从应用、服务器到系统代码、嵌入式设备和浏览器的全栈优选语言。本版本深化了这种支持,并让日常代码更易编写。重点包括:

  • Swift Package Manager 现默认使用 Swift Build,使项目在 Linux、macOS 和 Windows 上构建方式一致。
  • Subprocess 达到 1.0,提供稳定跨平台方式从 Swift 运行并交互其他程序。
  • 互操作性进一步扩展:Swift 的 Span 直接桥接 C++20 的 std::span,Swift/Java 互操作增强了异步和回调支持。
  • Swift 在浏览器中运行更快:通过 JavaScriptKit 桥接 WebAssembly 速度提升至最多 40 倍,且 Wasm SDK 可直接从 Swift.org 获取。
  • Embedded Swift 能力增强,支持存在类型和更丰富的错误处理,面向微控制器级目标。
  • 性能提升且保持内存安全:新增可容纳不可复制元素的数组类型而无需写时复制开销,以及无需复制即可迭代的新 Iterable 协议。

更多变更详见 Swift Evolution 仪表盘。

更简单清晰的代码

Swift 6.4 简化了日常编程,使代码更简单清晰。

  • 更自然的可选 some 和 any 类型:写可选 some 或 any 类型时不再需用括号包裹,如直接写 some Rocket? 而非 (some Rocket)?(SE-0521)。
  • 源码级控制编译器警告:可用新 @diagnose 属性在代码中定义警告行为,如抑制或提升为错误(SE-0522)。
  • 多库冲突时明确 API:用模块选择器 :: 指定所用模块,例如两个模块都提供 CommonThing 类型时可明确选择(SE-0491)。
  • 在 defer 块中调用异步函数:defer 中的异步代码会被等待并完成后再退出(SE-0493)。
  • 确保必要清理不被取消:通过 withTaskCancellationShield API 运行免受外围任务取消影响的闭包(SE-0504)。

可结合 defer 异步与取消屏蔽,确保清理始终执行,例如文件处理函数在 defer 中通过屏蔽闭包调用 flushMetrics 网络请求并关闭句柄,不受取消干扰。

Foundation 和标准库改进便于现代 API 用于现有类型,如 ProgressManager 增加 async/await 支持(SF-0023),@Observable 类型现具备细粒度连续变更通知(SE-0506)。

Subprocess 库已达 1.0,提供基于 Swift 并发的跨平台子进程运行交互包。例如运行 ls -la 并捕获字符串输出。

Swift 6.4 便于迁移现有项目至 Swift Testing:可在 Swift Testing 测试中安全使用 XCTAssert,或在 XCTest 中用 #expect(ST-0021),用 CustomTestReflectable 协议自定义失败期望显示值(ST-0022)。swift test 支持重复测试用例(ST-0024)及在 Apple 平台记录符合 Transferable 的附件(ST-0023)。

Swift 现拥有文档站点,标准库文档内容已开源。

工具改进包括:

  • 更健壮调试:编译器追踪调试信息中 Swift 模块的方式完成重构,LLDB 通过精确依赖追踪导入模块,Linux/Windows 调试构建及 Darwin dSYM 体积显著缩小。
  • 跨 IDE 统一构建系统:SwiftPM 默认用 Swift Build,并包含软件物料清单(SBOM)生成,支持 SPDX 或 CycloneDX 格式(SE-0509)。
  • 更广泛 IDE 支持:VS Code 的 Swift 扩展现登陆 Open VSX Registry,可用于 Cursor 等工具,并集成 Swiftly 选择工具链版本。

更深互操作与平台支持

Swift 互操作扩展到更多层面:从系统级 C++ 到 Android 的 Java 运行时,从浏览器 Wasm 到微控制器 Embedded Swift。

语言互操作深化:

  • C:用 @c 配 @implementation 以 Swift 函数实现 C 头文件,无需单独 C 声明;@c 函数可获安全包装,如用 Span 替代指针加计数。
  • C++:桥接 C++20 std::span 与 Swift Span,无需手动转换即可互传。
  • Java:Swift/Java 互操作项目扩展对异步和抛出函数的协议与回调包装支持,新增闭包自动映射 Runnable、变参导入和 Java record 类型支持。

平台支持深化:JavaScriptKit 桥接 Wasm 性能提升,安全桥接快至 40 倍;Wasm SDK 可从 Swift.org 安装页获取,编译浏览器 Swift 无需额外配置。Foundation 改进了 WASI 上的 FileManager 支持。

安卓

Android 上的 Swift 持续进步。本版 Android SDK 基于新 LTS NDK 30 构建,提供 Android 可用性属性;Swift Build 现支持 SwiftPM 中的 Android,无需安装后脚本。此前文章涵盖了 Embedded Swift 的其他改进,包括存在类型(如 any Protocol)的普遍支持,可自然表达异构集合及抛出捕获错误。Embedded Swift 新增 EmbeddedRestrictions 警告,可在整个目标启用,例如在 Package.swift 的 target 设置中将此警告视为 warning。

Swift 6.4 更易避免不必要数据复制且保持内存安全:

  • 无需复制即可操作内存中值:借用和变更访问器允许通过属性读写 Span 或 InlineArray(SE-0507);不可复制类型现可遵循 Equatable 等;新 Ref 和 MutableRef 类型提供可存储容器(SE-0519);不可复制类型的可选值行为一致,可检查更新而不消耗(SE-0532)。
  • 构建集合与堆分配值免不必要分配:UniqueBox 提供独占堆值智能指针无引用计数(SE-0517);UniqueArray 存不可复制元素无写时复制分配(SE-0527);Iterable 协议借用以循环元素免复制(SE-0516)。
  • 安全访问原始内存:withTemporaryAllocation 提供自动初始化清理的临时缓冲(SE-0524);RawSpan 新安全加载 API 替代不安全函数(SE-0525)。

Swift 6.4 凝聚社区众多贡献。欲参与可前往 Swift 论坛。今日可按安装页指引尝试 Swift 6.4,或用 Swiftly 下载新工具链。

评论

社区普遍赞赏 Swift 新版本的扎实改进与跨平台愿景,少数人遗憾其苹果出身或困惑于 AI 时代学习编程的必要性。

赞赏语言设计与稳健发布

  • Swift 语法优美、构思严谨,本轮在类型检查、内存安全与调试上的进步获好评(较多人) > 很高兴看到 Swift 进步,它是门优美且思虑周全的语言(@bnchrch)

跨平台仍受制于 SwiftUI 与标准库

  • 团队对非苹果平台投入令人印象深,但核心框架缺位,尤其 SwiftUI 无跨平台实现前应用开发难成主流(较多人) > 除非有真正的跨平台 SwiftUI,否则应用编程里 Swift 只是新奇玩意(@airstrafer)

子进程与命令行工具成亮点

  • 官方 Subprocess 1.0 结合安全与提前编译,减少 shell 脚本负担,被命令行爱好者推崇(较多人) > 写过太多 shell 封装,期待官方子进程助手(@elpakal)

看好 WebAssembly 与嵌入式延伸

  • Swift 已悄无声息支持 WebAssembly 和嵌入式,虽小众但高级语言特性具吸引力(少数人) > 未察觉 Swift 在 WebAssembly 已如此成熟,比 Rust 更顺手(@afavour)

遗憾苹果绑定及学代码动力受挫

  • 部分人认为若脱离苹果生态语言会更佳;另有资深程序员因 AI 代写浪潮对自学价值产生怀疑(少数人) > 可惜 Swift 不得不成为苹果的语言,它其实做得极好(@Ta_Panters)

有价值的补充

  • Swift 与 Rust、Zig 形成友好竞争,已引入借用检查、arena 等系统级特性,语言边界模糊化(@tancop)。
  • 有开发者用 Swift 构建社交应用后端,在 Vapor 与 Hummingbird 间切换,显示服务端生态在生长(@busymom0)。
  • 通过 Subprocess 示例可见 Swift 正探索结构化数据传递,暗合 PowerShell 哲学,减少文本解析(@adamnemecek)。