Implementing future
Primitives
I've been watching the whole async-await thing for a while now, but still don't know how you'd go about creating the fundamental building blocks.
For example, something that'd be really cool is to write embedded code which can await
until a certain input reaches a desired state. That'd massively improve the readability for code on microcontrollers, but I have no idea where I'd even begin with implementing it...
Pin
Couldn't have put it better myself.
I was just bitten by this when I thought Pin<Box<str>>
would magically ensure my Box<str>
doesn't change. However because of impl<T> Unpin for Box<T>
, you can swap out the Box<str>
and leave some unsafe
code with dangling pointers.
Advanced Type-Level Shenanigans
I know Rust's type system is turing complete, but seeing crates like typenum or the previously mentioned frunk still blow my mind.
I remember reading through an article where the author implemented brainfuck at compile time and things like using traits to iterate over type-level zipper lists blew my mind.
Concurrent Data Structures
Writing concurrent data structures feels like black magic. How can you possibly reason about something when another bit of code might change pointers out from under you at any time?