On Sunday, 9 December 2012 at 22:10:50 UTC, Jonathan M Davis
wrote:
On Sunday, December 09, 2012 13:41:46 Jonathan M Davis wrote:
Declaring a struct which contains reference types and does a
deep copy with
postblit obviously incurs a performance cost, but it's up to
the programmer
who declared it to decide whether that's worth it or not. I
see no reason
for the language to try and disallow that. That's overly
restrictive.
Not to mention, we've already discussed fixing current features
so that they
stop disallowing certain idioms. For instance, in order to make
it so that
caching and lazy loading and whatnot are not disallowed in
classes due to
issues with const, we've talked about removing toString,
opEquals, toHash, and
opCmp from Object. Then the programmer can decide whether they
want to use
const or not and we'd no longer be disallowing the idioms that
are prevented
by forcing const on Object.
You're basically suggesting that we disallow any idiom which
requires that
structs be deep copied, and I think that that's bad policy.
It's one thing to
encourage programmers to not write such structs and to use
other idioms like
COW or reference counting. It's another thing entirely to
disallow them. It's
one of C++'s prime tenets to try and not force the programmer
to program in a
certain way or in a certain paradigm, and I think that D should
do the same.
If we want to encourage certain idioms and discourage others,
fine. But
outright disallowing them is a bad idea IMHO.
- Jonathan M Davis
I can't agree more