Some random comments:

I like that it applies to all kinds of references, not just `ref`. Do you want it to apply to structures with reference members, too? What about value types in general?

About `out!`: I think this should be placed next to the escaping parameter for consistency (i.e. `out!p2 T* p1` in your example), because all other annotations are already at the parameters that escape.

Instead of `noscope`, I suggest `static`, because that's already a keyword and will not clash with existing code. (Note that this can the apply to `this`, and `static` then needs to be placed behind the function to distinguish it from a static method declaration, where it appears in front.)

It's a really interesting idea to mark distinguish the different ways of escaping. This might have further implications, in particular in relation to purity.

How does this proposal interact with `scope`? It seems you want the compiler to track lifetimes for all reference parameters, even those not marked as `scope`. At least your example doesn't use `scope`.

Apart from that, I'll have to think about a few things. For example, I don't know yet whether and how a safe owning type/RC can be implemented with this.

Reply via email to