On Saturday, 4 October 2014 at 19:22:45 UTC, Marc Schütz wrote:
On Saturday, 4 October 2014 at 18:13:03 UTC, Ivan Timokhin
wrote:
Also, would it really make much sense to track the owner
further than the assignment of a function's return value? That
seems to complicate things a lot by adding a hidden attribute
to a variable that is not only invisible at the declaration
(even though the full type is spelled out), but, in fact,
cannot be specified explicitly (because there's no syntax for
that, now that scope with owners is limited to function
signatures).
How about this:
---
scope(string) haystack, needle;
// next assignment is okay, because `s` is guaranteed not
to outlive
// `haystack`.
scope(string) s = findSubstring(haystack, needle);
// type of `s` is now scope(string), no additional
information
// attached
// so the next assignment is disallowed:
//needle = s; // error!
---
This could be unnecessarily limiting, but would it really
cause much trouble?
I think you're right, I thought about this after I replied to
you. It would be the logical next step. On the other hand, I
wouldn't want to lose const borrowing, because it turned out to
be a requirement for safe moving. But I think it can still be
tracked internally (owner tracking is necessary for
implementation anyway).
Owner tracking is then completely limited to one expression. I
think this will simplify the implementation a lot. Besides, it
has precedences: uniqueness is also only tracked inside an
expression, AFAIK.