-
-
Notifications
You must be signed in to change notification settings - Fork 56
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
rollup + hopefully final prep before 1.0 release #123
Conversation
It turns out that 'v1' exists but isn't really pully supported. Which makes sense. It's easier to just push stuff to master. So we switch to that too. Closes #122 Ref: #122 (comment)
We make an absolute mess of our tests so that 'cargo miri test' will complete in reasonable time. I hate this, but Miri is worth it. Ref #121
When using 'get_unchecked' twice where one is a mutable borrow, it ends up creating UB under the "stacked borrows" model. Which isn't adopted yet. Still, it seems likely that it will? So we fix it by deriving both pointers to 'ptr::copy' from the same 'get_unchecked_mut' call. Closes #121
Previously, we were using 'end_ptr' by computing a zero-length pointer by offseting from the end of the haystack. But for pointer provenance reasons, it is more correct to computer the end pointer by adding to the start pointer. I don't believe this is necessary for the forward case, but do it there too "just in case" and also to make the code more similar to the reverse case. Closes #121
Miri warns about this, so we fix it. I have no particular attachment to integer-to-pointer casts, and it seems like the tide might be shifting against them. Since we don't need an integer-to-pointer cast here, we drop it. I believe it was written the way it was (from the 'memchr crate, which itself should be fixed) because it made more intuitive sense to me. Alas...
This slightly tweaks the documentation of the various OsStr/Path conversion routines to cover the possible future where `OsStr::as_bytes` (and probably also `OsStr::from_bytes`) exists. Namely, the point of these routines was always to get at the underlying byte representation of OS strings, but doing so without building a WTF-8 decoder/encoder. So if the raw bytes do wind up getting exposed in a platform independent way, then we'll switch all of these routines to use the raw bytes and they'll all become, effectively, no-ops. But for now, we still continue to choose to sacrifice a little correctness on Windows in exchange for a lot of simplicity. Closes #115
And switch to Rust 2011 and 'resolver = 2'. The idea here is to overhaul bstr features to make use of the new resolver in Cargo. But this requires Rust 1.60. This does make the MSRV a bit newer than I would hope, but it's at least a few releases old at this point. And if I don't do this now, then I either have to accept a sub-optimal feature setup for 1.0 forever, or delay 1.0 until Rust 1.60 is "old enough." Instead, we can just bump to Rust 1.60 now. For people too squeamish to move to such a new Rust, they can stick to bstr 0.2.0 until they're ready to move on. Ref: #40 (comment)
This gets rid of the 'serde1-{std,alloc,core}' features and just replaces it with a single proper 'serde' feature. We make it work as one would expect with the other crate features by using the new 'dep:' and 'pkg?' Cargo.toml feature syntax. This is a breaking change because the 'serde1' features no longer exist. Instead, you just need to enable the 'serde' feature and it should automatically do the right thing depending on whether you also have 'std', 'alloc' or neither set. Ref: https://doc.rust-lang.org/cargo/reference/features.html Ref: #40 (comment)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Another benefit I've found to dep:
syntax is that it will provide the user a cleaner, more relevant feature list when they cargo add bstr
. As I've been using cargo add
more, its been increasing my motivation to go and update the MSRV of every crate of mine to use dep:
(hard to overcome inertia for the low-edit crates).
@epage Yeah that is a nice win, I agree. It is much much better to not conflate optional dependencies and features, especially given that they treated as API surface. Definitely a big win! |
The first lines of each commit message should give a good breakdown of what's in here. Notably, this moves the MSRV to Rust 1.60 and makes use of the new
dep:
andpkg?
feature syntax to get rid of theserde1-{std,alloc,core}
hack.cc @epage