Opportunities for D
Timon Gehr via Digitalmars-d
digitalmars-d at puremagic.com
Wed Jul 9 22:56:50 PDT 2014
On 07/10/2014 07:41 AM, H. S. Teoh via Digitalmars-d wrote:
> On Thu, Jul 10, 2014 at 05:12:23AM +0200, Timon Gehr via Digitalmars-d wrote:
> [...]
>> - Lifetime parameters. (it's more future-proof if they are not
>> introduced by simple identifiers.)
>>
>> Eg.: void foo[lifetime lt](int x){ ... }
>>
>>
>> - Attaching a lifetime to a pointer, class reference, ref argument.
>>
>> Eg.: void foo[lifetime lt](int scope(lt)* x){ ...}
>> void foo[lifetime lt](scope(lt) C c){ ... }
>> void foo[lifetime lt](scope(lt) ref int x){ ... }
>> void foo[lifetime lt1,lifetime lt2](scope(lt1)(C)scope(lt2)[] a){ ... }
>>
>> (The last example talks about a slice where the array memory has
>> different lifetimes than the class instances it contains.)
> [...]
>
> This is starting to look like some parts of my 'scope' proposal in
> another part of this thread.
>
> I'm wondering if it makes sense to simplify lifetimes
(This is not complicated.)
> by tying them to lexical context
They are.
> rather than using explicit annotations?
Suitable rules can be added to automatically do some sensible thing by
default, but I don't think it makes sense to try and guess suitable
lifetimes just by staring at a function signature in the general case.
> Being able to
> specify explicit lifetimes seem a bit excessive to me, but perhaps you
> have a use case in mind that I'm not aware of?
>...
If lifetimes cannot transcend function invocations, this is a serious
limitation, don't you agree? How would you do e.g. an identity function
on a borrowed pointer type, to name a simple example?
More information about the Digitalmars-d
mailing list