Skip to content

Commit ec3dc2d

Browse files
committed
1.4 release notes
1 parent 679b5a9 commit ec3dc2d

File tree

1 file changed

+169
-0
lines changed

1 file changed

+169
-0
lines changed

RELEASES.md

+169
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,172 @@
1+
Version 1.4.0 (October 2015)
2+
============================
3+
4+
* ~1200 changes, numerous bugfixes
5+
6+
Highlights
7+
----------
8+
9+
* Windows builds targeting the 64-bit MSVC ABI and linker (instead of
10+
GNU) are now supported and recommended for use.
11+
12+
Breaking Changes
13+
----------------
14+
15+
* [Several changes have been made to fix type soundness and improve
16+
the behavior of associated types][sound]. See [RFC 1214]. Although
17+
we have mostly introduced these changes as warnings this release, to
18+
become errors next release, there are still some scenarios that will
19+
see immediate breakage.
20+
* [The `str::lines` and `BufRead::lines` iterators treat `\r\n` as
21+
line breaks in addition to `\n`][crlf].
22+
* [Loans of `'static` lifetime extend to the end of a function][stat].
23+
24+
Language
25+
--------
26+
27+
* `use` statements that import multiple items [can now rename
28+
them][i], as in `use foo::{bar as kitten, baz as puppy}`.
29+
* [Binops work correctly on fat pointers][binfat].
30+
* `pub extern crate`, which does not behave as expected, [issues a
31+
warning][pec] until a better solution is found.
32+
33+
Libraries
34+
---------
35+
36+
* [Many APIs were stabilized][stab]: `<Box<str>>::into_string`,
37+
[`Arc::downgrade`], [`Arc::get_mut`], [`Arc::make_mut`],
38+
[`Arc::try_unwrap`], [`Box::from_raw`], [`Box::into_raw`], [`CStr::to_str`],
39+
[`CStr::to_string_lossy`], [`CString::from_raw`], [`CString::into_raw`],
40+
[`IntoRawFd::into_raw_fd`], [`IntoRawFd`],
41+
`IntoRawHandle::into_raw_handle`, `IntoRawHandle`,
42+
`IntoRawSocket::into_raw_socket`, `IntoRawSocket`, [`Rc::downgrade`],
43+
[`Rc::get_mut`], [`Rc::make_mut`], [`Rc::try_unwrap`], [`Result::expect`],
44+
[`String::into_boxed_str`], [`TcpStream::read_timeout`],
45+
[`TcpStream::set_read_timeout`], [`TcpStream::set_write_timeout`],
46+
[`TcpStream::write_timeout`], [`UdpSocket::read_timeout`],
47+
[`UdpSocket::set_read_timeout`], [`UdpSocket::set_write_timeout`],
48+
[`UdpSocket::write_timeout`], `Vec::append`, `Vec::split_off`,
49+
[`VecDeque::append`], [`VecDeque::retain`], [`VecDeque::split_off`],
50+
[`rc::Weak::upgrade`], [`rc::Weak`], [`slice::Iter::as_slice`],
51+
[`slice::IterMut::into_slice`], [`str::CharIndices::as_str`],
52+
[`str::Chars::as_str`], [`str::split_at_mut`], [`str::split_at`],
53+
[`sync::Weak::upgrade`], [`sync::Weak`], [`thread::park_timeout`],
54+
[`thread::sleep`].
55+
* [Some APIs were deprecated][dep]: `BTreeMap::with_b`,
56+
`BTreeSet::with_b`, `Option::as_mut_slice`, `Option::as_slice`,
57+
`Result::as_mut_slice`, `Result::as_slice`, `f32::from_str_radix`,
58+
`f64::from_str_radix`.
59+
* [Reverse-searching strings is faster with the 'two-way'
60+
algorithm][s].
61+
* [`std::io::copy` allows `?Sized` arguments][cc].
62+
* The `Windows`, `Chunks`, and `ChunksMut` iterators over slices all
63+
[override `count`, `nth` and `last` with an O(1)
64+
implementation][it].
65+
* [`Default` is implemented for arrays up to `[T; 32]`][d].
66+
* [`IntoRawFd` has been added to the Unix-specific prelude,
67+
`IntoRawSocket` and `IntoRawHandle` to the Windows-specific
68+
prelude][pr].
69+
* [`Extend<String>` and `FromIterator<String` are both implemented for
70+
`String`][es].
71+
* [`IntoIterator` is implemented for `Option<&T>` and
72+
`Result<&T>`][into].
73+
* [`HashMap` and `HashSet` implement `Extend<&T>` where `T:
74+
Copy`][ext] as part of [RFC 839].
75+
* [`BinaryHeap` implements `Debug`][bh2].
76+
* [`Borrow` and `BorrowMut` are implemented for fixed-size
77+
arrays][bm].
78+
* [`extern fn`s of with the "Rust" and "C" ABIs implement common
79+
traits including `Eq`, `Ord`, `Debug`, `Hash`][fp].
80+
* [String comparison is faster][faststr].
81+
* `&mut T` where `T: Write` [also implements `Write`][mutw].
82+
* [A stable regression in `VecDec::push_back` that caused panics for
83+
zero-sized types was fixed][vd].
84+
* [Function pointers implement traits for up to 12 parameters][fp2].
85+
86+
Miscellaneous
87+
-------------
88+
89+
* The compiler [no longer uses the 'morestack' feature to prevent
90+
stack overflow][mm]. Instead it uses guard pages and stack
91+
probes (though stack probes are not yet implemented on any platform
92+
but Windows).
93+
* [The compiler matches traits faster when projections are involved][p].
94+
* The 'improper_ctypes' lint [no longer warns about use of `isize` and
95+
`usize`][ffi].
96+
* [Cargo now displays useful information about what its doing during
97+
`cargo update`][cu].
98+
99+
[`Arc::downgrade`]: http://doc.rust-lang.org/nightly/alloc/arc/struct.Arc.html#method.downgrade
100+
[`Arc::make_mut`]: http://doc.rust-lang.org/nightly/alloc/arc/struct.Arc.html#method.make_mut
101+
[`Arc::get_mut`]: http://doc.rust-lang.org/nightly/alloc/arc/struct.Arc.html#method.get_mut
102+
[`Arc::try_unwrap`]: http://doc.rust-lang.org/nightly/alloc/arc/struct.Arc.html#method.try_unwrap
103+
[`Box::from_raw`]: http://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html#method.from_raw
104+
[`Box::into_raw`]: http://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html#method.into_raw
105+
[`CStr::to_str`]: http://doc.rust-lang.org/nightly/std/ffi/struct.CStr.html#method.to_str
106+
[`CStr::to_string_lossy`]: http://doc.rust-lang.org/nightly/std/ffi/struct.CStr.html#method.to_string_lossy
107+
[`CString::from_raw`]: http://doc.rust-lang.org/nightly/std/ffi/struct.CString.html#method.from_raw
108+
[`CString::into_raw`]: http://doc.rust-lang.org/nightly/std/ffi/struct.CString.html#method.into_raw
109+
[`IntoRawFd::into_raw_fd`]: http://doc.rust-lang.org/nightly/std/os/unix/io/trait.IntoRawFd.html#tymethod.into_raw_fd
110+
[`IntoRawFd`]: http://doc.rust-lang.org/nightly/std/os/unix/io/trait.IntoRawFd.html
111+
[`Rc::downgrade`]: http://doc.rust-lang.org/nightly/alloc/rc/struct.Rc.html#method.downgrade
112+
[`Rc::get_mut`]: http://doc.rust-lang.org/nightly/alloc/rc/struct.Rc.html#method.get_mut
113+
[`Rc::make_mut`]: http://doc.rust-lang.org/nightly/alloc/rc/struct.Rc.html#method.make_mut
114+
[`Rc::try_unwrap`]: http://doc.rust-lang.org/nightly/alloc/rc/struct.Rc.html#method.try_unwrap
115+
[`Result::expect`]: http://doc.rust-lang.org/nightly/core/result/enum.Result.html#method.expect
116+
[`String::into_boxed_str`]: http://doc.rust-lang.org/nightly/collections/string/struct.String.html#method.into_boxed_str
117+
[`TcpStream::read_timeout`]: http://doc.rust-lang.org/nightly/std/net/struct.TcpStream.html#method.read_timeout
118+
[`TcpStream::set_read_timeout`]: http://doc.rust-lang.org/nightly/std/net/struct.TcpStream.html#method.set_read_timeout
119+
[`TcpStream::write_timeout`]: http://doc.rust-lang.org/nightly/std/net/struct.TcpStream.html#method.write_timeout
120+
[`TcpStream::set_write_timeout`]: http://doc.rust-lang.org/nightly/std/net/struct.TcpStream.html#method.set_write_timeout
121+
[`UdpSocket::read_timeout`]: http://doc.rust-lang.org/nightly/std/net/struct.TcpStream.html#method.read_timeout
122+
[`UdpSocket::set_read_timeout`]: http://doc.rust-lang.org/nightly/std/net/struct.TcpStream.html#method.set_read_timeout
123+
[`UdpSocket::write_timeout`]: http://doc.rust-lang.org/nightly/std/net/struct.TcpStream.html#method.write_timeout
124+
[`UdpSocket::set_write_timeout`]: http://doc.rust-lang.org/nightly/std/net/struct.TcpStream.html#method.set_write_timeout
125+
[`VecDeque::append`]: http://doc.rust-lang.org/nightly/std/collections/struct.VecDeque.html#method.append
126+
[`VecDeque::retain`]: http://doc.rust-lang.org/nightly/std/collections/struct.VecDeque.html#method.retain
127+
[`VecDeque::split_off`]: http://doc.rust-lang.org/nightly/std/collections/struct.VecDeque.html#method.split_off
128+
[`rc::Weak::upgrade`]: http://doc.rust-lang.org/nightly/std/rc/struct.Weak.html#method.upgrade
129+
[`rc::Weak`]: http://doc.rust-lang.org/nightly/std/rc/struct.Weak.html
130+
[`slice::Iter::as_slice`]: http://doc.rust-lang.org/nightly/std/slice/struct.Iter.html#method.as_slice
131+
[`slice::IterMut::into_slice`]: http://doc.rust-lang.org/nightly/std/slice/struct.IterMut.html#method.into_slice
132+
[`str::CharIndices::as_str`]: http://doc.rust-lang.org/nightly/std/str/struct.CharIndices.html#method.as_str
133+
[`str::Chars::as_str`]: http://doc.rust-lang.org/nightly/std/str/struct.Chars.html#method.as_str
134+
[`str::split_at_mut`]: http://doc.rust-lang.org/nightly/std/primitive.str.html#method.split_at_mut
135+
[`str::split_at`]: http://doc.rust-lang.org/nightly/std/primitive.str.html#method.split_at
136+
[`sync::Weak::upgrade`]: http://doc.rust-lang.org/nightly/std/sync/struct.Weak.html#method.upgrade
137+
[`sync::Weak`]: http://doc.rust-lang.org/nightly/std/sync/struct.Weak.html
138+
[`thread::park_timeout`]: http://doc.rust-lang.org/nightly/std/thread/fn.park_timeout.html
139+
[`thread::sleep`]: http://doc.rust-lang.org/nightly/std/thread/fn.sleep.html
140+
[bh2]: https://github.com/rust-lang/rust/pull/28156
141+
[binfat]: https://github.com/rust-lang/rust/pull/28270
142+
[bm]: https://github.com/rust-lang/rust/pull/28197
143+
[cc]: https://github.com/rust-lang/rust/pull/27531
144+
[crlf]: https://github.com/rust-lang/rust/pull/28034
145+
[cu]: https://github.com/rust-lang/cargo/pull/1931
146+
[d]: https://github.com/rust-lang/rust/pull/27825
147+
[dep]: https://github.com/rust-lang/rust/pull/28339
148+
[es]: https://github.com/rust-lang/rust/pull/27956
149+
[ext]: https://github.com/rust-lang/rust/pull/28094
150+
[faststr]: https://github.com/rust-lang/rust/pull/28338
151+
[ffi]: https://github.com/rust-lang/rust/pull/28779
152+
[fp]: https://github.com/rust-lang/rust/pull/28268
153+
[fp2]: https://github.com/rust-lang/rust/pull/28560
154+
[i]: https://github.com/rust-lang/rust/pull/27451
155+
[into]: https://github.com/rust-lang/rust/pull/28039
156+
[it]: https://github.com/rust-lang/rust/pull/27652
157+
[mm]: https://github.com/rust-lang/rust/pull/27338
158+
[mutw]: https://github.com/rust-lang/rust/pull/28368
159+
[sound]: https://github.com/rust-lang/rust/pull/27641
160+
[p]: https://github.com/rust-lang/rust/pull/27866
161+
[pec]: https://github.com/rust-lang/rust/pull/28486
162+
[pr]: https://github.com/rust-lang/rust/pull/27896
163+
[RFC 839]: https://github.com/rust-lang/rfcs/blob/master/text/0839-embrace-extend-extinguish.md
164+
[RFC 1214]: https://github.com/rust-lang/rfcs/blob/master/text/1214-projections-lifetimes-and-wf.md
165+
[s]: https://github.com/rust-lang/rust/pull/27474
166+
[stab]: https://github.com/rust-lang/rust/pull/28339
167+
[stat]: https://github.com/rust-lang/rust/pull/28321
168+
[vd]: https://github.com/rust-lang/rust/pull/28494
169+
1170
Version 1.3.0 (2015-09-17)
2171
==============================
3172

0 commit comments

Comments
 (0)