On Dec 5, 2024, at 1:13 PM, Dan Cross <crossd(a)gmail.com> wrote:
And indeed these things are pretty nifty, but don't they generate
trees, and not arbitrary dags? They don't quite capture the full
generality of Morrison-style networks since it doesn't seem like
there's a way to connect process substitution fan-out with fan-in; at
least, not conveniently.
Isn’t that a limitation of the shell language(s)? It would be
easier in a 2D graphical shell but that would perhaps make
specifying the more common simpler pipelines harder!
A "linear" syntax would require *naming*. For example,
let-proc a = "foo -a", b = "bar -c -d", c = "zee" in
a.in1 = file1, a.in2 = file2, b.in1 = a.out, b.in2 = file3,
c.in1 = b.out1, c.in2 = a.out, c.out = file4;
Here names a, b & c are used to denote *processes*, with
connections specified in the next two lines. Once all the
pipes are created, processes a, b & c can be started giving
them the right endpoints in forked processes prior to execing.
Doable but not really worth it. At this point you may as well
use s-expressions!