Re: Coroutines, goroutines
"Scott L. Burson" <[email protected]> Thu, 26 Feb 2026 00:31:34 -0800
| Newsgroups | gmane.lisp.steel-bank.devel |
|---|---|
| Message-ID | <CAF5LJ4BEd+j8xWkZMXFikiPcoMZ9YYgmWrEfxXANUonz2mi1iw@mail.gmail.com> |
On Wed, Feb 25, 2026 at 8:34 PM Anthony Green <[email protected]> wrote: > 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. > Wow, great news! I see you're using Claude Code, and you started ... yesterday!? Wow, that's freaky. I'd love to see the transcript. What size stacks are you allocating for the fibers? -- Scott > 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