swift-evolution/proposals/0453-vector.md 在 main 分支 · swiftlang/swift-evolution

主要观点:引入新类型InlineArray,是固定大小的连续内联分配数组,类似于 C、C++和 Rust 中的数组。
关键信息

  • 提案SE-0453,作者Alejandro Alonso,评审经理Freddy Kellison-Linn,状态Accepted,路线图Approaches for fixed-size arrays,实现[swiftlang/swift#76438],评审过程(pitch)(first review)(returned for revision)(second review)(acceptance)。
  • 用于解决Array在某些场景下的不足,如堆分配、可扩展性和引用计数等问题,提供更安全、高效的有序元素列表。
  • InlineArray是一个简单的不可复制结构体,能存储其他可能不可复制的元素,条件复制取决于元素是否可复制。
  • 内存布局根据元素的步长和数量计算大小和步长,对齐与元素相同。
  • 支持字面量初始化、多种初始化方式(闭包初始化、重复初始化等),初始化时要注意元素数量匹配。
  • 不直接 conform 到Collection,避免潜在的性能问题,计划提出新协议。
  • 对于EquatableHashable等协议的 conform 暂不实现,待完全通用化后再处理。
  • C互操作时存在问题,暂未确定最佳方案。
  • 考虑了其他替代方案,如重新排序泛型参数等。
  • 之前名为Vector,后重命名为InlineArray,以更符合数学术语。
    重要细节
  • 字面量初始化时编译器要确保是InlineArray值,否则按现有规则处理,且能进行类型推断。
  • 初始化闭包可在初始化元素时抛出错误,停止初始化并抛出错误。
  • 销毁InlineArray时会进行元素级别的销毁。
  • 讨论了ExpressibleByInlineArrayLiteral协议的设计挑战。
  • 提及FixedCapacityArraySmallArray类型的概念及设计难点。
  • 对语法糖的形式进行了一些思考和讨论。
  • 感谢了参与设计过程的相关人员。
阅读 8
0 条评论