output ranges: by ref or by value?
Michel Fortin
michel.fortin at michelf.com
Fri Jan 1 12:05:29 PST 2010
On 2010-01-01 14:10:40 -0500, Jason House <jason.james.house at gmail.com> said:
>> With save() in tow, class ranges and struct ranges can be used the same
>> way. True, if someone forgets to say
>>
>> auto copy = r.save();
>>
>> and instead says:
>>
>> auto copy = r;
>>
>> the behavior will indeed be different for class ranges and struct ranges.
>
> Or if they completely forgot that bit of convention and omit creating a
> variable called save... Also, doesn't use of save degrade performance
> for structs? Or does the inliner/optimizer remove the copy variable
> altogether?
I don't think this will be a problem for the optimizer.
But I say dump save(): it's more trouble than it's worth.
I'm sure it will be a problem for most programmers, as most will learn
and test algorithms with arrays and struct ranges and not classes.
"save()" is a detail too easy to miss. The benefit of supporting
classes by asking everyone to remember adding save() seems tiny
considering you can easily create a struct wrapper if you really need
your range to be a class.
I know that the struct wrapper would probably force more copies of a
range than necessary. But there are many ways this could be alleviated.
For instance, the struct wrapper could use copy-on-write with a
reference counter to detect when a copy is necessary. So while it'd be
a little harder to design a range from a class, it'd be easier for
everyone to use ranges correctly.
--
Michel Fortin
michel.fortin at michelf.com
http://michelf.com/
More information about the Digitalmars-d
mailing list