The distinction between coroutines and delimited continuations is one-shot vs. multi-shot. The delimited continuation crowd use different language, but imagine an ordinary stackful asymmetric coroutine wrapped around a function call, except instead of just yield and resume, you have yield, resume, and reset. Call the coroutine, it yields from A, call resume, it yields from B, call reset, resume, it yields from B again. You can do that as often as you'd like.
This can in fact be emulated with a coroutine generator and some fancy footwork, but it's a subtly different primitive.
This can in fact be emulated with a coroutine generator and some fancy footwork, but it's a subtly different primitive.