У меня они не соотнеслись ни с преобразованием в конечный автомат, ни с continuation-passing style. Потому что как-то слишком много движущихся частей.
В Python всё кажется сильно проще, например: базовый блок — генератор, а это объект с методом next. Вот и автомат. Ну, ещё send есть. На самом деле там тоже дебри, но они как-то очень красиво спрятаны и не протекают.
В Kotlin тоже неплохо, но там начинается путаница из-за CoroutineScope/Context.
А в плюсах надо всегда семь или больше штук реализовывать, некоторые тривиально. Но из каких соображений они возникли, как написать свой event loop (хотя бы однопоточный) — это всё в картинку пока не собралось.