Formal Review of std.process

Martin Nowak code at dawg.eu
Sat Apr 13 13:16:09 PDT 2013


The templated pipeProcessImpl only contains a single unshared line of 
code [1]. It might be worthwhile to reduce the amount of duplication by 
using delegates instead of alias parameters.

pipeProcess
{
     return pipeProcessImpl(
         (SpawnFuncArgs args) => spawnProcess(program, args),
         redirectFlags, env, config);
}

pipeShell
{
     return pipeProcessImpl(
         (SpawnFuncArgs args) => spawnShell(command, args),
         redirectFlags, env, config);
}

private alias TypeTuple!(File, File, File, const string[string], Config) 
SpawnFuncArgs;

private ProcessPipes pipeProcessImpl(scope Pid delegate(SpawnFuncArgs) 
spawnFunc,
                                      Redirect redirectFlags,
                                      const string[string] env = null,
                                      Config config = Config.none)
{
     // ... shared code
     auto pid = spawnFunc(childStdin, childStdout, childStderr, env, 
config);
}

[1]: 
https://github.com/kyllingstad/phobos/blob/994437169f20907f30515cfef54538710f3fc1fe/std/process.d#L1636


More information about the Digitalmars-d mailing list