[−][src]Module show_notes::e016
RefCell
s and code smells
- Date: July 23, 2016
- Subject: Digging deeper on smart pointers and mutability with
Cell
andRefCell
. - Audio
Notes
What are the Cell
and RefCell
types, and when should we use them?
Today, we follow up both the detailed discussion of smart pointers in e015 and the closely related discussion in Interview 2 with Raph Levien, and look at two types you need to have a good idea how to deal with if you want to use these smart pointer types more ergonomically---that is, how to use them without feeling like you're beating your head against a wall!
The descriptions of the code below are minimal; see the inline comments in the source for the actual informative discussion.
A comment on the code samples
Note that in several cases below we use &[]
to borrow a reference to a
slice, rather than requiring this to pass a reference to a Vec
specifically. Making the first argument be of type
&Vec<RefCell<SimpleNonCopyable>>
would also work, but would be more
restrictive in what it could and couldn't accept. Since Vec
implements
Deref
to automatically convert to slices, this works just fine, and is
more general. This is how you should usually write function signatures which
operate on reference to vectors (and likewise for other types which can
dereference to slices). We'll talk about this more in a future episode!
Links
- Rust 1.10
- blog post
- full release notes
- cdylib
- RFC: text | discussion
- implementation
- rustup 0.3.0 release
- Integer32 (Carol Nichols' and Jake Goulding's new Rust consultancy)
- IntelliJ Rust
- Tango: source | talk
Cell
andRefCell
:- Cell Types in The Rust Programming Language
- Standard library:
std::cell
module docs (detailed explanation, complementary to the book)Cell<T>
docs (atstd::cell::Cell
)RefCell<T>
docs (atstc::cell::RefCell
)
Sponsors
- Aleksey Pirogov
- Chris Palmer
- Daniel Collin
- Derek Morr
- Doug Reeves
- Eric Fulmer
- Hamza Sheikh
- Jakub "Limeth" Hlusička
- Keith Gray
- Lachlan Collins
- Leif Arne Storset
- Luca Schmid
- Micael Bergeron
- Michael Clayton
- Pascal Hertleif
- Ralph Giles ("rillian")
- Ralph "FriarTech" Loizzo
- Raph Levien
- reddraggone9
- Ryan Ollos
- Vesa Kaihlavirta
- William Roe
(Thanks to the couple people donating who opted out of the reward tier, as well. You know who you are!)
Become a sponsor
Contact
- New Rustacean:
- Twitter: @newrustacean
- Email: [email protected]
- Chris Krycho
- GitHub: chriskrycho
- Twitter: @chriskrycho
Structs
SimpleContainer | A container showing a type where |
SimpleNonCopyable | A container showing where |
Functions
add_to_each_string | Demonstrate interior mutability with |
demonstrate_need_for_cell | Demonstrate how you need |
double_cell | Operate mutably on the contenets of an immutable reference to a |