On Wed, 13 Mar 2013 02:45:57 -0400, dennis luehring <[email protected]>
wrote:
why not differentiate on callsite?
like
environment_usage =
{
PARENT_ENVIRONMENT,
NONE_ENVIRONMENT, // which differs from empty given environment
GIVEN_ENVIRONMENT
}
spawnProcess(process,parameter,environment_usage = PARENT_ENVIRONMENT,
environemnt = null)
it feels very wrong to put the environment "usage" type in any way into
the environment-abstraction itself (by occupying null or empty...)
+some nice helpers
spawnProcessWithParentEnvironment((process,parameter)
spawnProcessWithoutEnvironment((process,parameter)
spawnProcessWithEnvironment((process,parameter,environment=...)
woulnd't that be much clearer?
the other way could be an
spawnProcess(process,parameter,environment=use_parent_environment());
with parent-environment selector
spawnProcess(process,parameter,environment=given_environment(environment));
Hm.. I think I actually like this.
I hate to have feature creep at this point, but one kind of annoying thing
is, if you want to *add* to the current environment, it is a multi-step
process:
auto curenv = environment.toAA;
curenv["x"] = "y";
spawnProcess("helloworld", curenv);
But with something similar to Dennis' idea, we have a possible way to do
that without making a copy of the current environment into an AA and
adding:
struct EnvironmentArg
{
this(string[string] env, bool useParent=false) { this.env = env;
this.useParent = useParent;}
this(bool useParent) {this.useParent = useParent;}
string[string] env;
bool useParent;
}
spawnProcess("helloworld", EnvironmentArg(["x":"y"], true)); // use parent
environment, add x=y
spawnProcess("helloworld", EnvironmentArg(["x":"y"])); // replace
environment with x=y
spawnProcess("helloworld", EnvironmentArg(false)); // use empty environment
spawnProcess("helloworld", EnvironmentArg(true)); // use parent
environment exactly
EnvironmentArg should probably have better name, and I would recommend
some global functions that make common things, like:
EnvironmentArg emptyEnvironment() { return EnvironmentArg(null, false);}
EnvironmentArg parentEnvironment() { return EnvironmentArg(null, true);}
Like? Hate?
-Steve