typeof()
Steven Schveighoffer
schveiguy at yahoo.com
Mon Oct 24 06:49:34 PDT 2011
On Sat, 22 Oct 2011 08:00:50 -0400, Jacob Carlborg <doob at me.com> wrote:
> On 2011-10-21 17:19, Steven Schveighoffer wrote:
>> On Fri, 21 Oct 2011 10:54:47 -0400, Jacob Carlborg <doob at me.com> wrote:
>>
>>> On 2011-10-21 16:17, Steven Schveighoffer wrote:
>>
>>>> This can still be done. If you have the compile-time type you can
>>>> always
>>>> forcefully generate the run time info (I would expect such a feature
>>>> when RTTI is fully developed).
>>>
>>> The thing is that you may not have access to the compile-time type,
>>> i.e. :
>>>
>>> class Base {}
>>> class Sub : Base {}
>>>
>>> Base sub = new Sub;
>>>
>>> Now the compile-time information specific for Sub is gone when
>>> accessing "sub".
>>>
>>> I have this problem with my serialization library. To workaround this
>>> the user have to register the compile-time type with the serializer to
>>> be able to (de)serialize via base class references.
>>
>> Well, .NET requires you to put an attribute on a class to allow it to be
>> serializable. And that doesn't seem to get in the way of .NET code that
>> uses serialization.
>>
>> -Steve
>
> If I can make it work without specifying an attribute on a class why
> shouldn't I. One thing less to think about. It's just in this special
> case the type needs to registered with the serializer.
Serialization requires metadata about the datatypes being serialized. If
I don't want to serialize something, why should I have to pay the bloat
cost of being *able to* when I never actually do?
I don't mind registering data types with the serializer that need to be
serialized. I know it would be nicer from a serializer library writer's
perspective to just say everything is serializable, but I'd rather have D
be efficient when it needs to be instead of trying to support every
possible use case no matter how uncommon. Again, when I serialize things,
I typically am in control of those data types. I have not yet had a case
where an *opaque* data type that needed to be serialized wasn't one that I
wrote myself.
And I wrote an entire system in C# that used remoting exclusively for
client-server communication. Every data type that needed to be used for
remoting must be serializable.
-Steve
More information about the Digitalmars-d
mailing list