I know this is probably a pretty obvious answer because I am missing something, but why would one use a pipes implementation rather than bidirectional notes directly to the core? The premise fascinates me but from my initial understanding seems to be more complicated than needed in most application structures. I could see it being very powerful in a case where you want to process in going and out going messages very differently, but how often do you see that? I have only worked on one pipes project, so it would be interesting to understand how this might be useful in other situations.
I see 4 usual cases, module talks with core, module talks with specific other module, module broadcasts to other modules, and core broadcasts to module. It would seem simple to create an architecture that used the core as the router, having system level notifications versus core level notifications without worrying about tee splits going in and out.
I suppose multicast messaging, where you need a subset of all the modules to receive a message would be a good case for pipes, though I would only see this to be very valuable over broadcast in systems with a large amount of modules.
Thanks,
-Jason