-
Notifications
You must be signed in to change notification settings - Fork 13.3k
Audit #[derive]s in std for stability #22511
New issue
Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? # to your account
Comments
cc @aturon, @alexcrichton
|
|
|
/// This structure represents a safely precompiled version of a format string | |
/// and its arguments. This cannot be generated at runtime because it cannot | |
/// safely be done so, so no constructors are given and the fields are private | |
/// to prevent modification. | |
/// | |
/// The `format_args!` macro will safely create an instance of this structure | |
/// and pass it to a function or closure, passed as the first argument. The | |
/// macro validates the format string at compile-time so usage of the `write` | |
/// and `format` functions can be safely performed. | |
#[stable(feature = "rust1", since = "1.0.0")] | |
#[derive(Copy)] | |
pub struct Arguments<'a> { | |
// Format string pieces to print. | |
pieces: &'a [&'a str], | |
// Placeholder specs, or `None` if all specs are default (as in "{}{}"). | |
fmt: Option<&'a [rt::v1::Argument]>, | |
// Dynamic arguments for interpolation, to be interleaved with string | |
// pieces. (Every argument is preceded by a string piece.) | |
args: &'a [ArgumentV1<'a>], | |
} |
RangeFull
and RangeTo
are Copy
but Range
and RangeFrom
are not.
The Ord
ering/PartialOrd
ering of Option
and Result
is inconsistent (in the sense of Option<T>
≅ Result<T, ()>
): None < Some(_)
, but Err(_) > Ok(_)
.
|
Either |
Hm I feel like this was some other structure we may remove the
I believe that we used to pass the structure by reference but we now pass it by value sometimes necessitating the
cc #21846 |
cc me |
I think so: it is useful for generic code (e.g. when storing things in a tree, the details of the ordering usually don't matter, as long as one exists) and #[derive(PartialOrd)]
struct Foo {
x: T
y: U,
z: Option<V>
} The first two fields will usually completely distinguish instances of |
It’s not quite the same as |
The |
Ugh that's bad. Hopefully the Pod/Copy RFC will help us clean this up. |
I'm going to close this as complete. Thanks for heading this up, @huonw! |
#[derive(Foo)]
currently just takes the stability ofFoo
, which may not be what we want for some types instd
.cc #22500
According to
these files have a
#[derive]
attribute near a#[stable]
one:Replacing the
sed ...
withwc -l
gives 77, i.e. there are approximately 77#[derive]
s to look at (nearly 25% of which are in core::iter, hence it being listed separately).Comment below if you wish to handle some of these.
The text was updated successfully, but these errors were encountered: