RFC: reference counted Throwable
Ola Fosheim Grostad via Digitalmars-d
digitalmars-d at puremagic.com
Sat Sep 20 03:00:41 PDT 2014
On Saturday, 20 September 2014 at 08:39:41 UTC, Walter Bright
wrote:
>> E.g. TSX is coming even if there is
>> a bug in lower end CPUs. Suggest making performance oriented
>> prototypes on
>> different architectures before concluding.
>
> I'd love to see it.
A 128 bit CAS instruction is at about 19-25 cycles, but a
transaction on the other hand can by using xbegin/xend cover both
refcounting, locking and rollback of multiple objects so you need
cooperation from code gen. Basically all changes between
xbegin/xend are kept in cache and written to memory upon success.
On failure you have a slower fallback.
I don't know what that leads to in amortized cost reduction, but
30-70% might be possible if it is done right.
> As soon as you pass a reference to a function, that all goes
> out the window. There's a reason why Rust has invested so much
> effort in the notion of a "borrowed" pointer.
The pure @nogc crowd care less about safety, but you should be
able to track this using dataflow?
>> 3. True, but you can keep the refcount at a negative offset
>> for new-based
>> allocations. Besides it only affects those who do @nogc and
>> they should know
>> what they are doing.
>
> If this is so simple, why doesn't everyone do it?
Never said performance and thread safe RC was easy. It is
probably difficult to get below 10 cycles for inc/dec pairs even
with excellent code gen...? And probably closer to 40 cycles for
regular code gen. Just guessing.
More information about the Digitalmars-d
mailing list