by Simon Tatham [Coroutines trilogy: C preprocessor | C++20 native | general philosophy ] Introduction Structuring a large program is always a difficult job. One of the particular problems that often comes up is this: if you have a piece of code producing data, and another piece of code consuming it, which should be the caller and which should be the callee? Here is a very simple piece of run-leng