generalized lvalues

Ziemowit Laski zlaski@apple.com
Fri Nov 19 03:56:00 GMT 2004


On 18 Nov 2004, at 17.41, Zack Weinberg wrote:

> Ziemowit Laski <zlaski@apple.com> writes:
>
>> The __builtin_gc_register approach would require that the entire GC
>> API be redesigned, and of course would be extremely inefficient, since
>> _every_ assignment in a program would have to go through a
>> write-barrier which would either do something or nothing depending on
>> whether __builtin_gc_register and/or __builtin_gc_unregister has been
>> called.
>
> I think you misunderstood what I meant it to mean - it was intended to
> be a suggestion for alternative notation producing *exactly the same
> code generation* as your proposal.  In other words, the effect of
> __builtin_gc_register would be to notify the compiler to generate
> write barriers for every assignment to ptr from then until a
> subsequent __builtin_gc_unregister.

Oh, OK.  I read __builtin_gc_register like a regular statement
(i.e., affected by control-flow), whereas you're giving it a more 
#pragma-like flavor.
>

>>   __builtin_objc_gc_strong(ptr) = object;
>
> How about
>
> __builtin_with_write_barrier (ptr = object);

Actually, a secret admirer gave me an off-list suggestion for

    __builtin_with_write_barrier(ptr, object);

which ain't bad. :-)  Note that I do need to hand both 'ptr' and 
'object' (and not just the
result of the assignment) to the write-barrier.

> Tangentially. I am not enthused by the implication that you (Apple)
> have implemented write barriers by compiler annotation of pointer
> operations.  That's not my idea of state-of-the-art GC technology.

I'm no GC maven, and so can't really argue that one with you.  I will 
say, though, that
the objective here was to introduce GC into Objective-C in a way that 
was binary compatible
with legacy ObjC programs running against the new runtime.  So our 
theoretical playing field
was not very large here.  In a way, this is very similar to our 
_setjmp()/_longjmp()-based
EH in ObjC and why we could not use the DWARF EH approach.

Actually, I'm not sure what you mean by "compiler annotation of pointer 
operations" --
the write-barriers (of which there are several flavors!) are all 
implemented as API calls into
the runtime.

--Zem



More information about the Gcc mailing list