Old problem with performance
Weed
resume755 at mail.ru
Sun Feb 8 20:35:04 PST 2009
Christopher Wright пишет:
> Weed wrote:
>> Christopher Wright пишет:
>>> Weed wrote:
>>>> (Has started here:
>>>> http://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D&article_id=81359)
>>>>
>>>>
>>>>
>>>> To me still does not give rest performance of classes (in comparison
>>>> with C++ or with D structs)
>>> On my system, your struct example averaged 0.36 seconds, and your class
>>> example averaged 0.38 seconds.
>>>
>>> Your benchmark is flawed in three ways:
>>> 1. You're timing allocations in the class example. Use opAddAssign to
>>> avoid it.
>>
>> Earlier I proved that it is impossible. For example here in such
>> expression:
>> ==============
>> space_ship_1.calculatePathTo("Moon").getCheckpoint(3).getCoords;
>>
>> In this example we create a temporary class "path", create temporary
>> class "checkpoint" and we take coords of checkpoint of this path. It is
>> not expedient to us to store all this path and checkpoint because it is
>> vary.
>> ==============
>
> In that example, you can use structs instead of classes. Your response
> to that is that structs do not participate in polymorphism.
>
> There was a suggestion elsewhere like this:
> interface IPathResolver
> {
> Checkpoint getCheckpoint(Path* path, int i);
> }
>
> struct Path
> {
> char[] path;
> // any other info you need....
> IPathResolver resolver;
> Checkpoint getCheckpoint(int value)
> {
> return resolver.getCheckpoint(this, value);
> }
> }
>
> This way, you only allocate once for each type you need, you have
> polymorphism, and you can put stuff on the stack for quick access.
And if I need some different such combinations? For each it is necessary
to write such 8-10 lines? This is terrible!
More information about the Digitalmars-d
mailing list