Scope Containers

bitwise bitwise.pvt at gmail.com
Sun Mar 10 15:12:03 UTC 2019


On Sunday, 10 March 2019 at 12:06:10 UTC, Atila Neves wrote:
>
> I wrote this:
>
> https://github.com/atilaneves/automem/blob/master/source/automem/vector.d

I'm confused by the use of scope. For example, what effect does 
scope have here?

this(this) scope { ... }

I don't see any ranges/iterators in that class either, which is 
what's at issue for me.

At present, it seems impossible to create a memory-safe container 
that supports iterators or ranges in D, unless it's entirely GC.

The best attempt I've seen is std.Array, which uses a 
ref-counted/pointer-to-pointer payload to make sure any ranges 
that were given out can see the changes to the payload. Isn't it 
specified that a struct should be moveable in D though? So as 
soon as you memcpy an std.Array everything starts 
exploding/double-deleting. Also, this seems like it would apply 
to *any* library based ref-counted implementation. So it seems 
like scope is the last hope for creating an @safe @nogc container 
that can give out ranges/iterators. Even adding a 
move-constructor to D seems like a no-go since it's expected that 
structs can be memcpy'ed.

Am I wrong about this?

Thanks


More information about the Digitalmars-d mailing list