Vote for std.process

Steven Schveighoffer schveiguy at yahoo.com
Fri Apr 12 08:43:27 PDT 2013


On Fri, 12 Apr 2013 04:14:15 -0400, Manu <turkeyman at gmail.com> wrote:

> On 12 April 2013 17:35, Steven Schveighoffer <schveiguy at yahoo.com> wrote:
> What would be your suggestion?  string[string] is the built-in map type.
>>  How do you pass an environment map without having some allocations?
>
>
> I'd use string[].

You mean with format "a=b"?  I suppose that's possible, though horrible to  
work with before passing in.  Plus what happens if you have ["a=b", "a=c"]  
?  AA's prevent these kinds of mistakes/contradictions.

I think someone suggested using a templated map type, that is probably a  
good idea.  Then you can provide whatever type you wish, with opIndex  
capability.

>>> toStringz is used liberally; alternatively, alloca() could allocate the
>>>  c-string's on the stack and zero terminate them there, passing a  
>>> pointer to
>>>  the stack string to the OS functions.
>
>>  This would be a lot of effort for pretty much zero gain for the  
>> majority of cases.
>
> A trivial ... mixin template (?) could wrap it up, I don't see it  
> particularly less convenient than calling toStringz().
> Perhaps there are other tools missing from phobos if this is somehow  
> hard...

alloca is hard to use, specifically because it can't be wrapped into a  
function.  I don't know how easy it would be to do with a mixin, I haven't  
tried it.

Note that toStringz likely is going to avoid reallocation or copying if  
possible -- it's very likely that a string already has a 0 after it, and  
also very likely that if it doesn't, it has room to append a 0.

I still feel that if it can't be done easily, it over-complicates code for  
very little gain.

As others have said too, this is an implementation detail.  It can be done  
as a later pull request if you feel up to making it work!

-Steve


More information about the Digitalmars-d mailing list