Skip to content
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

std: Stabilize APIs for the 1.7 release #30943

Merged
merged 1 commit into from
Jan 17, 2016

Conversation

alexcrichton
Copy link
Member

This commit stabilizes and deprecates the FCP (final comment period) APIs for
the upcoming 1.7 beta release. The specific APIs which changed were:

Stabilized

  • Path::strip_prefix (renamed from relative_from)
  • path::StripPrefixError (new error type returned from strip_prefix)
  • Ipv4Addr::is_loopback
  • Ipv4Addr::is_private
  • Ipv4Addr::is_link_local
  • Ipv4Addr::is_multicast
  • Ipv4Addr::is_broadcast
  • Ipv4Addr::is_documentation
  • Ipv6Addr::is_unspecified
  • Ipv6Addr::is_loopback
  • Ipv6Addr::is_unique_local
  • Ipv6Addr::is_multicast
  • Vec::as_slice
  • Vec::as_mut_slice
  • String::as_str
  • String::as_mut_str
  • <[T]>::clone_from_slice - the usize return value is removed
  • <[T]>::sort_by_key
  • i32::checked_rem (and other signed types)
  • i32::checked_neg (and other signed types)
  • i32::checked_shl (and other signed types)
  • i32::checked_shr (and other signed types)
  • i32::saturating_mul (and other signed types)
  • i32::overflowing_add (and other signed types)
  • i32::overflowing_sub (and other signed types)
  • i32::overflowing_mul (and other signed types)
  • i32::overflowing_div (and other signed types)
  • i32::overflowing_rem (and other signed types)
  • i32::overflowing_neg (and other signed types)
  • i32::overflowing_shl (and other signed types)
  • i32::overflowing_shr (and other signed types)
  • u32::checked_rem (and other unsigned types)
  • u32::checked_shl (and other unsigned types)
  • u32::saturating_mul (and other unsigned types)
  • u32::overflowing_add (and other unsigned types)
  • u32::overflowing_sub (and other unsigned types)
  • u32::overflowing_mul (and other unsigned types)
  • u32::overflowing_div (and other unsigned types)
  • u32::overflowing_rem (and other unsigned types)
  • u32::overflowing_neg (and other unsigned types)
  • u32::overflowing_shl (and other unsigned types)
  • u32::overflowing_shr (and other unsigned types)
  • ffi::IntoStringError
  • CString::into_string
  • CString::into_bytes
  • CString::into_bytes_with_nul
  • From<CString> for Vec<u8>
  • From<CString> for Vec<u8>
  • IntoStringError::into_cstring
  • IntoStringError::utf8_error
  • Error for IntoStringError

Deprecated

  • Path::relative_from - renamed to strip_prefix
  • Path::prefix - use components().next() instead
  • os::unix::fs constants - moved to the libc crate
  • fmt::{radix, Radix, RadixFmt} - not used enough to stabilize
  • IntoCow - conflicts with Into and may come back later
  • i32::{BITS, BYTES} (and other integers) - not pulling their weight
  • DebugTuple::formatter - will be removed
  • sync::Semaphore - not used enough and confused with system semaphores

Closes #23284
cc #27709 (still lots more methods though)
Closes #27712
Closes #27722
Closes #27728
Closes #27735
Closes #27729
Closes #27755
Closes #27782
Closes #27798

@rust-highfive
Copy link
Collaborator

r? @nikomatsakis

(rust_highfive has picked a reviewer for you, use r? to override)

@alexcrichton
Copy link
Member Author

r? @aturon

Note that this PR currently leaves out the stabilization of custom hashers in hashmaps because there's a bit of a question of where the BuildHasher trait goes that we didn't quite make an explicit decision on. I'd be fine backporting that stabilization, however.

@rust-highfive rust-highfive assigned aturon and unassigned nikomatsakis Jan 15, 2016
@@ -89,6 +89,9 @@ impl Ipv4Addr {
}

/// Returns true if this is a loopback address (127.0.0.0/8).
///
/// This property is defined by RFC 6890
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we disambiguate this RFC from our normal RFCs? Do we want to provide a link?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nah I think that if you're reading this much into the documentation you'll probably recognize in the context that these are the other kind of RFCs. That being said if it ends up being confusing we can certainly update!

@aturon
Copy link
Member

aturon commented Jan 15, 2016

OK, r=me unless you want to deal with the tiny nit.

@alexcrichton
Copy link
Member Author

@bors: r=aturon faded1c375f55e35f849e003b40e6bab30eb3e66

