I remember seeing libmill come out and being quite intrigued. It looks like this is a successor to libmill that aims to be more C-like rather than somewhat heavy-handedly porting Go conventions onto C.
Super exciting, and I sincerely hope I have some usecase to try it some day, but even after finding libmill, I have yet to really need concurrency and parallelism in my C code; usually, I just strive for highly-optimized single-threaded execution.
Either way, exciting work! You wouldn’t happen to have benchmarks (I know they’re mostly useless, but they can still be enlightening on occasion), would you?
The implementation is very similar to libmill, so the benchmarks would be likely similar: 20 million coroutines and 50 million context switches per second.
I did a quick grep through the code and you seem to be “rolling your own” context switches in i86 assembler… which if I understand correctly, means it will not port to other architectures without a chunk of assembler for them as well.
Was there a reason you didn’t use the makecontext / swapcontext libc routines?
ps: Very interesting blog, spent an enjoyable time reading and thinking about it.
You seem to be evolving towards Erlang…