funky property error with assoc array
Dan
dbdavidson at yahoo.com
Thu Nov 15 05:21:41 PST 2012
On Wednesday, 14 November 2012 at 22:07:10 UTC, Jonathan M Davis
wrote:
>
> Postblit doesn't work with const objects and there's not
> currently any way to
> make it work with const objects. So, any attempt to copy any
> element in your
> AA won't work. So, if the AA implementation has any code in it
> which requires
> copying an element (and it probably does), then a type with a
> postblit in it
> won't work if it's const.
>
Jonathan, thanks for taking the time on this and all my other
questions. Coming from C++ and trying to hammer out how to use D
I've hit this postblit many times and many ways. I agree that
postblit does not work with const - and my feeling is maybe it
should not and I hope there is a work around (for structs). For
instance:
------------
import opmix.mix;
import std.stdio;
struct Big {
char [] c ;
}
void main () {
const ( Big ) s = { " test " };
Big other = s.gdup;
writeln(other);
}
------------
> At present const and postblit don't get allow at all, and it
> sounds like the
> solution that Andrei and Walter have been cooking up will
> probably involve
I think that is fine they don't get along. postblit can not
guarantee no data is shared after the call, so they should not.
In the example here I don't access the map at all and the call
works fine in non-property form.
> adding copy constructors, but nothing has actually happened yet.
I do not see how copy constructors can help. Receiving const(T)
or const(T) ref to anything and hoping to copy it is the
challenge and doing it from a copy constructor is no easier than
a postblit. I think bearophile pointed it out best:
In practice to copy something const to something that's
not const you need a deep copy function, because inside
the array there can be other arrays that are const,
etc. Transitive const requires transitive copy, it's
easy :-)
If you have any extra cycles I would love feedback on (dup and
Global Dup) in:
https://github.com/patefacio/d-help/blob/master/doc/canonical.pdf
Actually feedback on all would be great because it establishes
how I want to work with structs and being new to D I'd like
assurances it is safe/correct.
Thanks
Dan
> postblit
> fundamentally doesn't work with const or immutable though and
> can't, because
> you can't modify const or immutable objects, and postblit
> requires you to
> alter the object. So, as far as const and immutable go,
> postblit is
> fundamentally flawed.
>
> - Jonathan M Davis
More information about the Digitalmars-d-learn
mailing list