4 ms·
https://research.swtch.com/coro https://research.swtch.com/coro
by znkr 3y ago
https://research.swtch.com/coro https://research.swtch.com/coro
- anonymoushn 3y agoThis does not contain anything about the proposed implementation of Pull, of course.
- Groxx 3y agoWouldn't this be the implementation? func Pull[V any](push func(yield func(V) bool)) (pull func() (V, bool), stop func()) { ... // snipped because it's big }
- anonymoushn 3y agoThat is an implementation in terms of primitives that are not in the proposal.
- Groxx 3y agoI don't believe so - the post is pretty much all about how you can do this right now in normal Go code. And e.g. a bit after that is a link to the "full code" which is runnable: https://go.dev/play/p/hniFxnbXTgH https://go.dev/play/p/hniFxnbXTgH Possibly you're interpreting yield as a new keyword? It's just an argument to Pull. The only not-(currently-)available-in-Go stuff that I can recall from the post is the performance optimization at the very end.
- anonymoushn 3y agoYou can read the proposal here: https://github.com/golang/go/issues/61405 https://github.com/golang/go/issues/61405. It is linked in the first paragraph of TFA. Yes, I know you can build a 100x-too-slow version of this on top of channels, but that's not the proposed extension to the language.