Re: Coroutines, goroutines
Anthony Green <[email protected]> Wed, 25 Feb 2026 23:34:17 -0500
| Newsgroups | gmane.lisp.steel-bank.devel |
|---|---|
| Message-ID | <CACxje59-uHsQR58A7BdzWrMS3=2wKyJNbee81iHA6317OY4G_A@mail.gmail.com> |
Check out the fibers branch of my sbcl fork. https://github.com/atgreen/sbcl/tree/fibers It is working, and I am hoping to submit this for review soon. It just needs a few more tweaks. Some docs here: https://github.com/atgreen/sbcl/blob/e106c1cbcaae98ec7893d68d1f39675d10b5d882/doc/manual/threading.texinfo#L275 AG On Wed, Feb 25, 2026 at 10:55 PM Scott L. Burson <[email protected]> wrote: > Hi all, > > I tried to contact Kartik Singh directly about this, but got a "you are > not an authorized sender" bounce. Since Kartik is on this list, I assume > this will get through. The discussion is likely of wider interest anyway. > > I've seen the video of Kartik's lightning talk > <https://www.youtube.com/watch?v=S2nVKfYJykw> at ELS 2024 titled "Proof > of Concept: Coroutines in SBCL". He ported over some old CMUCL threading > support, without the scheduler. But the work is still sitting in a GitHub > fork and doesn't seem to have gone anywhere. I would like to encourage, > support, and if needed, participate in getting it ready for general use and > into SBCL, at least as a contrib module, if that's possible. > > I do think it should have a scheduler, though. I will take the liberty of > quoting Pascal Costanza (from a message to the Common Lisp Pro mailing > list, [email protected], 2025-12-28): > > Something that is very relevant to understand in the Go context: Go >> channels are not based on pthreads, but they are based around Go’s own >> tasking model (which of course are in turn based on pthreads, but’s not >> that relevant). Go’s tasking model is an alternative to previous async >> programming models, where async code and sync code had to be written in >> different programming styles - that made such code very difficult to write, >> read and refactor. (I believe >> https://journal.stuffwithstuff.com/2015/02/01/what-color-is-your-function/ is >> the text that made that insight popular.) >> >> In Go, async code looks exactly the same as sync code, and you don’t even >> have to think about that distinction anymore. This is achieved by ensuring >> that all potentially blocking operations are effectively not blocking, but >> instead play nicely with the work-stealing scheduler that handles Go’s >> tasking model. So, for example, if a task tries to take a lock on a mutex, >> and that is currently not possible, the task gets swapped out and replaced >> by a different task that can continue its execution. This integration >> exists for all kinds of potentially blocking operations, including channels. >> >> With pthreads, a lock / mailbox / etc. that blocks can have the >> corresponding pthread replaced by another one, but that is much more >> expensive. Go’s tasks are handled completely in user space, not in kernel >> space. (And work stealing gives a number of very beneficial guarantees as >> well.) >> >> This nuance may or may not matter in your application, but it’s worth >> pointing out nonetheless. >> >> It would be really nice if Common Lisp had this as well, in place of a >> pthreads-based model, because it would solve a lot of issues in a very >> elegant way... >> > > I do see people on Hacker News, Reddit, and elsewhere saying that they > would love to use CL, but it needs to have lightweight threads in order to > work for their use cases. > > I wonder as well if it might be possible, while such code is being > touched, to work in firstclass delimited continuations. These would be for > people writing solvers, such as Screamer. (Yes, I'm aware of CL-Cont > <https://gitlab.common-lisp.net/cl-cont/cl-cont>; but it heap-allocates > every continuation.) Something to think about, anyway. > > So — what do the SBCL team think about this? Is it something you would > support, or even help out with? > > And for Kartik — how much work do you think remains to get coroutine > functionality into a generally usable state? > > -- Scott > > _______________________________________________ > Sbcl-devel mailing list > [email protected] > https://lists.sourceforge.net/lists/listinfo/sbcl-devel > _______________________________________________ Sbcl-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/sbcl-devel