structs as large stack allocated objects vs structs as "pass by value" objects.
Arlon Brandy
arlon at cheruff.com
Sun Feb 23 06:36:35 PST 2014
Today I hit two problems essentially which got me thinking about
how structs are used in D by most of the code I've seen so far.
Both problems are in:
http://d.puremagic.com/issues/show_bug.cgi?id=9513
So the RedBlackTree create excessive copies of large structs via
binaryFun, that and the obvious workaround also necessitates use
of a template. It seems that people use structs to indicate one
of two things, they want a type they can pass around and return
by copy such as vectors/matrices etc. or just a way to allocate
something on the stack, usually because of the need for
deterministic resource handling or for performance reasons.
One of the great things about the D is that it allows you to
specify with the type how it should be used by choosing struct vs
class, so you can say at the same time whether the data should be
stored on the heap and whether it should be passed by copy or by
reference.
It seems to me that it might nice also to have a sub-division
within the "struct" to allow the user to indicate a struct that
should be passed by reference also like a class. It could be the
same in every way except it's always passed by reference and
people would have to write their own dup or something for when
they want to copy it.
This could also solve the problem of:
functionWithRefParams(LargeStruct.init, LargeStruct.init)
These new structs would always be passed by reference, and I
guess lvalues would be transformed to temporary stack objects by
the compiler so that they never have to be copied. To me the
"scope ref" proposal looks a bit like C++ rvalue references and I
thought this might be simpler and more useful but I don't know
it's probably not a good idea.
More information about the Digitalmars-d
mailing list