- From: Bert Frees <bertfrees@gmail.com>
- Date: Sat, 30 May 2020 11:22:35 +0200
- To: XProc Dev <xproc-dev@w3.org>
- Cc: "Henry S. Thompson" <ht@inf.ed.ac.uk>
- Message-ID: <CAOxiMsScP5WNdzdsHxwb3_E+zS6MzUA4WC9+6ymZyavMwR9FMQ@mail.gmail.com>
Thank you Henry. Everything you say makes sense. Just one addition: I would argue that the perspective of the user is more important than the perspective of the implementer. The user of a (high-level) language expects the compiler and/or runtime to do certain optimizations. He wants his pipeline to be executed as efficiently as possible. Attributes such as the one I proposed can help with doing those optimizations. You gave the example of an implementation strategy that makes use of multi-threading to let the order of execution be automatically determined. It isn't hard to come up with a variant of this strategy that, instead of waiting for input to arrive and then eagerly get to work, waits until output is actually requested before doing anything. This would also reduce the size of the buffers needed. Thanks, Bert Op za 30 mei 2020 om 00:27 schreef Henry S. Thompson <ht@inf.ed.ac.uk>: > A minor note: The key thing about the architecture, from my perspective > as a (former) implementer and (occasional) user is that neither party > has to understand (or can depend) on the order in which anything > happens. In particular, it's _perfectly_ OK as an implementation > strategy to simply start _every_ step instance in the pipeline(s) > running, in whatever order you and the underlying thread / processor > implementation find convenient, and everything will be just fine. > Almost all of them will block waiting for input, and wake up and get to > work when and only when there is any real work to do. > > There's also a minor consequence of this which actually simplifies step > implementation: _nothing_ in step instance initialisation can assume > that _any_ other step instance has been initialised before it. >
Received on Saturday, 30 May 2020 09:23:01 UTC