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.