On May 4, 2010, at 9:30 AM, Nicolas Oury wrote:
> Dear all,
>
> Is there an equivalent of commute without return value?
>
> A part of the usage of commute just want to change something without
> knowing the result.
> (For example, I want to extend a set).
>
> I know it is not very expensive but computing twice a function - if
> there is a bit of contention, but else why bother with commute? - for
> nothing is a bit sad :(.
>
> Moreover, without return value, it would be possible to ensure that
> each commute function is called at most once per transaction.
>
>
> Or I don't understand commute at all?
>
The reason commute does the work when called is that you might have
code further on in your transaction that needs to see the work of the
transaction thus far, i.e. that the set contains the things you've
added, or that a counter is non-zero. Even if those values aren't the
final ones after the transaction they in some sense include the work
thus far. Note that this isn't just about the return value. Otherwise,
you might deref a ref you have commuted and not see your own work,
which seems wrong to me. There could of course be two versions of
commute, but it adds complexity.
Rich