序列化与反序列化 API 的未来

主要观点:

  • 正在努力规划 Swift 中序列化与反序列化 API 的未来,Codable虽成功但不能满足一些重要需求,目标是在不牺牲易用性的前提下提高性能。
  • 需设计新 API 以突破Codable的性能瓶颈,如避免使用存在类型、优化容器解析等。
  • 借鉴 Rust 的 Serde 设计以提升性能,其使用访问者模式、避免动态类型转换等。
  • 利用宏依赖减少手动实现的需求,像 Serde 那样通过宏生成序列化代码,并在 Swift 中实现更全面的定制。
  • 采用双协议方法,既有格式无关协议又有格式特定协议,以实现兼容性和高性能。
  • 新 API 应与Codable兼容,鼓励编码器和解码器接受新协议和Codable类型。
  • 明确非目标,如聚焦常见格式、代码中定义所有内容、不支持循环对象图等。
  • 给出示例展示宏注释类型及其扩展后的代码。

关键信息:

  • 现有Codable API 存在性能问题,如使用存在类型、容器解析开销等。
  • Rust 的 Serde 设计避免了这些问题,其访问者模式可优化性能且能借用数据。
  • Swift 可借鉴 Serde 的宏设计实现更灵活的定制,同时避免编译器实现的困难。
  • 双协议方法可兼顾兼容性和高性能,格式特定协议可针对特定格式优化。
  • 新 API 要与Codable兼容,通过通用编码器和解码器实现。

重要细节:

  • JSONDecoder优化工作中发现所有容器都需提前解析负载。
  • Serde 的访问者模式可按顺序提供键值给客户端,避免中间表示。
  • Swift 中手动实现Codable较繁琐,宏可作为定制机制。
  • 不同格式的序列化需各自提供主宏。
  • 示例中展示了宏注释的BlogPost类型及其扩展后的编码和解码代码。
阅读 5
0 条评论