Hey! James from Ferrous here. I'm super excited to see the work Fabien has done here wrt the bbqueue algorithm, and pretty excited to see Rust + Ada/Spark working together to build more reliable libraries and tools for both ecosystems :).

I definitely want to give credit to Andrea Lattuada [1] from the Systems group at ETH Zurich, who I worked with to design the algorithm behind bbqueue, as well as Simon Cooke [2], the original author of the bip-buffer algorithm we based bbqueue on (with some thread-safe changes).

Happy to answer any questions (though my knowledge of Ada/Spark is limited), especially on the algorithm or the Rust implementation. I use it super often for embedded systems, and it also allows for ridiculous performance even on PC/Desktop/Server systems.

[1]: https://twitter.com/utaal [2]: https://twitter.com/FleetingShadow

Hi James! Since you're here...

I haven't had a chance to look at bbqueue, but I recall (wow, I guess more than two years ago) difficulty designing patterns to use DMA due to aliasing concerns over the buffers given to DMA peripherals. What's the state of the art for that today? Did you folks ever find a nice abstraction?

This post also reminds me to check up on embedded async executors. Using interrupts to drive native async code is still a dream that keeps me up at night with excitement.

For embedded async executors check out Embassy. It works well and is under active development.

https://github.com/embassy-rs/embassy