Well ok, I'll repeat my points:
* shared_ptr + weak pointers might as well be _harder_ to use as the owned
ref proposal as introducing cycles accidentically is easier than with the
enforced single-owner rule. unique+shared+weak are 3 different pointer types,
my proposal only has two different pointer types btw.
* using reference counting to detect dangling pointers at runtime offers far
more flexibility than Rust's solution: Lifetimes only really work for
stack-like semantics as the lifetimes are lexically scoped.
* The solution really does help with multi-threading, you don't have to
"optimize away" the refcounts as it is done in the paper, you can simply
disable them in a production setting. Type based allocations can then prevent
the catastrophic remote code execution attacks. Yes, I know you cannot accept
it. The **fact** remains though that this is the same as using array indexing
into outdated array entries, which Rust and Ada also allow and nobody ever
seemed to complain about.