Extend interior mutability (e.g. Cell) for better composition with other types.
Nobody has claimed this yet.
- Dominant language
- Markdown
- Stars
- 6.6k
- Forks
- 1.7k
- Avg merge
- 16h 14m
- Merged PRs (30d)
- 1
Description
A couple of ideas were outlined in this reddit comment.
1: Implementing the API for Cell<Rc<T>> and Cell<Vec<T>>: requires a lot of unsafe.
There might be a way to provide mutable access to the contents of Cell via Cell::with_mut(|mut_ref| {...}) and have the compiler prove that the closure cannot reach the Cell::with_mut entry point, but it's not something we can express right now.
2: Turning &mut T into multiple aliases with Cell semantics:
impl<T: Copy> Cell<T> {
fn from_mut(x: &mut T) -> &Cell<T> {
unsafe { mem::transmute(x) }
}
}
I am not certain this is UB-free, but if it isn't, I still expect @glaebhoerl's CellRef<'a, T> suggestion to work.
cc @nikomatsakis
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reading the linked Reddit discussion and the two proposed directions in this issue: APIs for Cell<Rc> and Cell<Vec>, and converting &mut T into Cell semantics. Review the safety concerns around unsafe, Cell::with_mut, and CellRef. The work is complete only when a technically sound, agreed-upon API direction is specified.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- compilers
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100