大家好,祝新年快乐! 愿你们还有 Swift 在新的一年里越来越好!

入门任务

  • SR-9466 [Compiler] Redo AssignInst lowering in DI
  • SR-9482 [ClangImporter] Swift’s filtering of “header guard” macros is too strict
  • SR-9557 [IRGen] Objective-C property description includes ivar name even when getters and setters are non-trivial
  • SR-9558 [SwiftPM] Improve error message when test directory is missing

Swift Unwrapped

Jesse 和 JP 讨论了 SourceKit-LSP(语言服务器协议),一个面向于 Swift 和 C 语言家族的 LSP 实现。

社区新闻

Saleem Abdulrasool 介绍了 Swift 基于 Windows 平台的 nightly 构建版本。译者注:Windows 版本已经实现了很多功能,基本可用,但是仍然有小部分的测试无法通过。

John McCall 分享了很多有趣的想法 关于适用于 Swift 语言的开源语言项目管理经验。

合并请求

David Smith 合并了一个 pull request 改善 NSDictionarySwift.Dictionary 的桥接!🎉

Doug Gregor 合并了一个 pull request,该 PR 允许类型查找 shadowing,使 Swift 的 Result 不会和用户已使用的 Result 类型相冲突。译者注:如果用户使用的类型和标准库的类型同名,将会优先使用用户的类型,而标准库的类型可以通过 Swift.Result 的方式使用。

Bruno Rocha 合并了一个 pull request,该 PR 改善了 Swift 语言服务器协议的代码折叠功能。

Argyrios Kyrtzidis 合并了一个 pull request,添加了一个共享库,将语言解析器以 C 接口的方式暴露出来,帮助 SwiftSyntax 通过复用编译器的信息以加速源码分析,这样避免任何形式的跨进程序列化,为语法树生成带来显着的性能提升。🏎

Pavel Yaskevich 合并了一个 pull request,通过新的诊断框架诊断对象的缺失成员。

Suyash Srijan 合并了一个 pull request,当一个名为 .none 的枚举类型与 Optional.none 产生不明确声明时会显示警告信息。

译者注:

enum Foo {
  case none
}

let test: Foo? = .none // Assigned Optional.none instead of Foo.none
let isEqual: Bool = test == Foo.none // false

审核中提案

SE-0239: Add Codable conformance to Range types 正在审核中

SE-0167 为标准库里的某些类型添加了 Codable 协议支持,但其中并没有 Range 系列的类型。

Range 是一个非常有用的类型,它现在已经支持 Codable 协议。一个很好的用例是使用 Date 来计算客户端与服务器之间的响应时间,或使用 Measurement <UnitTemperature> 来表示安全工作温度范围。

论坛动向

Ravi Kandhadai Madhavan 写了一篇帖子介绍为统一日志记录系统改进 Swift 的 API 。

我们建议改进统一日志系统的 Swift API(即 os_logos_signpost)以接受字符串插值的参数,而不是它们当前接受的 printf 样式格式的字符串和 varargs 组合。 这意味着 Swift 用户可以将字符串插值传递给日志记录函数,像 osLog("Fatal Error \(errno)") 那样。

Johannes Weiss 分享了一个修订后的草案 关于 Swift 服务器的日志记录 API。

我们已经整合了讨论主题的大部分反馈,所以即使你已经阅读过以前的版本,你也会发现一些合你心意的变化。一些重要的变化包括:

  • 记录元数据现在是结构类型,现在除了字符串之外还支持嵌套字典和列表。
  • 现在只能将本地相关的元数据传递给各个日志方法。
  • 使用 API​​ package 作为多路日志记录的解决方案。

反馈模型非常相似于 Swift Evolution 中的反馈模型。社区被要求以下面概述的方式提供反馈,审核期结束后,SSWG 将根据社群的反馈决定是否将提案推进到 Sandbox 流程。

Ben Langmuir 分享了一些想法关于构建,测试和安装 Swift packages。

现在有许多 SwiftPM 包(如 swift-syntax,sourcekitd 的压力测试,还有现在的 SourceKit-LSP),我们希望能够在其他 Swift toolchain 的持续集成和打包基础设施中构建,测试和安装它们。我也开始研究将 sourcekit-lsp 添加到 Swift CI 中,并遇到了很多问题。关键的挑战在于,我们想要使用刚构建的 toolchain 来构建和运行这些包,包括编译器,包管理器和 corelib,但现有的工具并不完善。本文接下来的部分将深入探究问题所在,以及如何解决这些问题的提议。

Scott Perry 起草了一份提案 关于有序集合的差异化功能。

我想提出关于有序集合形式化的建议,添加必要的差异功能以及相关的类型,以便于有序集合简单创建,表示和应用状态转换。

尾声

关于 Swift 服务器端最令人烦恼的地方