Module show_notes::e019
source · Expand description
Let’s Clone
a Cow
!
- Date: February 28, 2017
- Subject: The final pieces of the story for (single-threaded) memory management in Rust.
- Audio
§Notes
Sometimes, we actually do need to copy types. Wouldn’t it be nice if Rust
gave us a convenient way to do that when it’s convenient, or when the cost
is low enough that the ergonomic tradeoffs are worth it? Well, perhaps
unsurprisingly, it does! The Copy
and Clone
traits, plus the Cow
type,
give us everything we need!
§Links
-
The typess
-
-
7.2.0.2 Moved and copied types:
When a local variable is used as an rvalue, the variable will be copied if its type implements
Copy
. All others are moved.
-
-
Default implementations
-
Supertraits
-
from the discussion in the reference (6.1.9 Traits):
Traits may inherit from other traits…. The syntax
Circle : Shape
means that types that implementCircle
must also have an implementation forShape
. Multiple supertraits are separated by+
, traitCircle : Shape + PartialEq { }
. In an implementation ofCircle
for a given typeT
, methods can refer toShape
methods, since the typechecker checks that any type with an implementation ofCircle
also has an implementation ofShape
… -
discussion of trait super- and subtyping in the new book (note: still to-be-written at the time this episode was published)
-
-
Marker traits
-
in the reference: 9 Special Traits
-
Previous episodes on traits:
§Sponsors
- Aleksey Pirogov
- Andreas Fischer
- Andrew Thompson
- Austin LeSure
- Ben Whitley
- Charlie Egan
- Chris Palmer
- Christopher Giffard
- Daniel Collin
- Derek Morr
- Jakub “Limeth” Hlusička
- Jordan Henderson
- Jupp Müller
- Keith Gray
- Lachlan Collins
- Luca Schmid
- Matt Rudder
- Matthew Piziak
- Max Jacobson
- Micael Bergeron
- Ovidiu Curcan
- Pascal Hertleif
- Peter Tillemans
- Philipp Keller
- Ralph Giles (“rillian”)
- Raph Levien
- reddraggone9
- Steven Murawski
- Stuart Hinson
- Tyler Harper
- Vesa Kaihlavirta
- Vlad Bezden
- William Roe
- Zaki
(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: hello@newrustacean.com
- Chris Krycho
- GitHub: chriskrycho
- Twitter: @chriskrycho
Structs§
- A non-copyable point type
- A struct which implements
Clone
but notCopy
. - A struct with identical behavior to
ANoCopyOrClonePoint
, except withCopy
.
Functions§
- The
Cow
type can wrap around other types and make them “reusable”. - What if we need a mutable reference to the wrapped type?