6 ms·
What does that mean? Is it equivalent to the pointer starting out (say) pointing to the first letter of the string, but being able to "walk"/iterate along the l
by e12e 8y ago
What does that mean? Is it equivalent to the pointer starting out (say) pointing to the first letter of the string, but being able to "walk"/iterate along the length of the string?
- bluejekyll 8y agoIt means you can change the string to which the pointer is currently associated. Edit: I removed my initial “no.”
- progval 8y agoBut in this case, it will be used the way that e12e described.
- bluejekyll 8y agoAh. I may have misunderstood what they were suggesting.
- steveklabnik 8y agoEDIT: adjusted the diagram to make it more clear that we're not mutating the &str Here's some string data, in memory somewhere: Hello world A `&str` is a pointer, length combo. The pointer points to the start of the string, the length says how many bytes there are: (p, 11) | \ | V Hello world A `&mut T` is a pointer, so a `&mut &str` looks like this: p | V (p, 11) | \ | V Hello world Since it's mutable, this means we can re-assign what it points to, and create a new `&str` to the later part of the string: p \------\ V (p, 11) (p, 5) | | \ | | | V V Hello world Since the inner &str is immutable, we can't change the underling string. Hope that helps!
- tigershark 8y agoSo it’s basically like a Span in C# if I understood correctly?
- steveklabnik 8y agoI am not familiar with the in-memory representation of Slice, but conceptually at least, yes. We call &str a "string slice" and &[T] more generally a "slice". EDIT: apparently you just edited from Slice to Span, reading https://msdn.microsoft.com/en-us/magazine/mt814808.aspx https://msdn.microsoft.com/en-us/magazine/mt814808.aspx > First, Span<T> is a value type containing a ref and a length, defined approximately as follows: Yep, exactly the same as Span<T> then.
- tigershark 8y agoSorry, I wrote Slice instead of Span in the original comment... Slice is the method that returns a Span that is the equivalent of this rust concept as far as I can tell. At some point in the future I’ll need to delve in rust, it’s quite fascinating, but sadly I don’t have much time nowadays :(
- steveklabnik 8y agoIt's all good, on both counts! We'll still be around when you find the time :)
- GrayShade 8y agoIt's actually like a ref Span argument, if my understanding of it is correct. &[T] is like Span<T>, while a &mut &[T] is like a reference to a Span<T>.
- e12e 8y agoThank you, yes. Is there a binding between the "top" pointer &mut T, and the string which the pointer/length pair points to? Can we change our pointer to point somewhere else entirely, say a newly allocated string "goodbye, world"? p1 \------\ V (p2, 11) (p3, 13) | \ | \ | \ V V Hello World Goodbye World
- Gibbon1 8y agoYeah I do that in a command line interface module for some firmware I wrote. No heap, very limited memory, solution string functions that understand the concept of white space delimited tokens. You just walk the pointer down the input string without modifying it.