DIP 45 - approval discussion

Dmitry Olshansky dmitry.olsh at gmail.com
Wed Nov 13 11:31:36 PST 2013


13-Nov-2013 22:46, Andrei Alexandrescu пишет:
> On 11/13/13 10:41 AM, Dmitry Olshansky wrote:
>> 13-Nov-2013 13:27, Andrei Alexandrescu пишет:
>>> On 11/13/13 12:55 AM, Jacob Carlborg wrote:
>>>> On 2013-11-13 05:07, Andrei Alexandrescu wrote:
>>>>
>>>>> Then how do you figure doing this:
>>>>>
>>>>> class Streamable { ... }
>>>>> class Foo : Streamable { ... }
>>>>> class Bar : Streamable { ... }
>>>>> string className = stream.readln();
>>>>> Streamable obj = ...;
>>>>>
>>>>> How do you create obj from className, when className could be either
>>>>> "Foo" or "Bar"? In the general case there could be any number of
>>>>> classes, in different modules.
>>>>
>>>> This requires Object.factory (or equivalent) and that all subclasses
>>>> have been registered as well.
>>>
>>> With Object.factory that's taken care of already.
>>
>> I have to chime in.
>>
>> Serialization != calling default constructor by name.
>
> Of course not. It does give you access to an object with the correct
> dynamic type, and interfaces and virtual calls take care of the rest.
>

Allow me to retort, see below.
BTW the keywords here were:
_default_ and _by name_

>> Simply on the ground of "solves problem in too narrow scope for a hefty
>> coast to the user" I'd drop it.
>
> It's good. Let's keep it.

Oh, my... We've lost him :o)

Okay. Let me iterate on some facts:

1. Serialization may or may not be intrusive. There are many cases out 
there to externalize serialization (see e.g. boost serialization).
2. Want speed - avoid virtuals. Requiring that serialization be always 
done via specific virtual call harms performance.
3. Something you seem to dodge - AA lookup by fully qualified name is 
not fast nor convenient for many serialization backends.
4. Not everything needs to be serialized yet it's registered (and slows 
down lookups).
5. Forcing a pattern - every class object must be default constructible. 
Btw what factory does with these not defining this() ? Sadly the reality 
is the other way around - many interesting objects don't have valid 
default states.

Another point that is not a fact but rather a speculation.
I _think_ that the idea of having user pay beforehand for something 
simply because it may one day need it is going against D ethos. Unlike 
Java or .NET we have definite trend of catering for specific needs and 
extreme flexibility at no extra cost.

-- 
Dmitry Olshansky


More information about the Digitalmars-d mailing list