Expose more runtime internals so that users can implement custom synchronization APIs.
As an example, take atomic-wait. This crate provides a futuex-like api for all modern operating systems, and has a few million recent downloads on crates.io. Unfortunately, testing code that uses this crate is difficult with shuttle. While it is possible to replicate something like the functionality of a futex using a mutex and condvar, I don't think the runtime ordering effects are exactly identical. I'd prefer to be able to implement the futex functionality myself with thread::switch and similar, so I can be confident that my tests are modeling the actual semantics of my synchronization primitives.
Expose more runtime internals so that users can implement custom synchronization APIs.
As an example, take atomic-wait. This crate provides a futuex-like api for all modern operating systems, and has a few million recent downloads on crates.io. Unfortunately, testing code that uses this crate is difficult with shuttle. While it is possible to replicate something like the functionality of a futex using a mutex and condvar, I don't think the runtime ordering effects are exactly identical. I'd prefer to be able to implement the futex functionality myself with
thread::switchand similar, so I can be confident that my tests are modeling the actual semantics of my synchronization primitives.