@alexcrichton
Copy link
Member Author

oh also, cc @rust-lang/libs

@ollie27
Copy link
Member

ollie27 commented Jan 15, 2016

It looks like checked_neg is still missing for unsigned ints.

@alexcrichton
Copy link
Member Author

@bors: r-

Oh that was originally left out because it always overflowed (e.g. always returned None), but now we special case 0 and it seems good for consistency, so I'll add.

@@ -1557,6 +1527,26 @@ macro_rules! uint_impl {
}
}

/// Checked negation. Computes `!self`, returning `None` unless `self ==
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

-self?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oops, yes ideed!

@alexcrichton
Copy link
Member Author

@bors: r=aturon 19d4a21

@bors
Copy link
Contributor

bors commented Jan 16, 2016

⌛ Testing commit 19d4a21 with merge 0246765...

@bors
Copy link
Contributor

bors commented Jan 16, 2016

💔 Test failed - auto-linux-64-x-android-t

@alexcrichton
Copy link
Member Author

@bors: r=aturon f2e517b

This commit stabilizes and deprecates the FCP (final comment period) APIs for
the upcoming 1.7 beta release. The specific APIs which changed were:

Stabilized

* `Path::strip_prefix` (renamed from `relative_from`)
* `path::StripPrefixError` (new error type returned from `strip_prefix`)
* `Ipv4Addr::is_loopback`
* `Ipv4Addr::is_private`
* `Ipv4Addr::is_link_local`
* `Ipv4Addr::is_multicast`
* `Ipv4Addr::is_broadcast`
* `Ipv4Addr::is_documentation`
* `Ipv6Addr::is_unspecified`
* `Ipv6Addr::is_loopback`
* `Ipv6Addr::is_unique_local`
* `Ipv6Addr::is_multicast`
* `Vec::as_slice`
* `Vec::as_mut_slice`
* `String::as_str`
* `String::as_mut_str`
* `<[T]>::clone_from_slice` - the `usize` return value is removed
* `<[T]>::sort_by_key`
* `i32::checked_rem` (and other signed types)
* `i32::checked_neg` (and other signed types)
* `i32::checked_shl` (and other signed types)
* `i32::checked_shr` (and other signed types)
* `i32::saturating_mul` (and other signed types)
* `i32::overflowing_add` (and other signed types)
* `i32::overflowing_sub` (and other signed types)
* `i32::overflowing_mul` (and other signed types)
* `i32::overflowing_div` (and other signed types)
* `i32::overflowing_rem` (and other signed types)
* `i32::overflowing_neg` (and other signed types)
* `i32::overflowing_shl` (and other signed types)
* `i32::overflowing_shr` (and other signed types)
* `u32::checked_rem` (and other unsigned types)
* `u32::checked_neg` (and other unsigned types)
* `u32::checked_shl` (and other unsigned types)
* `u32::saturating_mul` (and other unsigned types)
* `u32::overflowing_add` (and other unsigned types)
* `u32::overflowing_sub` (and other unsigned types)
* `u32::overflowing_mul` (and other unsigned types)
* `u32::overflowing_div` (and other unsigned types)
* `u32::overflowing_rem` (and other unsigned types)
* `u32::overflowing_neg` (and other unsigned types)
* `u32::overflowing_shl` (and other unsigned types)
* `u32::overflowing_shr` (and other unsigned types)
* `ffi::IntoStringError`
* `CString::into_string`
* `CString::into_bytes`
* `CString::into_bytes_with_nul`
* `From<CString> for Vec<u8>`
* `From<CString> for Vec<u8>`
* `IntoStringError::into_cstring`
* `IntoStringError::utf8_error`
* `Error for IntoStringError`

Deprecated

* `Path::relative_from` - renamed to `strip_prefix`
* `Path::prefix` - use `components().next()` instead
* `os::unix::fs` constants - moved to the `libc` crate
* `fmt::{radix, Radix, RadixFmt}` - not used enough to stabilize
* `IntoCow` - conflicts with `Into` and may come back later
* `i32::{BITS, BYTES}` (and other integers) - not pulling their weight
* `DebugTuple::formatter` - will be removed
* `sync::Semaphore` - not used enough and confused with system semaphores

Closes rust-lang#23284
cc rust-lang#27709 (still lots more methods though)
Closes rust-lang#27712
Closes rust-lang#27722
Closes rust-lang#27728
Closes rust-lang#27735
Closes rust-lang#27729
Closes rust-lang#27755
Closes rust-lang#27782
Closes rust-lang#27798
@alexcrichton
Copy link
Member Author

