1
+ Version 1.7.0 (2016-03-03)
2
+ ==========================
3
+
4
+ Language
5
+ --------
6
+
7
+ * Soundness fixes to the interactions between associated types and
8
+ lifetimes, specified in [ RFC 1214] , [ now generate errors] [ 1.7sf ] for
9
+ code that violates the new rules. This is a significant change that
10
+ is known to break existing code, so it has emitted warnings for the
11
+ new error cases since 1.4 to give crate authors time to adapt. The
12
+ details of what is changing are subtle; read the RFC for more.
13
+
14
+ Libraries
15
+ ---------
16
+
17
+ * Stabilized APIs:
18
+ [ ` Path::strip_prefix ` ] [ ] (renamed from relative_from),
19
+ [ ` path::StripPrefixError ` ] [ ] (new error type returned from strip_prefix),
20
+ [ ` Ipv4Addr::is_loopback ` ] ,
21
+ [ ` Ipv4Addr::is_private ` ] ,
22
+ [ ` Ipv4Addr::is_link_local ` ] ,
23
+ [ ` Ipv4Addr::is_multicast ` ] ,
24
+ [ ` Ipv4Addr::is_broadcast ` ] ,
25
+ [ ` Ipv4Addr::is_documentation ` ] ,
26
+ [ ` Ipv6Addr::is_unspecified ` ] ,
27
+ [ ` Ipv6Addr::is_loopback ` ] ,
28
+ [ ` Ipv6Addr::is_multicast ` ] ,
29
+ [ ` Vec::as_slice ` ] ,
30
+ [ ` Vec::as_mut_slice ` ] ,
31
+ [ ` String::as_str ` ] ,
32
+ [ ` String::as_mut_str ` ] ,
33
+ ` <[T]>:: ` [ ` clone_from_slice ` ] , which now requires the two slices to
34
+ be the same length
35
+ ` <[T]>:: ` [ ` sort_by_key ` ] ,
36
+ [ ` i32::checked_rem ` ] ,
37
+ [ ` i32::checked_neg ` ] ,
38
+ [ ` i32::checked_shl ` ] ,
39
+ [ ` i32::checked_shr ` ] ,
40
+ [ ` i32::saturating_mul ` ] ,
41
+ [ ` i32::overflowing_add ` ] ,
42
+ [ ` i32::overflowing_sub ` ] ,
43
+ [ ` i32::overflowing_mul ` ] ,
44
+ [ ` i32::overflowing_div ` ] ,
45
+ [ ` i32::overflowing_rem ` ] ,
46
+ [ ` i32::overflowing_neg ` ] ,
47
+ [ ` i32::overflowing_shl ` ] ,
48
+ [ ` i32::overflowing_shr ` ] ,
49
+ [ ` u32::checked_rem ` ] ,
50
+ [ ` u32::checked_neg ` ] ,
51
+ [ ` u32::checked_shl ` ] ,
52
+ [ ` u32::checked_shl ` ] ,
53
+ [ ` u32::saturating_mul ` ] ,
54
+ [ ` u32::overflowing_add ` ] ,
55
+ [ ` u32::overflowing_sub ` ] ,
56
+ [ ` u32::overflowing_mul ` ] ,
57
+ [ ` u32::overflowing_div ` ] ,
58
+ [ ` u32::overflowing_rem ` ] ,
59
+ [ ` u32::overflowing_neg ` ] ,
60
+ [ ` u32::overflowing_shl ` ] ,
61
+ [ ` u32::overflowing_shr ` ] ,
62
+ checked, saturated, and overflowing operations for other primitive types,
63
+ [ ` ffi::IntoStringError ` ] ,
64
+ [ ` CString::into_string ` ] ,
65
+ [ ` CString::into_bytes ` ] ,
66
+ [ ` CString::into_bytes_with_nul ` ] ,
67
+ ` From<CString> for Vec<u8> ` ,
68
+ [ ` IntoStringError::into_cstring ` ] ,
69
+ [ ` IntoStringError::utf8_error ` ] ,
70
+ ` Error for IntoStringError ` .
71
+ * [ Validating UTF-8 is faster by a factor of between 7 and 14x for
72
+ ASCII input] [ 1.7utf8 ] . This means that creating ` String ` s and ` str ` s
73
+ from bytes is faster.
74
+ * [ The performance of ` LineWriter ` (and thus ` io::stdout ` ) was
75
+ improved by using ` memchr ` to search for newlines] [ 1.7m ] .
76
+ * [ ` f32::to_degrees ` and ` f32::to_radians ` are stable] [ 1.7f ] . The
77
+ ` f64 ` variants were stabilized previously.
78
+ * [ ` BTreeMap ` was rewritten to use less memory improve performance of
79
+ insertion and iteration, the latter by as much as 5x`] [ 1.7bm ] .
80
+ * [ ` BTreeSet ` and its iterators, ` Iter ` , ` IntoIter ` , and ` Range ` are
81
+ covariant over their contained type] [ 1.7bt ] .
82
+ * [ ` LinkedList ` and its iterators, ` Iter ` and ` IntoIter ` are covariant
83
+ over their contained type] [ 1.7ll ] .
84
+ * [ ` str::replace ` now accepts a ` Pattern ` ] [ 1.7rp ] , like other string
85
+ searching methods.
86
+ * [ ` Any ` is implemented for unsized types] [ 1.7a ] .
87
+ * [ ` Hash ` is implemented for ` Duration ` ] [ 1.7h ] .
88
+
89
+ Misc
90
+ ----
91
+
92
+ * [ The ` --error-format=json ` flag to ` rustc ` causes it to emit errors
93
+ in JSON format] [ 1.7j ] . This is an unstable flag and so also requires
94
+ the ` -Z unstable-options ` flag.
95
+ * [ When running tests with ` --test ` , rustdoc will pass ` --cfg `
96
+ arguments to the compiler] [ 1.7dt ] .
97
+ * [ The compiler is built with RPATH information by default] [ 1.7rp ] .
98
+ This means that it will be possible to run ` rustc ` when installed in
99
+ unusual configurations without configuring the dynamic linker search
100
+ path explicitly.
101
+ * [ ` rustc ` passes ` --enable-new-dtags ` to GNU ld] [ 1.7dt ] . This makes
102
+ any RPATH entries (emitted with ` -C rpath ` ) * not* take precedence
103
+ over ` LD_LIBRARY_PATH ` .
104
+
105
+ Cargo
106
+ -----
107
+
108
+ * [ ` cargo rustc ` accepts a ` --profile ` flag that runs ` rustc ` under
109
+ any of the compilation profiles, 'dev', 'bench', or 'test'] [ 1.7cp ] .
110
+ * [ The ` rerun-if-changed ` build script directive no longer causes the
111
+ build script to incorrectly run twice in certain scenarios] [ 1.7rr ] .
112
+
113
+ Compatibility Notes
114
+ -------------------
115
+
116
+ * [ Several bugs in the compiler's visibility calculations were
117
+ fixed] [ 1.7v ] . Since this was found to break significant amounts of
118
+ code, the new errors will be emitted as warnings for several release
119
+ cycles, under the ` private_in_public ` lint.
120
+ * Defaulted type parameters were accidentally accepted in positions
121
+ that were not intended. In this release, [ defaulted type parameters
122
+ appearing outside of type definitions will generate a
123
+ warning] [ 1.7d ] , which will become an error in future releases.
124
+ * [ Parsing "." as a float results in an error instead of
125
+ 0] [ 1.7p ] . That is, ` ".".parse::<f32>() ` returns ` Err ` , not ` Ok(0) ` .
126
+ * [ Borrows of closure parameters may not outlive the closure] [ 1.7bc ] .
127
+
128
+ [ 1.7a ] : https://github.com/rust-lang/rust/pull/30928
129
+ [ 1.7bc ] : https://github.com/rust-lang/rust/pull/30341
130
+ [ 1.7bm ] : https://github.com/rust-lang/rust/pull/30426
131
+ [ 1.7bt ] : https://github.com/rust-lang/rust/pull/30998
132
+ [ 1.7cp ] : https://github.com/rust-lang/cargo/pull/2224
133
+ [ 1.7d ] : https://github.com/rust-lang/rust/pull/30724
134
+ [ 1.7dt ] : https://github.com/rust-lang/rust/pull/30372
135
+ [ 1.7dt ] : https://github.com/rust-lang/rust/pull/30394
136
+ [ 1.7f ] : https://github.com/rust-lang/rust/pull/30672
137
+ [ 1.7h ] : https://github.com/rust-lang/rust/pull/30818
138
+ [ 1.7j ] : https://github.com/rust-lang/rust/pull/30711
139
+ [ 1.7ll ] : https://github.com/rust-lang/rust/pull/30663
140
+ [ 1.7m ] : https://github.com/rust-lang/rust/pull/30381
141
+ [ 1.7p ] : https://github.com/rust-lang/rust/pull/30681
142
+ [ 1.7rp ] : https://github.com/rust-lang/rust/pull/29498
143
+ [ 1.7rp ] : https://github.com/rust-lang/rust/pull/30353
144
+ [ 1.7rr ] : https://github.com/rust-lang/cargo/pull/2279
145
+ [ 1.7sf ] : https://github.com/rust-lang/rust/pull/30389
146
+ [ 1.7utf8 ] : https://github.com/rust-lang/rust/pull/30740
147
+ [ 1.7v ] : https://github.com/rust-lang/rust/pull/29973
148
+ [ RFC 1214 ] : https://github.com/rust-lang/rfcs/blob/master/text/1214-projections-lifetimes-and-wf.md
149
+ [ `clone_from_slice` ] : http://doc.rust-lang.org/nightly/std/primitive.slice.html#method.clone_from_slice
150
+ [ `sort_by_key` ] : http://doc.rust-lang.org/nightly/std/primitive.slice.html#method.sort_by_key
151
+ [ `CString::into_bytes_with_nul` ] : http://doc.rust-lang.org/nightly/std/ffi/struct.CString.html#method.into_bytes_with_nul
152
+ [ `CString::into_bytes` ] : http://doc.rust-lang.org/nightly/std/ffi/struct.CString.html#method.into_bytes
153
+ [ `CString::into_string` ] : http://doc.rust-lang.org/nightly/std/ffi/struct.CString.html#method.into_string
154
+ [ `IntoStringError::into_cstring` ] : http://doc.rust-lang.org/nightly/std/ffi/struct.IntoStringError.html#method.into_cstring
155
+ [ `IntoStringError::utf8_error` ] : http://doc.rust-lang.org/nightly/std/ffi/struct.IntoStringError.html#method.utf8_error
156
+ [ `Ipv4Addr::is_broadcast` ] : http://doc.rust-lang.org/nightly/std/net/struct.Ipv4Addr.html#method.is_broadcast
157
+ [ `Ipv4Addr::is_documentation` ] : http://doc.rust-lang.org/nightly/std/net/struct.Ipv4Addr.html#method.is_documentation
158
+ [ `Ipv4Addr::is_link_local` ] : http://doc.rust-lang.org/nightly/std/net/struct.Ipv4Addr.html#method.is_link_local
159
+ [ `Ipv4Addr::is_loopback` ] : http://doc.rust-lang.org/nightly/std/net/struct.Ipv4Addr.html#method.is_loopback
160
+ [ `Ipv4Addr::is_multicast` ] : http://doc.rust-lang.org/nightly/std/net/struct.Ipv4Addr.html#method.is_multicast
161
+ [ `Ipv4Addr::is_private` ] : http://doc.rust-lang.org/nightly/std/net/struct.Ipv4Addr.html#method.is_private
162
+ [ `Ipv6Addr::is_loopback` ] : http://doc.rust-lang.org/nightly/std/net/struct.Ipv6Addr.html#method.is_loopback
163
+ [ `Ipv6Addr::is_multicast` ] : http://doc.rust-lang.org/nightly/std/net/struct.Ipv6Addr.html#method.is_multicast
164
+ [ `Ipv6Addr::is_unspecified` ] : http://doc.rust-lang.org/nightly/std/net/struct.Ipv6Addr.html#method.is_unspecified
165
+ [ `Path::strip_prefix` ] : http://doc.rust-lang.org/nightly/std/path/struct.Path.html#method.strip_prefix
166
+ [ `String::as_mut_str` ] : http://doc.rust-lang.org/nightly/std/string/struct.String.html#method.as_mut_str
167
+ [ `String::as_str` ] : http://doc.rust-lang.org/nightly/std/string/struct.String.html#method.as_str
168
+ [ `Vec::as_mut_slice` ] : http://doc.rust-lang.org/nightly/std/vec/struct.Vec.html#method.as_mut_slice
169
+ [ `Vec::as_slice` ] : http://doc.rust-lang.org/nightly/std/vec/struct.Vec.html#method.as_slice
170
+ [ `ffi::IntoStringError` ] : http://doc.rust-lang.org/nightly/std/ffi/struct.IntoStringError.html
171
+ [ `i32::checked_neg` ] : http://doc.rust-lang.org/nightly/std/primitive.i32.html#method.checked_neg
172
+ [ `i32::checked_rem` ] : http://doc.rust-lang.org/nightly/std/primitive.i32.html#method.checked_rem
173
+ [ `i32::checked_shl` ] : http://doc.rust-lang.org/nightly/std/primitive.i32.html#method.checked_shl
174
+ [ `i32::checked_shr` ] : http://doc.rust-lang.org/nightly/std/primitive.i32.html#method.checked_shr
175
+ [ `i32::overflowing_add` ] : http://doc.rust-lang.org/nightly/std/primitive.i32.html#method.overflowing_add
176
+ [ `i32::overflowing_div` ] : http://doc.rust-lang.org/nightly/std/primitive.i32.html#method.overflowing_div
177
+ [ `i32::overflowing_mul` ] : http://doc.rust-lang.org/nightly/std/primitive.i32.html#method.overflowing_mul
178
+ [ `i32::overflowing_neg` ] : http://doc.rust-lang.org/nightly/std/primitive.i32.html#method.overflowing_neg
179
+ [ `i32::overflowing_rem` ] : http://doc.rust-lang.org/nightly/std/primitive.i32.html#method.overflowing_rem
180
+ [ `i32::overflowing_shl` ] : http://doc.rust-lang.org/nightly/std/primitive.i32.html#method.overflowing_shl
181
+ [ `i32::overflowing_shr` ] : http://doc.rust-lang.org/nightly/std/primitive.i32.html#method.overflowing_shr
182
+ [ `i32::overflowing_sub` ] : http://doc.rust-lang.org/nightly/std/primitive.i32.html#method.overflowing_sub
183
+ [ `i32::saturating_mul` ] : http://doc.rust-lang.org/nightly/std/primitive.i32.html#method.saturating_mul
184
+ [ `path::StripPrefixError` ] : http://doc.rust-lang.org/nightly/std/path/struct.StripPrefixError.html
185
+ [ `u32::checked_rem` ] : http://doc.rust-lang.org/nightly/std/primitive.u32.html#method.checked_rem
186
+ [ `u32::checked_shl` ] : http://doc.rust-lang.org/nightly/std/primitive.u32.html#method.checked_shl
187
+ [ `u32::overflowing_add` ] : http://doc.rust-lang.org/nightly/std/primitive.u32.html#method.overflowing_add
188
+ [ `u32::overflowing_div` ] : http://doc.rust-lang.org/nightly/std/primitive.u32.html#method.overflowing_div
189
+ [ `u32::overflowing_mul` ] : http://doc.rust-lang.org/nightly/std/primitive.u32.html#method.overflowing_mul
190
+ [ `u32::overflowing_neg` ] : http://doc.rust-lang.org/nightly/std/primitive.u32.html#method.overflowing_neg
191
+ [ `u32::overflowing_rem` ] : http://doc.rust-lang.org/nightly/std/primitive.u32.html#method.overflowing_rem
192
+ [ `u32::overflowing_shl` ] : http://doc.rust-lang.org/nightly/std/primitive.u32.html#method.overflowing_shl
193
+ [ `u32::overflowing_shr` ] : http://doc.rust-lang.org/nightly/std/primitive.u32.html#method.overflowing_shr
194
+ [ `u32::overflowing_sub` ] : http://doc.rust-lang.org/nightly/std/primitive.u32.html#method.overflowing_sub
195
+ [ `u32::saturating_mul` ] : http://doc.rust-lang.org/nightly/std/primitive.u32.html#method.saturating_mul
196
+
197
+
1
198
Version 1.6.0 (2016-01-21)
2
199
==========================
3
200
@@ -16,8 +213,9 @@ Libraries
16
213
---------
17
214
18
215
* Stabilized APIs:
19
- [ ` Read::read_exact ` ] , [ ` ErrorKind::UnexpectedEof ` ] (renamed from
20
- ` UnexpectedEOF ` ), [ ` fs::DirBuilder ` ] , [ ` fs::DirBuilder::new ` ] ,
216
+ [ ` Read::read_exact ` ] ,
217
+ [ ` ErrorKind::UnexpectedEof ` ] [ ] (renamed from ` UnexpectedEOF ` ),
218
+ [ ` fs::DirBuilder ` ] , [ ` fs::DirBuilder::new ` ] ,
21
219
[ ` fs::DirBuilder::recursive ` ] , [ ` fs::DirBuilder::create ` ] ,
22
220
[ ` os::unix::fs::DirBuilderExt ` ] ,
23
221
[ ` os::unix::fs::DirBuilderExt::mode ` ] , [ ` vec::Drain ` ] ,
@@ -29,10 +227,11 @@ Libraries
29
227
[ ` collections::hash_set::HashSet::drain ` ] ,
30
228
[ ` collections::binary_heap::Drain ` ] ,
31
229
[ ` collections::binary_heap::BinaryHeap::drain ` ] ,
32
- [ ` Vec::extend_from_slice ` ] (renamed from ` push_all ` ),
230
+ [ ` Vec::extend_from_slice ` ] [ ] (renamed from ` push_all ` ),
33
231
[ ` Mutex::get_mut ` ] , [ ` Mutex::into_inner ` ] , [ ` RwLock::get_mut ` ] ,
34
- [ ` RwLock::into_inner ` ] , [ ` Iterator::min_by_key ` ] (renamed from
35
- ` min_by ` ), [ ` Iterator::max_by_key ` ] (renamed from ` max_by ` ).
232
+ [ ` RwLock::into_inner ` ] ,
233
+ [ ` Iterator::min_by_key ` ] [ ] (renamed from ` min_by ` ),
234
+ [ ` Iterator::max_by_key ` ] [ ] (renamed from ` max_by ` ).
36
235
* The [ core library] [ 1.6co ] is stable, as are most of its APIs.
37
236
* [ The ` assert_eq! ` macro supports arguments that don't implement
38
237
` Sized ` ] [ 1.6ae ] , such as arrays. In this way it behaves more like
0 commit comments