
On Tue, 2008-04-22 at 15:19 -0700, Simon Marlow wrote:
I've made some improvements to System.Process that I'd like to get feedback on. Everything so far is backwards compatible in the sense that I've only added to the API - everything that was there before is still available, with the same semantics (except where bugs have been fixed).
Haddock for the proposed new System.Process:
http://darcs.haskell.org/~simonmar/process/System-Process.html
Looks good.
Summary of changes:
Tue Apr 22 15:02:16 PDT 2008 Simon Marlow
* Overhall System.Process - fix #1780: pipes created by runInteractiveProcess are set close-on-exec by default
- add a new, more general, form of process creation: createProcess Each of stdin, stdout and stderr may individually be taken from existing Handles or attached to new pipes. Also it has a nicer API.
Yay!
- add readProcess from Don Stewart's newpopen package. This function behaves like C's popen().
I'll double check that we can use this in Cabal where we currently have to implement something similar using #ifdef, doing it differntly for ghc vs nhc/hugs due to different compilers implementing different apis and the ghc api not being usable without pre-emptive threads (iirc). Our current function is :: FilePath -> [String] -> IO (String, ExitCode) So that connects stdin to /dev/null, I expect we can implement that in terms of the new createProcess.
- Move System.Cmd.{system,rawSystem} into System.Process. Later we can depecate System.Cmd.
Do you suppose we can rename the system/rawSystem given that we're already moving them from one module to another? Just off the top of my head, how about "runShellCommand" & "runProgram", better suggestions welcome.
- Don't use O_NONBLOCK for pipes, as it can confuse the process attached to the pipe (requires a fix to GHC.Handle in the base package).
- move the tests from the GHC testsuite into the package itself, and add a couple more
- bump the version to 2.0