@bors: r=aturon 9a4f43b

Manishearth added a commit to Manishearth/rust that referenced this pull request Jan 17, 2016
This commit stabilizes and deprecates the FCP (final comment period) APIs for
the upcoming 1.7 beta release. The specific APIs which changed were:

Stabilized

* `Path::strip_prefix` (renamed from `relative_from`)
* `path::StripPrefixError` (new error type returned from `strip_prefix`)
* `Ipv4Addr::is_loopback`
* `Ipv4Addr::is_private`
* `Ipv4Addr::is_link_local`
* `Ipv4Addr::is_multicast`
* `Ipv4Addr::is_broadcast`
* `Ipv4Addr::is_documentation`
* `Ipv6Addr::is_unspecified`
* `Ipv6Addr::is_loopback`
* `Ipv6Addr::is_unique_local`
* `Ipv6Addr::is_multicast`
* `Vec::as_slice`
* `Vec::as_mut_slice`
* `String::as_str`
* `String::as_mut_str`
* `<[T]>::clone_from_slice` - the `usize` return value is removed
* `<[T]>::sort_by_key`
* `i32::checked_rem` (and other signed types)
* `i32::checked_neg` (and other signed types)
* `i32::checked_shl` (and other signed types)
* `i32::checked_shr` (and other signed types)
* `i32::saturating_mul` (and other signed types)
* `i32::overflowing_add` (and other signed types)
* `i32::overflowing_sub` (and other signed types)
* `i32::overflowing_mul` (and other signed types)
* `i32::overflowing_div` (and other signed types)
* `i32::overflowing_rem` (and other signed types)
* `i32::overflowing_neg` (and other signed types)
* `i32::overflowing_shl` (and other signed types)
* `i32::overflowing_shr` (and other signed types)
* `u32::checked_rem` (and other unsigned types)
* `u32::checked_shl` (and other unsigned types)
* `u32::saturating_mul` (and other unsigned types)
* `u32::overflowing_add` (and other unsigned types)
* `u32::overflowing_sub` (and other unsigned types)
* `u32::overflowing_mul` (and other unsigned types)
* `u32::overflowing_div` (and other unsigned types)
* `u32::overflowing_rem` (and other unsigned types)
* `u32::overflowing_neg` (and other unsigned types)
* `u32::overflowing_shl` (and other unsigned types)
* `u32::overflowing_shr` (and other unsigned types)
* `ffi::IntoStringError`
* `CString::into_string`
* `CString::into_bytes`
* `CString::into_bytes_with_nul`
* `From<CString> for Vec<u8>`
* `From<CString> for Vec<u8>`
* `IntoStringError::into_cstring`
* `IntoStringError::utf8_error`
* `Error for IntoStringError`

Deprecated

* `Path::relative_from` - renamed to `strip_prefix`
* `Path::prefix` - use `components().next()` instead
* `os::unix::fs` constants - moved to the `libc` crate
* `fmt::{radix, Radix, RadixFmt}` - not used enough to stabilize
* `IntoCow` - conflicts with `Into` and may come back later
* `i32::{BITS, BYTES}` (and other integers) - not pulling their weight
* `DebugTuple::formatter` - will be removed
* `sync::Semaphore` - not used enough and confused with system semaphores

Closes rust-lang#23284
cc rust-lang#27709 (still lots more methods though)
Closes rust-lang#27712
Closes rust-lang#27722
Closes rust-lang#27728
Closes rust-lang#27735
Closes rust-lang#27729
Closes rust-lang#27755
Closes rust-lang#27782
Closes rust-lang#27798
bors added a commit that referenced this pull request Jan 17, 2016
@bors bors merged commit 9a4f43b into rust-lang:master Jan 17, 2016
let src = &src[.. min];
for i in 0..min {
dst[i].clone_from(&src[i]);
fn clone_from_slice(&mut self, src: &[T]) where T: Clone {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oops, major perf regression. I'll try to PR this.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh gah good eye!

(for those following along the PR was submitted)

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yep, it's fine. I'm not worried, as long as it gets into the same beta release.

@bluss
Copy link
Member

bluss commented Jan 18, 2016

Now I understand why the clone_from_slice fix got a p=1. bytes::copy_memory has been replaced by calls to clone_from_slice in many places.

I'm not even sure that's a good idea. bytes::copy_memory was a safe interface to memcpy, no matter what the compilation mode. Calling clone_from_slice will be slow in no optimizations mode, and will exercise the inliner and optimizer in optimizing mode.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment