Am 03.02.2012, 03:38 Uhr, schrieb bearophile <bearophileh...@lycos.com>:
Marco Leise:
From the back of my head I remember thinking of this. I'm not sure if I
really needed it, or just split up the struct in two parts.
Splitting up a struct Foo is possible, but then when you have to pass it
around you need to remember to pass all its parts. And things gets more
complex if Foo has various methods that use mixed subsets of the fields.
Column-wide arrays allow you to not change the original Foo struct, to
use Foo unchanged where you don't need a column-oriented data structure,
and allow you most common usages. They allow you to split your Foo in
different ways in different parts of your program, using different
ParallelArray. They are supposed to give higher scan performance if in a
part of a program you need only a subset of the fields. Iterating only
on a subset of the fields of an array of records is a common enough task
in my D code.
Bye,
bearophile
Can you post code, that proves the claim and some figures? Pictures say
more than thousand words. As long as I think scanning performance will
hardly be influenced this just complicates things like
arr[i].x = 1; // no return by ref possible, so doesn't do what you want
or
arr = minimallyInitializedArray!(Foo[])(1_000_000);
:)
-- Marco