Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

is this like an implementation of Go in the C language?


No. Go uses stackful coroutines. This is more like an implementation of async/await in C.


Interesting, does the async/await pattern always imply stackless then? Might you or someone else have any resources you could share on stackless vs stackful coroutines?


kinda; using a keyword instead of library call for suspend is done primarily to constrain suspension to a single stack frame (i.e. the calling continuation is not first class, same as for return), hence it is used to enforce the stackless-ness.


The catch is brutal. This looks like an implementation of goto in C.


How so? The decision between a stackful and a stackless coroutine is precisely that, a decision. The tradeoff is that storing all registers/stack variables and processor state before a yield and restoring it after a resume is a non-trivial cost. For some applications, that cost may not matter, but for others, it may be critical.

Also, this is less like a goto, and more like a setjmp/longjmp.


A stack is an over approximation of the closure of the continuation.

You want something to create a union of all the relevant local variables of each state. Doing this efficiently is non compositional and so requires language support.


aren't most control structures just sugar for goto?


Honestly I'm not sure how to define "control" when dealing with languages in the abstract and not just compilation to conventional machine code.

Many control operators involve continuations with closures, and cannot be desugared to goto as such.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: