The returner is a kernel object that was introduced relatively late in the Gnosis design. Messages to the returner are merely returned intact. This can be used to permute keys in the general key slots. Its original motivation was to provide a hack by which a server could return a response and become available for the next request even if the reply key for the current request was not a resume key. (The reply key here is the last key passed in a request. It is the key to which the response is to be sent. In common cases it is a resume key that is generated on the fly by the call mechanism. Other ways of invoking a server can provide reply keys that are not resume keys.) Kernel objects, such as the returner, never block when they reply to a request even when the reply key is a start key to a busy domain. Thus if a server replies to a request by returning to the returner, passing the 3 keys of the of the reply plus the reply key, then the returner will deliver this reply to the requestor, if the reply key is a resume key. Otherwise the reply is discarded..Moral: provide a resume key as the reply key (last argument key) no matter how you invoke a server, if you want a response.

Shap proposes that an exit block explicitly devote a bit to specifying whether, on key invocation, to tolerate being blocked by the logical state of the recipient. In the current design invoking a start key blocks the invoker until the domain is available whereas invoking a resume key is guaranteed to be prompt—i.e. require no actions beyond what the kernel can carry out. The returner was invented to give a program an easy way guard against being blocked when invoking a key that should be a resume key. An exit block bit would be explicit and generally lighter weight. I would keep the returner, I like it. Presumably invocations of resume keys would block if the bit were not set, and start key invocations would be nullified if the bit were set and the invokee were not available. In general the invoker must not be notified of a discarded message for it is a counter-flow signal.

This new bit in the exit block would supplant the original reason for the returner but I want the returner anyway now.

The new bit allows these useful new patterns

Perhaps the biggest benefit is not having to understand paragraphs such as the first of this page.