Sigh, I was hoping this would be useful. In Zephyr, most objects have linked list pointers, where the empty list is the pointer pointing back on itself. This fairly aggressively makes them unfriendly with Rust's move semantics. I'd hoped to improve this by using an atomic paired with the object for two purposes: 1. delay the initialization until first use, and 2. detect moves and panic, rather than ub. And, it mostly does work well, especially for objects that are static allocated, or even stuck in an allocated thing. But, then, it really fails badly, with my bounded channel implementation, where the first thing I do is insert all of the objects into a free list implemented with a Zephyr `k_queue`. This is before that first move from the constructor to where the object is going to go.