compiler support added for precise GC

Timon Gehr timon.gehr at gmx.ch
Mon Apr 16 13:42:18 PDT 2012


On 04/16/2012 08:42 PM, Jacob Carlborg wrote:
> On 2012-04-16 18:53, Walter Bright wrote:
>> On 4/16/2012 9:40 AM, Jacob Carlborg wrote:
>>> Regardless of how the runtime reflection is generated, by a library or
>>> the
>>> compiler, it needs to be available to all types.
>>
>> Why?
>>
>> (I can see the point for a dynamic language, but not a static one.)
>
> The standard example that comes back is serialization. That can be done
> without support for runtime reflection but not as good as with the
> support. As far as I know it's impossible to serialize through a base
> class reference without registering the subtype with the serializer, if
> runtime reflection isn't available.
>

This could be fixed by introducing a simple language feature that allows 
a supertype to specify mixin templates that are 'inherited' by all subtypes.

Eg:

interface ISerializable {
     ubyte[] serialize();

     super mixin Serialize;
}

class A: ISerializable {
     int x;
     int y;
}

class B: A{
     A foo;
     @nonserialized B cache;
}

Would be lowered to:

interface ISerializable {
     ubyte[] serialize();

     mixin Serialize;
}

class A: ISerializable {
     int x;
     int y;

     mixin Serialize;
}

class B: A{
     A foo;
     @nonserialized B cache;

     mixin Serialize;
}

This way, all subclasses automatically register themselves.

I think this would be very useful in general. I often do this manually.



More information about the Digitalmars-d mailing list