Armanriazirustsmartpointerboxvsrcvsrefcell

//This post is related to inter mutability pattern
Here is a recap of the reasons to choose Box<T>, Rc<T>, or RefCell<T>:
Rc<T> enables multiple owners of the same data; Box<T> and RefCell<T> have single owners.
Box<T> allows immutable or mutable borrows checked at compile time; Rc<T> allows only immutable borrows checked at compile time; RefCell<T> allows immutable or mutable borrows checked at runtime.
Because RefCell<T> allows mutable borrows checked at runtime, you can mutate the value inside the RefCell<T> even when the RefCell<T> is immutable.
RefCell<T> lets us have many immutable borrows or one mutable borrow at any point in time.
Mutating the value inside an immutable value is the interior mutability pattern.
{
Similar to Rc<T>, RefCell<T> is only for use in single-threaded scenarios 
}
{
The standard library has other types that provide interior mutability,
 such as Cell<T>, which is similar except that instead of giving references to the inner value, the value is copied in and out of the Cell<T>.
 There’s also Mutex<T>, which offers interior mutability that’s safe to use across threads
}
{
Cell<T> types are not Sync
}
ArmanRiazi