xxxInPlace or xxxCopy?

Steven Schveighoffer schveiguy at yahoo.com
Thu Jan 20 08:05:23 PST 2011


On Thu, 20 Jan 2011 10:36:00 -0500, foobar <foo at bar.com> wrote:

> Jonathan M Davis Wrote:
>
>> On Thursday 20 January 2011 03:51:48 Trass3r wrote:
>> > If such an annotation was introduced, it should be the other way  
>> around.
>> > But imo discarding a return value should always result in a warning,
>> > the function returns something for a reason.
>>
>> Actually, there are plenty of cases where you throw away the return  
>> value. A
>> number of overloaded operators are prime examples - such as opAssign.
>> std.algorithm.sort both sorts in place _and_ returns a sorted range (so  
>> that
>> other algorithms can then know that the range is sorted). It's really  
>> quite easy
>> to get legitimate cases where throwing away the return value makes  
>> perfect
>> sense. Now, if you're dealing with a strongly pure function which  
>> throws away
>> its return value, then yes, that's definitely bug, since the only  
>> effect of the
>> function is its return value. Frequently however, that's not the case.
>>
>> Yes, you can have bugs because you didn't actually use the return value  
>> of a
>> function, but it's that necessarily uncommon to have function calls  
>> which
>> legitimately throw away their return value.
>>
>> - Jonathan M Davis
>
> You brought up an interesting idea:
> D already supports purity and as you said it doesn't make sense to  
> discard return values of such functions.
> Therefore, it makes sense that for pure functions, this would result in  
> a compile time error.

Pure functions no longer have that requirement.  You can pass mutable  
references to pure functions, which makes them weak-pure.

-Steve


More information about the Digitalmars-d mailing list