On Fri, 12 Apr 2013 09:42:43 -0400, Manu <turkey...@gmail.com> wrote:
On 12 April 2013 23:21, Lars T. Kyllingstad <pub...@kyllingen.net> wrote:
On Friday, 12 April 2013 at 07:04:23 UTC, Manu wrote:
string[string] is used in the main API to receive environment
variables;
perhaps kinda convenient, but it's impossible to supply environment
variables with loads of allocations.
Environment variables are a mapping of strings to strings. The natural
way to express such a mapping in D is with a string[string]. It
shouldn't
be necessary to allocate an AA literal, though.
That's a good point, do AA's support literals that don't allocate? You
can't even produce an array literal without it needlessly allocating.
No, because it would have to be COW.
However, a string[string] literal that uses strings only must allocate the
structure of the AA, not the strings themselves.
The compiler might be able to optimize this by figuring out how much
memory to allocate in order to contain the entire AA structure, then
create one block that has all the data in it. It still needs a new block
though, otherwise, what happens when you change an AA that was once a
literal?
I think the best path forward is to replace the functions with a templated
one that takes a indexable type as the env pointer. Then one can optimize
as much as one desires.
-Steve