以下最近两周的新闻。

入门任务

  • TF-67 [Autodiff] BumpPtrAllocating some classes that have SmallBitVector fields
  • TF-86 [Tests] Use expectEqual instead of expectTrue
  • TF-93 [Graph Program Extraction] Deabstraction should properly diagnose recursion
  • TF-130 [Graph Program Extraction] Add API to serialize a @convention(tensorflow) function as a graph

播客

Jesse 和 JP 讨论了 关于 Swift 官方代码格式和规范的草案。

John SundellTed Kremenek 讨论 了最新的 Swift 5 版本,着重关注 ABI 稳定性以及这门语言的未来展望。

社区新闻

Swift 4.2.3 for Linux 正式发布

Keith Smiley 分享了一个 Xcode 的构建设置总览,用于指定 Swift 内存独立性的编译器标志。

Jordan Rose 分享了一个有趣的复活节彩蛋:关于 swiftmodule 文件的神奇数字 —— UTF-8 编码下的 E2 9C A8 0E✨14,而这分别是 Swift 语言最初的名字,以及 Swift 1 正式发布的年份。

Swift 服务器端协会发布了它们最新的所有演讲视频

Ray Wenderlich 为我们总结了关于 Swift 服务器端的学习资源

Swift 将会再次作为组织参加今年的 Google 编程之夏 (GSOC)。

译者注:Google 编程之夏(Google Summer of Code),是由 Google 公司所主办的年度开源程序设计项目,比赛的主要目的是鼓励学生参与开放源代码的程序设计活

审核中提案

SE-0243: Integer-convertible character literals 正在审核中

Swift 的字符串类型是为 Unicode 的正确性而设计的,它抽象为字符串的底层二进制表示形式,将其建模为字位的 “集合”。 在编程中,字符串作为 ASCII 值常常需要被表示成本质上是数字但具有文本含义的值。我们建议添加一个新的字面量语法,使用单引号('),并且可以透明地转换成 Swift 的整数类型。这种语法将扩展到所有 “单元素” 文本,包括 Character,并将成为这些类型的首选字面量语法。

SE-0244: Opaque Result Types 正在审核中

此草案引入了隐藏函数返回的特定结果类型的功能。返回结果类型仅由其自身描述,例如,函数可以指定返回一个 Collection,而不必指定特定的 Collection。调用者仍可以使用返回值,但其具体类型仅为函数的实现所知,并不需要明确声明。

译者注:

假设 LazyMapCollection 有一个名为 compactMap 的方法,它返回 LazyCompactMapCollection 类型的集合。

extension LazyMapCollection {
  public func compactMap<U>(_ transform: @escaping (Element) -> U?)
      -> LazyCompactMapCollection<Base, U> {
    return LazyCompactMapCollection<Base, U>(/*...*/)
  }
}

LazyCompactMapCollection 类型在未来版本需要变更,如改名时,会导致之前的代码不兼容。 引入透明 Result 类型后,可以写成这个样子,返回的类型变成 opaque Collection

extension LazyMapCollection {
  public func compactMap<U>(_ transform: @escaping (Element) -> U?)
      -> opaque Collection where _.Element == U {
    return LazyCompactMapCollection<Base, U>(/*...*/)
  }
}

这样函数可以指定返回一个 Collection,而不必指定特定的 Collection,而 LazyCompactMapCollection 仅为其实现所知。

论坛动向

Saleem Abdulrasool 分享了关于 Swift 在 Windows 平台的开发进展。Awesome work! 🎉

Joe Groff 起草了一份草案,一个语法糖用于声明协议及其关联范型的类型。

// 前面的点号用来表示关联的范型类型
T: Protocol<.Type == Int> // 等价于 T: Protocol where T.Type == Int
T: Protocol<.TypeA == .TypeB> // 等价于 T: Protocol where T.TypeA == T.TypeB
T: Protocol<.Type: OtherProtocol> // 等价于 T: Protocol where T.Type: OtherProtocol

Tony AllevatoDave Abrahams 起草了关于 Swift 语言官方代码格式及规范的草案

我们建议 Swift 项目采用一组编码风格指南,并提供一种格式化工具,使用户可以根据这些指南轻松地诊断和更新。

在编写代码时,开发人员并没有达成一致的编码风格。事实上,即使是 Apple 自己在 GitHub 上的 Swift 语言项目 - 例如标准库,Foundation,Swift NIO 等,也采用了各自不同的编码风格。

Michael Ilseman 起草了关于 contiguous strings 的草案

我们收到了很多关心性能的开发者的请求,对于字符串最常见就是提供直接访问原始底层代码单元的 API 方法。而 Swift 5 的字符串默认使用 UTF-8 编码,因此我们可以将此提上日程了。

「连续字符串」是能够在恒定时间内为有效编码的 UTF-8 内容提供指针和长度的字符串。

Johannes Weiss 宣布 Swift 4.2.4 for Linux 的开发工作正式开始。

我们在 Swift 4.2.3 版本,即 2019 年 2 月份的版本修复了很多问题,现在我们宣布 Swift 4.2.4 的 Linux 版本开发工作正式开始。

尾声

Swift 团队来一位新成员! 🐶