On Saturday, 23 February 2013 at 11:31:21 UTC, Lars T.
Kyllingstad wrote:
It's been years in the coming, but we finally got it done. :)
The upshot is that the module has actually seen active use over
those years, both by yours truly and others, so hopefully the
worst wrinkles are already ironed out.
Pull request:
https://github.com/D-Programming-Language/phobos/pull/1151
Code:
https://github.com/kyllingstad/phobos/blob/std-process2/std/process2.d
Documentation:
http://www.kyllingen.net/code/std-process2/phobos-prerelease/std_process2.html
I hope we can get it reviewed in time for the next release.
(The wiki page indicates that both std.benchmark and std.uni
are currently being reviewed, but I fail to find any "official"
review threads on the forum. Is the wiki just out of date?)
Ok, there have been several posts about changes and additions to
wait(), and I believe Steve has answered them all, so let me just
summarise:
Non-blocking wait:
This is a good idea, and it should be simple to implement. I'll
do that.
Wait for all processes:
This would certainly be convenient, and it is simple to
implement. It would require a static __gshared Pid[int] of all
processes created by spawnProcess(), and we'd simply call wait()
on all of those.
The question, is this simple enough that we can just leave it to
the user, thereby avoiding the need for a global Pid cache? (I
think so.)
Note that Windows has built-in functionality for waiting for a
set of processes, namely WaitForMultipleObjects(). std.process2
would take advantage of that as a minor optimisation, but my
guess is that the benefit would be negligible.
Wait for any process:
This one is a problem. POSIX supports it natively, but as has
been pointed out by others, it would necessarily also affect
processes *not* created through std.process. I don't see any
obvious solution to this.
On Windows, this is also supported through
WaitForMultipleObjects(), but again, it would require a global
Pid cache.
I think this one is a no-go.
Lars