Borrow Checking Zero-Cost Cyclic Mutability
Background Ante is a low-level1 functional language built on ownership semantics and borrowing, similar to Rust. Unlike Rust, however, a core goal of Ante is to be more lenient in its borrow checker, notably by relaxing Rust’s rule that you can either alias a reference or mutate it, but never both at the same time. letmutmy_tuple=(1,2);letfirst_elem=&my_tuple.0;// error[E0506]: cannot assign to `my_tuple` because it is borrowed my_tuple=(3,4);println!("{first_elem}");I wanted to allow for code like the above while still disallowing code that would lead to dangling pointers, and I wanted to do this entirely statically in the type system.