Initialization of std.typecons.RefCounted objects
Matthias Walter
xammy at xammy.info
Thu Jul 19 08:18:23 PDT 2012
On 07/19/2012 02:16 PM, Christophe Travert wrote:
> "monarch_dodra" , dans le message (digitalmars.D:172710), a écrit :
>> One of the reason the implementation doesn't let you escape a
>> reference is that that reference may become (_unverifiably_)
>> invalid.
>
> The same applies to a dynamic array: it is undistinguishable from a
> sliced static array. More generally, as long as you allow variables on
> the stack with no escaped reference tracking, you can't ensure
> references remain valid. Even in safe code.
>
> If I want my references to remain valid, I use dynamic array and garbage
> collection. If I use Array, I accept that my references may die. Array
> that protects the validity of their references are awesome. But, IMHO,
> not at that cost.
>
>> ...That said, I see no reason for the other containers (SList,
>> I'm looking at you), not to expose references.
>
> I'm against not exposing reference, but all containers will be
> implemented with custom allocator someday.
>
>> The current work around? Copy-Extract, manipulate, re-insert.
>> Sucks.
>
> IMO, what sucks even more is that arr[0].insert(foo) compiles while it
> has no effect. arr[0] is a R-value, but applying method to R-value is
> allowed. I don't know the state of debates about forbiding to call
> non-const methods on R-values. I think this would break too much code.
As it seems the issue really should be resolved by making opIndex return
by reference and press thumbs hard that something like a 'scope ref'
will be implemented?
Furthermore, since RefCounted objects do not behave like reference types
until initialized, they *must* be initialized before anything else
happens and hence I propose to change std.container.Array like
Christophe said: Replace 'isInitialized()' checks by assertions and add
a method with which the user explicitly initialized the reference counter.
Or is there a reasonable alternative?
Best regards,
Matthias Walter
More information about the Digitalmars-d
mailing list