Join GitHub today
GitHub is home to over 31 million developers working together to host and review code, manage projects, and build software together.
Sign upString::truncate() and Vec::truncate() are inconsistent if new_len > current length #32717
Comments
This comment has been minimized.
This comment has been minimized.
|
Looking at the source, I have a feeling the panic-on-greater-than isn't a deliberate decision. Since it simply asserts that the new length is a character boundary (and presumably "not in the string isn't a valid boundary"). I think adding a panic could be considered a breaking change, but removing one doesn't seem like it should be. |
Aatch
added
A-libs
T-libs
labels
Apr 4, 2016
This comment has been minimized.
This comment has been minimized.
|
@Aatch getting rid of a panic is just as bad if not worse: unsafe {
s.truncate(10); // panics if s isn't long enough.
s.as_mut_vec().as_mut_ptr() = b"1234567890";
}This is obviously a stupid example but you get the point. |
alexcrichton
added
the
I-nominated
label
Apr 4, 2016
This comment has been minimized.
This comment has been minimized.
|
Ignoring the panics seems an ok solution to me. |
alexcrichton
added a commit
to alexcrichton/rust
that referenced
this issue
Apr 14, 2016
alexcrichton
referenced this issue
Apr 14, 2016
Merged
std: Change String::truncate to panic less #32977
This comment has been minimized.
This comment has been minimized.
|
This was discussed at libs triage and the decision was that this is indeed an inconsistency we'd like to fix and the window for fixing still seems open as the code this would break seems almost too niche to exist. I've submitted a PR for this. |
Dr-Emann commentedApr 4, 2016
String::truncate specifies that it "panics if
new_len> current length"Vec::truncate specifies that "If
lenis greater than the vector's current length, this has no effect.This seems very inconsistent. I would personally prefer Vec's semantics. I'm not sure if it's a breaking change to add/remove a documented panic, and I fear it's not okay, but it feels very inconsistent.