Old problem with performance

Weed resume755 at mail.ru
Wed Feb 25 04:30:18 PST 2009


Don пишет:
> Weed wrote:
>> Don пишет:
>>
>>>>>>> That must mean that you inherit that class only to avoid duplicating
>>>>>>> code. And that is easily done with template mixins.
>>>>>> It is possible that this polymorphism is not needed and should be
>>>>>> prohibited for operations by value. The class is ready, why it should
>>>>>> not be used and have to redo it?
>>>>>>
>>>>>> Can not think about changing when the class is ready - he could have
>>>>>> enormous complexity and hierarchy.
>>>>> This is the fundamental tradeoff at the heart of the matter.
>>>>> In D, the choice of whether an object will use polymorphism or not is
>>>>> considered a fundamental design decision.
>>>> This is awful! Much easier to give to the application programmer to
>>>> decide how it will use the derived class somewhere. Such a division
>>>> should be a basic principle of designing a complex program.
>>> Even in C++, all of your base classes should be abstract.
>>
>> Why?
> 
> See, for example,
> 
> http://www.artima.com/intv/modern.html

It did not say how that all base classes should be abstract


> 
>>
>>> If you want to move between polymorphism and non-polymorphism in C++,
>>> it's a non-trivial refactoring.
>>>
>>>
>>>>> D gets significant benefits
>>>>> from this.
>>>> Benefits:
>>>>
>>>> 1. Disappeared slicing
>>>> 2. ?
>>> That's not what I had in mind at all. I don't think slicing is such a
>>> big deal in itself; it's just a symptom.
>>>
>>
>> What do you mean?
> 
> Language complexity.
> 

We do not schoolgirls! :) Who is afraid of the complexity should use BASIC.

>>
>>>>> C++ allows you to defer the decision, but it doesn't come for
>>>>> free.
>>>> Clarify what you mean?
>>>>
>>>>> (Generally speaking, statically typed languages do force you to make
>>>>> more decisions at design time). Notice that you have little gotchas in
>>>>> C++, such as the need to declare a virtual destructor on every struct
>>>>> you think you might "someday" use polymorphically. It sticks around,
>>>>> even if it never gets used.
>>>>> One of the nice things about a D struct, compared to a C++ struct, is
>>>>> that you *know* it's simple, it never has that kind of baggage.
>>>>>
>>>>> D does choose different trade-offs from C++. If it was always the
>>>>> same,
>>>>> it'd be the same language!
>>>> There is no need to compare the structs from C++ and D. In fact, in C++
>>>> classes and structures are the same.
>>> Well, although the keywords are identical, there are two different
>>> varieties of C++ objects muddied together: PODs, and polymorphic types.
>>> You declare a type to be polymorphic by declaring a virtual function
>>> inside it. In D, you do it with the 'class' keyword.
>>>
>>>
>>>> I like D's idea of POD structs + without them you can not ensure
>>>> compatibility with C, but it is very important.
>>>>
>>>> Now we are talking about classes.
>>>>
>>>> In C++ classes with the same problems, such as what they do not have a
>>>> common base class (Object in D). Passing classes by value is not a
>>>> problem - is an advantage.
>>> Passing a polymorphic class by value rarely makes sense.
>>> You can't get (runtime) polymorphism unless you go through a pointer.
>>
>> Or reference (&). Thus, even polymorphic class on stack can be used
>> safely in C++.
> 
> Same thing. You're either not using value semantics, or not using
> polymorphism. Not both at once.

If you needed polymorphism you should use references or pointers, where
necessary performance you use value semantics. C++ allows both options,
D - no.

> 
>>
>>>> As I said earlier, the presence of pointers is also an advantage,
>>>> although they are dangerous and can lead to complex bugs.
>>> I don't think that is analagous. The issue is not primarily about with
>>> the 'danger' of passing classes by value. It's about clear separation of
>>> concepts.
>>>
>>>>> BTW, if you're concerned about performance, you'd do well to use
>>>>> compile-time polymorphism rather than run-time, when possible. D's
>>>>> metaprogramming support leaves C++ for dead.
>>>>>
>>>> I think if there was a language with all the features as in D but with
>>>> the model objects from C++, he would have won great popularity. Mainly
>>>> it would have moved C++ developers who are satisfied with the model
>>>> classes of C++ but not satisfied with the absence of other modern
>>>> features: metaprogramming, contracts, delegates, closures etc.
>>> I think D will get adequate popularity once it has a good library
>>> situation. It only needs language changes inasfaras they are necessary
>>> for library design.
>>
>> What D better than Java or C#?
> 
> I'm wasting my time here. I'll not make any further comments on this
> subject.

Okay



More information about the Digitalmars-d mailing list