Just to have it in one place, the question is what phases we want to have in the evolution of the paper. Based on the assumption that we want to do async late, I put that together - we could also keep the async in from phase 1.
std::process with launcher/Initializer, without async but a simple env initializer (from char**), std::process_io, std::process_start_dir
As an alternative, I think we could split the paper up into three separate ones:
Process
Pipes
Environment
Pipes & Processes are often mentioned together, BUT there is not reason they need to be – I can use processes without pipes and I can use pipes for inter-thread communication. If we consider this code:
The only actual interaction we have between the pipe and thre process library is that std::process_io accepts and argument of type std::pstream. Now, the same is (or at least should be) true for std::fstream.
The only interaction (besides the namespace this_process is that environment implements the concept ProcessInitializer.
So the actual overlap in terms of specification is actually rather small. Now, please note that we have one async function in the process, namely async_wait.
Just to have it in one place, the question is what phases we want to have in the evolution of the paper. Based on the assumption that we want to do async late, I put that together - we could also keep the async in from phase 1.
As an alternative, I think we could split the paper up into three separate ones:
Pipes & Processes are often mentioned together, BUT there is not reason they need to be – I can use processes without pipes and I can use pipes for inter-thread communication. If we consider this code:
auto [p_in, p_out] = std::pstream(); std::process proc("foo", {}, std::process_io(p_out, {}, {}));
The only actual interaction we have between the pipe and thre process library is that
std::process_io
accepts and argument of typestd::pstream
. Now, the same is (or at least should be) true forstd::fstream
.The same goes for the
environment
:std::environment env = std::this_process::environment(); std::process proc("foo"; {}, env);
The only interaction (besides the namespace
this_process
is thatenvironment
implements the conceptProcessInitializer
.So the actual overlap in terms of specification is actually rather small. Now, please note that we have one async function in the process, namely
async_wait
.