主要观点:引入新类型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
,避免潜在的性能问题,计划提出新协议。 - 对于
Equatable
、Hashable
等协议的 conform 暂不实现,待完全通用化后再处理。 - 与
C
互操作时存在问题,暂未确定最佳方案。 - 考虑了其他替代方案,如重新排序泛型参数等。
- 之前名为
Vector
,后重命名为InlineArray
,以更符合数学术语。
重要细节: - 字面量初始化时编译器要确保是
InlineArray
值,否则按现有规则处理,且能进行类型推断。 - 初始化闭包可在初始化元素时抛出错误,停止初始化并抛出错误。
- 销毁
InlineArray
时会进行元素级别的销毁。 - 讨论了
ExpressibleByInlineArrayLiteral
协议的设计挑战。 - 提及
FixedCapacityArray
和SmallArray
类型的概念及设计难点。 - 对语法糖的形式进行了一些思考和讨论。
- 感谢了参与设计过程的相关人员。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。