I thin the part that you missed is that a MutexGuard is an owned value. That’s the gain of having a mutex guard projection, the projection is an owned type which keeps the lock, well, locked. Having a field projection return a reference is no use because… that already works fine today, it’s deref. But that does not work if you need an owned reference. Same for field projecting everything else e.g. an arc.
> A field in the RenderState should not have a guard unless it has its own mutex!
I don’t agree with that. The original mutex gives access to the field via its guard, nothing wrong with keeping the guard and the field and getting rid of the stricture around it (for the purpose of access). It’s not like mutex guards have a static identity relationship to their mutex.