Swift 的最新版本 Swift 6.4 带来了一系列语言和工具链改进:通过扩展对不可复制值的支持提升性能,生成的 Wasm 代码最高提速 40 倍,增强了与 C++20、Java 的互操作性,还新增 Subprocess 库,提供跨平台 API,用于启动外部进程并与其交互。
新版本对 Swift 语法进行了扩展,让代码更简洁清晰。例如,现在可以用 AType? 替代 (some AType)? 或 (any AType)?;新增 @diagnose 属性,用来控制编译器诊断信息和警告;可以用 模块名:: 来消除从不同模块导入的同名符号歧义,写法为 AModuleName::。
在并发代码方面,语句现在直接支持 关键字,无需再将异步调用包装在单独的 Task 中。Swift 6.4 还引入了 withTaskCancellationShield,它可以临时保护任务不被取消,保证关键清理代码即使在任务被取消后也能执行完毕。Swift 并发专家 Antoine van der Lee(一位知名 Swift 博客作者)指出:
Swift 6.4 为 Swift 并发带来了多项实用改进……如果你正在把代码库迁移到 Swift 6,这些更新值得了解一下。不是每一项特性都会改变你日常写代码的方式,但放在一起,它们可以降低采用严格并发模型的阻力。
Swift 6.4 通过新增类型和协议(包括 UniqueArray、UniqueBox、Ref/MutableRef、Iterable)来减少常用数组操作中不必要的拷贝和内存分配。 是不带引用计数的智能指针,独占堆上分配的值,并强制遵循不可复制语义。 避开普通数组的写时复制内存分配,提供可高效扩容的动态缓冲区。 协议支持借用语义遍历元素,避免不必要拷贝。
其他和借用相关的改动包括:新增 和 类型,作为一等可存储容器,用来借用或修改单个值;借用与修改访问器支持通过属性读取或修改 Span、InlineArray;支持不可复制类型遵循 Equatable、Comparable、Hashable 协议。
下面的代码片段展示了如何声明借用访问器和修改访问器:
struct RigidWrapper<Element: ~Copyable>: ~Copyable { var _element: Element var element: Element { borrow { return _element } mutate { return &_element } }}在 IDE 方面,Swift 6.4 在模块调试方面提供了更强大的支持,并通过在所有受支持平台上使用 Swift Build 作为默认构建系统实现了统一的构建工具链。说到调试,Hacker News 用户 boxed 表达了许多开发者的心声:
我真的希望调试器的改进能够实实在在感受到。我在调试器里停下来却看不到想查看的变量,这种情况已经多得数不清了。
Subprocess 包现已稳定,提供跨平台 API,用于启动外部子进程和交互。下面的代码片段演示了如何启动进程并捕获输出:
let result = try await Subprocess.run( .name("ls"), arguments: ["-la"], output: .string(limit: 4096))print(result.standardOutput)Swift 6.4 还改进了 Swift 与所有受支持语言的互操作性。新的 @c 和 @implementation 属性允许你直接在 Swift 中提供 C 头文件的实现,而无需单独的 C 声明。Swift 6.4 在 Span 与 C++20 的 std::span 之间实现透明桥接,并以多种方式扩展了与 Java 的互操作性。最后,通过 JavaScriptKit 实现的 Wasm 桥接速度比动态桥接快 40 倍。
Swift 6.4 包含的更新远不止本文所介绍的这些,完整细节请查阅官方发布公告。
查看英文原文:https://www.infoq.com/news/2026/09/swift-6-4-released/





