Interesting questions. I haven't come to exception handling and deeper optimization yet, so I cannot answer them. But the ownership model, especially at compile-time, sounds great and that's what I'm working on right now. In principle, it should be able to handle anything holding an address to allocated memory.
Threading might be another issue, specially if ownership is runtime in some cases. And event driven (network servers, GUI apps) vs batch apps is another. With short lived events triggered
If ownership is fully compiletime, to me it reads as formalization/systematic approach of common sense optimizing away refcounting.
If ownership is runtime (or can devolve to it if not solved compiletime), I don't see the point. Either update one variable atomically or the other.
For strings there is also a case that when a string function sometimes returns a parameter unmodified, and sometimes not (e.g. substitution value not found ) , then owner can't be statically determined, but does the function have some runtime ability to do this? Or just let refcounting without ownership handle it?
The page is a bit thin on details IMHO, and for FPC those would be interesting, since the default case that optimizes away locally used expressions applies less.