Hacker News new | ask | show | jobs
by dbaupp 3914 days ago
The compiler has no concept of what a thread is anywhere, even in the standard library. The safety is imposed by careful bounds on exactly the right functions: those that interact/create new threads, e.g. std::thread::spawn has signature:

  pub fn spawn<F, T>(f: F) -> JoinHandle<T>
      where F: Send + 'static + FnOnce() -> T, T: Send + 'static
Other than implementations of `Send`/`Sync` themselves, this is essentially the only function in std that needs to bound by them.

The same approach can be used in a kernel context, e.g. place bounds on the functions that create (or, at least, initialise interaction between) concurrently executing pieces of code.

1 comments

Ah, so Rust does represent thread semantics through types? It's curious that the authors don't mention that in their proposal.
Yeah, everything is driven by implementing (or not, as appropriate) Send and Sync for types.