Skip to content

Commit fbf8a8c

Browse files
committed
Auto merge of #32892 - brson:relnotes19, r=alexcrichton
Release notes for 1.9
2 parents c9f1501 + bbcfcfc commit fbf8a8c

File tree

1 file changed

+288
-0
lines changed

1 file changed

+288
-0
lines changed

RELEASES.md

+288
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,291 @@
1+
Version 1.9.0 (2016-05-26)
2+
==========================
3+
4+
Language
5+
--------
6+
7+
* The `#[deprecated]` attribute when applied to an API will generate
8+
warnings when used. The warnings may be suppressed with
9+
`#[allow(deprecated)]`. [RFC 1270].
10+
* [`fn` item types are zero sized, and each `fn` names a unique
11+
type][1.9fn]. This will break code that transmutes `fn`s, so calling
12+
`transmute` on a `fn` type will generate a warning for a few cycles,
13+
then will be converted to an error.
14+
* [Field and method resolution understand visibility, so private
15+
fields and methods cannot prevent the proper use of public fields
16+
and methods][1.9fv].
17+
* [The parser considers unicode codepoints in the
18+
`PATTERN_WHITE_SPACE` category to be whitespace][1.9ws].
19+
20+
Stabilized APIs
21+
---------------
22+
23+
* [`std::panic`]
24+
* [`std::panic::catch_unwind`][] (renamed from `recover`)
25+
* [`std::panic::resume_unwind`][] (renamed from `propagate`)
26+
* [`std::panic::AssertUnwindSafe`][] (renamed from `AssertRecoverSafe`)
27+
* [`std::panic::UnwindSafe`][] (renamed from `RecoverSafe`)
28+
* [`str::is_char_boundary`]
29+
* [`<*const T>::as_ref`]
30+
* [`<*mut T>::as_ref`]
31+
* [`<*mut T>::as_mut`]
32+
* [`AsciiExt::make_ascii_uppercase`]
33+
* [`AsciiExt::make_ascii_lowercase`]
34+
* [`char::decode_utf16`]
35+
* [`char::DecodeUtf16`]
36+
* [`char::DecodeUtf16Error`]
37+
* [`char::DecodeUtf16Error::unpaired_surrogate`]
38+
* [`BTreeSet::take`]
39+
* [`BTreeSet::replace`]
40+
* [`BTreeSet::get`]
41+
* [`HashSet::take`]
42+
* [`HashSet::replace`]
43+
* [`HashSet::get`]
44+
* [`OsString::with_capacity`]
45+
* [`OsString::clear`]
46+
* [`OsString::capacity`]
47+
* [`OsString::reserve`]
48+
* [`OsString::reserve_exact`]
49+
* [`OsStr::is_empty`]
50+
* [`OsStr::len`]
51+
* [`std::os::unix::thread`]
52+
* [`RawPthread`]
53+
* [`JoinHandleExt`]
54+
* [`JoinHandleExt::as_pthread_t`]
55+
* [`JoinHandleExt::into_pthread_t`]
56+
* [`HashSet::hasher`]
57+
* [`HashMap::hasher`]
58+
* [`CommandExt::exec`]
59+
* [`File::try_clone`]
60+
* [`SocketAddr::set_ip`]
61+
* [`SocketAddr::set_port`]
62+
* [`SocketAddrV4::set_ip`]
63+
* [`SocketAddrV4::set_port`]
64+
* [`SocketAddrV6::set_ip`]
65+
* [`SocketAddrV6::set_port`]
66+
* [`SocketAddrV6::set_flowinfo`]
67+
* [`SocketAddrV6::set_scope_id`]
68+
* [`slice::copy_from_slice`]
69+
* [`ptr::read_volatile`]
70+
* [`ptr::write_volatile`]
71+
* [`OpenOptions::create_new`]
72+
* [`TcpStream::set_nodelay`]
73+
* [`TcpStream::nodelay`]
74+
* [`TcpStream::set_ttl`]
75+
* [`TcpStream::ttl`]
76+
* [`TcpStream::set_only_v6`]
77+
* [`TcpStream::only_v6`]
78+
* [`TcpStream::take_error`]
79+
* [`TcpStream::set_nonblocking`]
80+
* [`TcpListener::set_ttl`]
81+
* [`TcpListener::ttl`]
82+
* [`TcpListener::set_only_v6`]
83+
* [`TcpListener::only_v6`]
84+
* [`TcpListener::take_error`]
85+
* [`TcpListener::set_nonblocking`]
86+
* [`UdpSocket::set_broadcast`]
87+
* [`UdpSocket::broadcast`]
88+
* [`UdpSocket::set_multicast_loop_v4`]
89+
* [`UdpSocket::multicast_loop_v4`]
90+
* [`UdpSocket::set_multicast_ttl_v4`]
91+
* [`UdpSocket::multicast_ttl_v4`]
92+
* [`UdpSocket::set_multicast_loop_v6`]
93+
* [`UdpSocket::multicast_loop_v6`]
94+
* [`UdpSocket::set_multicast_ttl_v6`]
95+
* [`UdpSocket::multicast_ttl_v6`]
96+
* [`UdpSocket::set_ttl`]
97+
* [`UdpSocket::ttl`]
98+
* [`UdpSocket::set_only_v6`]
99+
* [`UdpSocket::only_v6`]
100+
* [`UdpSocket::join_multicast_v4`]
101+
* [`UdpSocket::join_multicast_v6`]
102+
* [`UdpSocket::leave_multicast_v4`]
103+
* [`UdpSocket::leave_multicast_v6`]
104+
* [`UdpSocket::take_error`]
105+
* [`UdpSocket::connect`]
106+
* [`UdpSocket::send`]
107+
* [`UdpSocket::recv`]
108+
* [`UdpSocket::set_nonblocking`]
109+
110+
Libraries
111+
---------
112+
113+
* [`std::sync::Once` is poisoned if its initialization function
114+
fails][1.9o].
115+
* [`cell::Ref` and `cell::RefMut` can contain unsized types][1.9cu].
116+
* [Most types implement `fmt::Debug`][1.9db].
117+
* [The default buffer size used by `BufReader` and `BufWriter` was
118+
reduced to 8K, from 64K][1.9bf]. This is in line with the buffer size
119+
used by other languages.
120+
* [`Instant`, `SystemTime` and `Duration` implement `+=` and `-=`.
121+
`Duration` additionally implements `*=` and `/=`][1.9ta].
122+
* [`Skip` is a `DoubleEndedIterator`][1.9sk].
123+
* [`From<[u8; 4]>` is implemented for `Ipv4Addr`][1.9fi].
124+
* [`Chain` implements `BufRead`][1.9ch].
125+
* [`HashMap`, `HashSet` and iterators are covariant][1.9hc].
126+
127+
Cargo
128+
-----
129+
130+
* [Cargo can now run concurrently][1.9cc].
131+
* [Top-level overrides allow specific revisions of crates to be
132+
overridden through the entire crate graph][1.9ct]. This is intended
133+
to make upgrades easier for large projects, by allowing crates to be
134+
forked temporarily until they've been upgraded and republished.
135+
* [Cargo exports a `CARGO_PKG_AUTHORS` environment variable][1.9cp].
136+
* [Cargo will pass the contents of the `RUSTFLAGS` variable to `rustc`
137+
on the commandline][1.9cf]. `rustc` arguments can also be specified
138+
in the `build.rustflags` configuration key.
139+
140+
Performance
141+
-----------
142+
143+
* [During type unification, the complexity of comparing variables for
144+
equivalance was reduced from `O(n!)` to `O(n)`][1.9tu]. This leads
145+
to major compile-time improvements in some scenarios.
146+
* [`ToString` is specialized for `str`, giving it the same performance
147+
as `to_owned`][1.9ts].
148+
* [Spawning processes with `Command::output` no longer creates extra
149+
threads][1.9sp].
150+
* [`#[derive(PartialEq)]` and `#[derive(PartialOrd)]` emit less code
151+
for C-like enums][1.9cl].
152+
153+
Misc
154+
----
155+
156+
* [Passing the `--quiet` flag to a test runner will produce
157+
much-abbreviated output][1.9q].
158+
* The Rust Project now publishes std binaries for the
159+
`mips-unknown-linux-musl`, `mipsel-unknown-linux-musl`, and
160+
`i586-pc-windows-msvc` targets.
161+
162+
Compatibility Notes
163+
-------------------
164+
165+
* [`std::sync::Once` is poisoned if its initialization function
166+
fails][1.9o].
167+
* [It is illegal to define methods with the same name in overlapping
168+
inherent `impl` blocks][1.9sn].
169+
* [`fn` item types are zero sized, and each `fn` names a unique
170+
type][1.9fn]. This will break code that transmutes `fn`s, so calling
171+
`transmute` on a `fn` type will generate a warning for a few cycles,
172+
then will be converted to an error.
173+
* [Improvements to const evaluation may trigger new errors when integer
174+
literals are out of range][1.9ce].
175+
176+
177+
[1.9bf]: https://github.com/rust-lang/rust/pull/32695
178+
[1.9cc]: https://github.com/rust-lang/cargo/pull/2486
179+
[1.9ce]: https://github.com/rust-lang/rust/pull/30587
180+
[1.9cf]: https://github.com/rust-lang/cargo/pull/2241
181+
[1.9ch]: https://github.com/rust-lang/rust/pull/32541
182+
[1.9cl]: https://github.com/rust-lang/rust/pull/31977
183+
[1.9cp]: https://github.com/rust-lang/cargo/pull/2465
184+
[1.9ct]: https://github.com/rust-lang/cargo/pull/2385
185+
[1.9cu]: https://github.com/rust-lang/rust/pull/32652
186+
[1.9db]: https://github.com/rust-lang/rust/pull/32054
187+
[1.9fi]: https://github.com/rust-lang/rust/pull/32050
188+
[1.9fn]: https://github.com/rust-lang/rust/pull/31710
189+
[1.9fv]: https://github.com/rust-lang/rust/pull/31938
190+
[1.9hc]: https://github.com/rust-lang/rust/pull/32635
191+
[1.9o]: https://github.com/rust-lang/rust/pull/32325
192+
[1.9q]: https://github.com/rust-lang/rust/pull/31887
193+
[1.9sk]: https://github.com/rust-lang/rust/pull/31700
194+
[1.9sn]: https://github.com/rust-lang/rust/pull/31925
195+
[1.9sp]: https://github.com/rust-lang/rust/pull/31618
196+
[1.9ta]: https://github.com/rust-lang/rust/pull/32448
197+
[1.9ts]: https://github.com/rust-lang/rust/pull/32586
198+
[1.9tu]: https://github.com/rust-lang/rust/pull/32062
199+
[1.9ws]: https://github.com/rust-lang/rust/pull/29734
200+
[RFC 1270]: https://github.com/rust-lang/rfcs/blob/master/text/1270-deprecation.md
201+
[`<*const T>::as_ref`]: http://doc.rust-lang.org/nightly/std/primitive.pointer.html#method.as_ref
202+
[`<*mut T>::as_mut`]: http://doc.rust-lang.org/nightly/std/primitive.pointer.html#method.as_mut
203+
[`<*mut T>::as_ref`]: http://doc.rust-lang.org/nightly/std/primitive.pointer.html#method.as_ref
204+
[`slice::copy_from_slice`]: http://doc.rust-lang.org/nightly/std/primitive.slice.html#method.copy_from_slice
205+
[`AsciiExt::make_ascii_lowercase`]: http://doc.rust-lang.org/nightly/std/ascii/trait.AsciiExt.html#tymethod.make_ascii_lowercase
206+
[`AsciiExt::make_ascii_uppercase`]: http://doc.rust-lang.org/nightly/std/ascii/trait.AsciiExt.html#tymethod.make_ascii_uppercase
207+
[`BTreeSet::get`]: http://doc.rust-lang.org/nightly/collections/btree/set/struct.BTreeSet.html#method.get
208+
[`BTreeSet::replace`]: http://doc.rust-lang.org/nightly/collections/btree/set/struct.BTreeSet.html#method.replace
209+
[`BTreeSet::take`]: http://doc.rust-lang.org/nightly/collections/btree/set/struct.BTreeSet.html#method.take
210+
[`CommandExt::exec`]: http://doc.rust-lang.org/nightly/std/os/unix/process/trait.CommandExt.html#tymethod.exec
211+
[`File::try_clone`]: http://doc.rust-lang.org/nightly/std/fs/struct.File.html#method.try_clone
212+
[`HashMap::hasher`]: http://doc.rust-lang.org/nightly/std/collections/struct.HashMap.html#method.hasher
213+
[`HashSet::get`]: http://doc.rust-lang.org/nightly/std/collections/struct.HashSet.html#method.get
214+
[`HashSet::hasher`]: http://doc.rust-lang.org/nightly/std/collections/struct.HashSet.html#method.hasher
215+
[`HashSet::replace`]: http://doc.rust-lang.org/nightly/std/collections/struct.HashSet.html#method.replace
216+
[`HashSet::take`]: http://doc.rust-lang.org/nightly/std/collections/struct.HashSet.html#method.take
217+
[`JoinHandleExt::as_pthread_t`]: http://doc.rust-lang.org/nightly/std/os/unix/thread/trait.JoinHandleExt.html#tymethod.as_pthread_t
218+
[`JoinHandleExt::into_pthread_t`]: http://doc.rust-lang.org/nightly/std/os/unix/thread/trait.JoinHandleExt.html#tymethod.into_pthread_t
219+
[`JoinHandleExt`]: http://doc.rust-lang.org/nightly/std/os/unix/thread/trait.JoinHandleExt.html
220+
[`OpenOptions::create_new`]: http://doc.rust-lang.org/nightly/std/fs/struct.OpenOptions.html#method.create_new
221+
[`OsStr::is_empty`]: http://doc.rust-lang.org/nightly/std/ffi/struct.OsStr.html#method.is_empty
222+
[`OsStr::len`]: http://doc.rust-lang.org/nightly/std/ffi/struct.OsStr.html#method.len
223+
[`OsString::capacity`]: http://doc.rust-lang.org/nightly/std/ffi/struct.OsString.html#method.capacity
224+
[`OsString::clear`]: http://doc.rust-lang.org/nightly/std/ffi/struct.OsString.html#method.clear
225+
[`OsString::reserve_exact`]: http://doc.rust-lang.org/nightly/std/ffi/struct.OsString.html#method.reserve_exact
226+
[`OsString::reserve`]: http://doc.rust-lang.org/nightly/std/ffi/struct.OsString.html#method.reserve
227+
[`OsString::with_capacity`]: http://doc.rust-lang.org/nightly/std/ffi/struct.OsString.html#method.with_capacity
228+
[`RawPthread`]: http://doc.rust-lang.org/nightly/std/os/unix/thread/type.RawPthread.html
229+
[`SocketAddr::set_ip`]: http://doc.rust-lang.org/nightly/std/net/enum.SocketAddr.html#method.set_ip
230+
[`SocketAddr::set_port`]: http://doc.rust-lang.org/nightly/std/net/enum.SocketAddr.html#method.set_port
231+
[`SocketAddrV4::set_ip`]: http://doc.rust-lang.org/nightly/std/net/struct.SocketAddrV4.html#method.set_ip
232+
[`SocketAddrV4::set_port`]: http://doc.rust-lang.org/nightly/std/net/struct.SocketAddrV4.html#method.set_port
233+
[`SocketAddrV6::set_flowinfo`]: http://doc.rust-lang.org/nightly/std/net/struct.SocketAddrV6.html#method.set_flowinfo
234+
[`SocketAddrV6::set_ip`]: http://doc.rust-lang.org/nightly/std/net/struct.SocketAddrV6.html#method.set_ip
235+
[`SocketAddrV6::set_port`]: http://doc.rust-lang.org/nightly/std/net/struct.SocketAddrV6.html#method.set_port
236+
[`SocketAddrV6::set_scope_id`]: http://doc.rust-lang.org/nightly/std/net/struct.SocketAddrV6.html#method.set_scope_id
237+
[`TcpListener::only_v6`]: http://doc.rust-lang.org/nightly/std/net/struct.TcpStream.html#method.only_v6
238+
[`TcpListener::set_nonblocking`]: http://doc.rust-lang.org/nightly/std/net/struct.TcpStream.html#method.set_nonblocking
239+
[`TcpListener::set_only_v6`]: http://doc.rust-lang.org/nightly/std/net/struct.TcpStream.html#method.set_only_v6
240+
[`TcpListener::set_ttl`]: http://doc.rust-lang.org/nightly/std/net/struct.TcpStream.html#method.set_ttl
241+
[`TcpListener::take_error`]: http://doc.rust-lang.org/nightly/std/net/struct.TcpStream.html#method.take_error
242+
[`TcpListener::ttl`]: http://doc.rust-lang.org/nightly/std/net/struct.TcpStream.html#method.ttl
243+
[`TcpStream::nodelay`]: http://doc.rust-lang.org/nightly/std/net/struct.TcpStream.html#method.nodelay
244+
[`TcpStream::only_v6`]: http://doc.rust-lang.org/nightly/std/net/struct.TcpStream.html#method.only_v6
245+
[`TcpStream::set_nodelay`]: http://doc.rust-lang.org/nightly/std/net/struct.TcpStream.html#method.set_nodelay
246+
[`TcpStream::set_nonblocking`]: http://doc.rust-lang.org/nightly/std/net/struct.TcpStream.html#method.set_nonblocking
247+
[`TcpStream::set_only_v6`]: http://doc.rust-lang.org/nightly/std/net/struct.TcpStream.html#method.set_only_v6
248+
[`TcpStream::set_ttl`]: http://doc.rust-lang.org/nightly/std/net/struct.TcpStream.html#method.set_ttl
249+
[`TcpStream::take_error`]: http://doc.rust-lang.org/nightly/std/net/struct.TcpStream.html#method.take_error
250+
[`TcpStream::ttl`]: http://doc.rust-lang.org/nightly/std/net/struct.TcpStream.html#method.ttl
251+
[`UdpSocket::broadcast`]: http://doc.rust-lang.org/nightly/std/net/struct.UdpSocket.html#method.broadcast
252+
[`UdpSocket::connect`]: http://doc.rust-lang.org/nightly/std/net/struct.UdpSocket.html#method.connect
253+
[`UdpSocket::join_multicast_v4`]: http://doc.rust-lang.org/nightly/std/net/struct.UdpSocket.html#method.join_multicast_v4
254+
[`UdpSocket::join_multicast_v6`]: http://doc.rust-lang.org/nightly/std/net/struct.UdpSocket.html#method.join_multicast_v6
255+
[`UdpSocket::leave_multicast_v4`]: http://doc.rust-lang.org/nightly/std/net/struct.UdpSocket.html#method.leave_multicast_v4
256+
[`UdpSocket::leave_multicast_v6`]: http://doc.rust-lang.org/nightly/std/net/struct.UdpSocket.html#method.leave_multicast_v6
257+
[`UdpSocket::multicast_loop_v4`]: http://doc.rust-lang.org/nightly/std/net/struct.UdpSocket.html#method.multicast_loop_v4
258+
[`UdpSocket::multicast_loop_v6`]: http://doc.rust-lang.org/nightly/std/net/struct.UdpSocket.html#method.multicast_loop_v6
259+
[`UdpSocket::multicast_ttl_v4`]: http://doc.rust-lang.org/nightly/std/net/struct.UdpSocket.html#method.multicast_ttl_v4
260+
[`UdpSocket::multicast_ttl_v6`]: http://doc.rust-lang.org/nightly/std/net/struct.UdpSocket.html#method.multicast_ttl_v6
261+
[`UdpSocket::only_v6`]: http://doc.rust-lang.org/nightly/std/net/struct.UdpSocket.html#method.only_v6
262+
[`UdpSocket::recv`]: http://doc.rust-lang.org/nightly/std/net/struct.UdpSocket.html#method.recv
263+
[`UdpSocket::send`]: http://doc.rust-lang.org/nightly/std/net/struct.UdpSocket.html#method.send
264+
[`UdpSocket::set_broadcast`]: http://doc.rust-lang.org/nightly/std/net/struct.UdpSocket.html#method.set_broadcast
265+
[`UdpSocket::set_multicast_loop_v4`]: http://doc.rust-lang.org/nightly/std/net/struct.UdpSocket.html#method.set_multicast_loop_v4
266+
[`UdpSocket::set_multicast_loop_v6`]: http://doc.rust-lang.org/nightly/std/net/struct.UdpSocket.html#method.set_multicast_loop_v6
267+
[`UdpSocket::set_multicast_ttl_v4`]: http://doc.rust-lang.org/nightly/std/net/struct.UdpSocket.html#method.set_multicast_ttl_v4
268+
[`UdpSocket::set_multicast_ttl_v6`]: http://doc.rust-lang.org/nightly/std/net/struct.UdpSocket.html#method.set_multicast_ttl_v6
269+
[`UdpSocket::set_nonblocking`]: http://doc.rust-lang.org/nightly/std/net/struct.UdpSocket.html#method.set_nonblocking
270+
[`UdpSocket::set_only_v6`]: http://doc.rust-lang.org/nightly/std/net/struct.UdpSocket.html#method.set_only_v6
271+
[`UdpSocket::set_ttl`]: http://doc.rust-lang.org/nightly/std/net/struct.UdpSocket.html#method.set_ttl
272+
[`UdpSocket::take_error`]: http://doc.rust-lang.org/nightly/std/net/struct.UdpSocket.html#method.take_error
273+
[`UdpSocket::ttl`]: http://doc.rust-lang.org/nightly/std/net/struct.UdpSocket.html#method.ttl
274+
[`char::DecodeUtf16Error::unpaired_surrogate`]: http://doc.rust-lang.org/nightly/std/char/struct.DecodeUtf16Error.html#method.unpaired_surrogate
275+
[`char::DecodeUtf16Error`]: http://doc.rust-lang.org/nightly/std/char/struct.DecodeUtf16Error.html
276+
[`char::DecodeUtf16`]: http://doc.rust-lang.org/nightly/std/char/struct.DecodeUtf16.html
277+
[`char::decode_utf16`]: http://doc.rust-lang.org/nightly/std/char/fn.decode_utf16.html
278+
[`ptr::read_volatile`]: http://doc.rust-lang.org/nightly/std/ptr/fn.read_volatile.html
279+
[`ptr::write_volatile`]: http://doc.rust-lang.org/nightly/std/ptr/fn.write_volatile.html
280+
[`std::os::unix::thread`]: http://doc.rust-lang.org/nightly/std/os/unix/thread/index.html
281+
[`std::panic::AssertUnwindSafe`]: http://doc.rust-lang.org/nightly/std/panic/struct.AssertUnwindSafe.html
282+
[`std::panic::UnwindSafe`]: http://doc.rust-lang.org/nightly/std/panic/trait.UnwindSafe.html
283+
[`std::panic::catch_unwind`]: http://doc.rust-lang.org/nightly/std/panic/fn.catch_unwind.html
284+
[`std::panic::resume_unwind`]: http://doc.rust-lang.org/nightly/std/panic/fn.resume_unwind.html
285+
[`std::panic`]: http://doc.rust-lang.org/nightly/std/panic/index.html
286+
[`str::is_char_boundary`]: http://doc.rust-lang.org/nightly/std/primitive.str.html#method.is_char_boundary
287+
288+
1289
Version 1.8.0 (2016-04-14)
2290
==========================
3291

0 commit comments

Comments
 (0)