06 Dec 2019
Today Iām releasing version 0.11.0 of capnproto-rust,
with support for
async/await!
The updated RPC system works with any futures-0.3-enabled executor
(e.g. tokio, async-std) ā you just need to provide it
with objects that implement the futures::io::AsyncRead
and futures::io::AsyncWrite
traits.
The stabilization of std::future::Future
allowed me to eliminate
an annoying
optional dependecy
on futures-0.1
in the base capnp
crate, and in general the update allowed me to
delete a lot of code.
In my experience, async/await can vastly simplify concurrent programming, especially in the case where you have a single-threaded event loop and you want to share mutable data among multiple tasks.
Probably the hardest part of this update was wrapping my head around Pin<T>
.
My biggest takeaway message on that topic is:
if you get into trouble, try wrapping your object with Box::pin()
.
Curiously, doing so will give you an object that is Unpin
ā which is often
exactly what you need!