DIP 45 - approval discussion
Jacob Carlborg
doob at me.com
Wed Nov 13 11:20:45 PST 2013
On 2013-11-13 17:29, Andrei Alexandrescu wrote:
> To drive the point home: I looked once more over the code and I think
> it's too complicated for what it does. It could be improved as follows.
No, I have worked on this library for several years. I don't see how it
could be less complicated for what it does. It seems you don't
understand exactly what it does.
> The key to simplification is using
>
> Object create() const;
Requires a default constructor. Not good enough.
>
> static const(TypeInfo_Class) find(in char[] classname);
>
> in the same type. The procedure would go as follows:
>
> 1. Retrieve the ClassInfo object for the class name.
>
> 2. Create a default-constructed object by calling create() against the
> object obtained at (1).
As above, requires a default constructor. Not good enough.
> 3. Cast that Object down to IDeserializable, which is an interface type
> that has methods such as deserialize(Archive).
* Requires a class to implement an interface. Not good enough.
* Requires the class to manually serialize itself. Not good enough.
A serialization library need to work with third party types you don't
have any control over.
> 4. If the cast failed, throw an exception - the object was not designed
> to be deserialized.
>
> 5. Otherwise, call deserialize against that object, passing it the archive.
As above, requires the class to manually serialize itself. Not good enough.
> Voila! No need for runtime registration - all user code has to do is
> implement the appropriate interface.
>
> I hope this both clarifies my point about factory being a sensible
> feature, and helps you improve your library.
Unfortunately it doesn't help at all. You clearly missed a lot of
features this library has.
To be able to automatically (de)serialize an object in D you need to
know its static type. That requires registering the type. Note, this is
only needed if you're serializing through a base class reference.
You'll have to do a lot better than this to convince me.
Note also that I'm not against Object.factory/create, I'm arguing for
it. Serialization is one example of why it's needed.
The biggest reasons for why it's looking like it does are:
* Can (de)serialize arbitrary types, even third party types you don't
have any control over
* It automatically (de)serializes the objects. No need to implement a
method. You can do, if you want to customize the (de)serialization
--
/Jacob Carlborg
More information about the Digitalmars-d
mailing list