大家好,祝新年快乐! 愿你们还有 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 改善 NSDictionary
向 Swift.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_log
和os_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 起草了一份提案 关于有序集合的差异化功能。
我想提出关于有序集合形式化的建议,添加必要的差异功能以及相关的类型,以便于有序集合简单创建,表示和应用状态转换。