On Thursday, 10 July 2014 at 20:41:55 UTC, Walter Bright wrote:
On 7/10/2014 11:53 AM, Timon Gehr wrote:
Are you talking about the concept, the examples, or just the last example? What
makes it seem complicated?

I can't imagine users going to the bother of typing all that, let alone what happens when they do it wrong. Most users don't really have a good handle on what the lifetimes of their data are, so how are they going to annotate it correctly?

It doesn't need to be specified manually everywhere:

* For templates, it can be inferred.

* Local variables are either the objects _to which_ references are borrowed, in which case no annotation is necessary, or the contain returned values from functions, in which case `auto` can be used.

* Even most methods and library functions can just mark their parameters as `scope` (or whatever the syntax will be), without any mentioning of a lifetime or owner.

That leaves relatively few cases where either a reference to a passed-in parameter is returned (e.g. typical haystack-needle operations), or (more unusual), a passed in value is being kept around temporarily, e.g. as a member of a struct.

This could be reduced even more for pure functions, where the compiler can automatically allow borrowing if it's clear from the parameter and return types that no reference to the argument can be escaped.

Reply via email to