I like your solution further down in the Rust pull request:
programs like make could collect output using a pty rather than a pipe or temp file
This seems brilliant. The pipe mechanism is too dumb to differentiate between these cases - Unix needs a smarter pipe, and pty could be it. Maybe there could be another character in the shell for a pipe that's really a pty like '_', or a digraph like '|p'.