I've not yet had a chance to read through this, but I have no doubt people on this forum will be interested.
Hello, great paper, very understandable even without formal CS education! I got a bit confused in section 3 about the modified state machine for protectors.
What is the difference between the Reserved (conflicted) state and the Frozen state? Just from its state transitions it looks the same to me. All reads are allowed, while all writes are UB. Couldn't a foreign read on a protected Reserved just transition to Frozen?
Why do protected mutable references get the Reserved state instead of Unique? I understand the advantage of the Reserved state for regular code, but not accross function boundaries.
In example 14 it is explained that special care was taken to ensure that any foreign access (read or write) to a protected Reserved would be UB, if the protected Reserved does a write. Why isn't a foreing access always UB, no matter if a write is being done? I can't really imagine useful code that would be allowed by this not being UB.
The conflicted flag has no effect once the protector is removed. There is more explanation at Making sure you're not a bot!
Thank you for that article. That makes a lot of sense. I thought i had read all of Neven's tree borrows articles, but apparently missed this one.