Ante 是一种低级函数式编程语言,其设计采用了类似于 Rust 的所有权语义。然而,它的目标是更加宽松,允许共享可变性——即多个引用可以同时访问并修改相同的数据。这一设计选择旨在简化诸如观察者模式等常见模式,并使与 C# 等语言的互操作更加直接,同时仍能防止悬垂指针等内存安全问题。
Ante 编程语言是一种具有独特所有权语义的低级函数式语言。
这一方法的核心机制是“形状稳定性”。开发者认为,许多变动本质上是安全的,因为它们不会改变数据的底层结构(或形状)。例如,更新元组中的字符串不会使指向该元组的其他引用失效,因为其在内存中的布局保持不变。相比之下,修改向量可能会导致重新分配,从而使指向其元素的任何现有引用变成悬垂引用。通过区分稳定形状(变动保留引用有效性)和不稳定位置(如从集合类型中返回的位置),Ante 可以允许传统借用检查器拒绝的某些形式的别名变动。
为了在静态层面实现这一点,Ante 使用“位置”(places)而非标准的生命周期。一个位置代表引用借用的特定事物集合,而不是抽象的代码区域。不稳定位置用特殊指示符(`!`)标记,这意味着对该特定位置的任何变动都会使所有引用它的变量失效。虽然这允许复杂的数据流和循环可变性,而无需手动变通或强制使用向量索引,但它也引入了不同的权衡。批评者指出,由于主要侧重于通过形状稳定性来防止引用错误,该语言可能会将一些责任转移到程序员身上,要求其手动强制执行更高层级的约束,例如避免多线程环境中的通用数据竞争。