1 Version 1.12.1 (2016-10-20)
2 ===========================
7 * [ICE: 'rustc' panicked at 'assertion failed: concrete_substs.is_normalized_for_trans()' #36381][36381]
8 * [Confusion with double negation and booleans][36856]
9 * [rustc 1.12.0 fails with SIGSEGV in release mode (syn crate 0.8.0)][36875]
10 * [Rustc 1.12.0 Windows build of `ethcore` crate fails with LLVM error][36924]
11 * [1.12.0: High memory usage when linking in release mode with debug info][36926]
12 * [Corrupted memory after updated to 1.12][36936]
13 * ["Let NullaryConstructor = something;" causes internal compiler error: "tried to overwrite interned AdtDef"][37026]
14 * [Fix ICE: inject bitcast if types mismatch for invokes/calls/stores][37112]
15 * [debuginfo: Handle spread_arg case in MIR-trans in a more stable way.][37153]
17 [36381]: https://github.com/rust-lang/rust/issues/36381
18 [36856]: https://github.com/rust-lang/rust/issues/36856
19 [36875]: https://github.com/rust-lang/rust/issues/36875
20 [36924]: https://github.com/rust-lang/rust/issues/36924
21 [36926]: https://github.com/rust-lang/rust/issues/36926
22 [36936]: https://github.com/rust-lang/rust/issues/36936
23 [37026]: https://github.com/rust-lang/rust/issues/37026
24 [37112]: https://github.com/rust-lang/rust/issues/37112
25 [37153]: https://github.com/rust-lang/rust/issues/37153
28 Version 1.12.0 (2016-09-29)
29 ===========================
34 * [`rustc` translates code to LLVM IR via its own "middle" IR (MIR)]
35 (https://github.com/rust-lang/rust/pull/34096).
36 This translation pass is far simpler than the previous AST->LLVM pass, and
37 creates opportunities to perform new optimizations directly on the MIR. It
38 was previously described [on the Rust blog]
39 (https://blog.rust-lang.org/2016/04/19/MIR.html).
40 * [`rustc` presents a new, more readable error format, along with
41 machine-readable JSON error output for use by IDEs]
42 (https://github.com/rust-lang/rust/pull/35401).
43 Most common editors supporting Rust have been updated to work with it. It was
44 previously described [on the Rust blog]
45 (https://blog.rust-lang.org/2016/08/10/Shape-of-errors-to-come.html).
50 * [`rustc` translates code to LLVM IR via its own "middle" IR (MIR)]
51 (https://github.com/rust-lang/rust/pull/34096).
52 This translation pass is far simpler than the previous AST->LLVM pass, and
53 creates opportunities to perform new optimizations directly on the MIR. It
54 was previously described [on the Rust blog]
55 (https://blog.rust-lang.org/2016/04/19/MIR.html).
56 * [Print the Rust target name, not the LLVM target name, with
57 `--print target-list`]
58 (https://github.com/rust-lang/rust/pull/35489)
59 * [The computation of `TypeId` is correct in some cases where it was previously
60 producing inconsistent results]
61 (https://github.com/rust-lang/rust/pull/35267)
62 * [The `mips-unknown-linux-gnu` target uses hardware floating point by default]
63 (https://github.com/rust-lang/rust/pull/34910)
64 * [The `rustc` arguments, `--print target-cpus`, `--print target-features`,
65 `--print relocation-models`, and `--print code-models` print the available
66 options to the `-C target-cpu`, `-C target-feature`, `-C relocation-model` and
67 `-C code-model` code generation arguments]
68 (https://github.com/rust-lang/rust/pull/34845)
69 * [`rustc` supports three new MUSL targets on ARM: `arm-unknown-linux-musleabi`,
70 `arm-unknown-linux-musleabihf`, and `armv7-unknown-linux-musleabihf`]
71 (https://github.com/rust-lang/rust/pull/35060).
72 These targets produce statically-linked binaries. There are no binary release
78 * [`rustc` presents a new, more readable error format, along with
79 machine-readable JSON error output for use by IDEs]
80 (https://github.com/rust-lang/rust/pull/35401).
81 Most common editors supporting Rust have been updated to work with it. It was
82 previously described [on the Rust blog]
83 (https://blog.rust-lang.org/2016/08/10/Shape-of-errors-to-come.html).
84 * [In error descriptions, references are now described in plain English,
85 instead of as "&-ptr"]
86 (https://github.com/rust-lang/rust/pull/35611)
87 * [In error type descriptions, unknown numeric types are named `{integer}` or
88 `{float}` instead of `_`]
89 (https://github.com/rust-lang/rust/pull/35080)
90 * [`rustc` emits a clearer error when inner attributes follow a doc comment]
91 (https://github.com/rust-lang/rust/pull/34676)
96 * [`macro_rules!` invocations can be made within `macro_rules!` invocations]
97 (https://github.com/rust-lang/rust/pull/34925)
98 * [`macro_rules!` meta-variables are hygienic]
99 (https://github.com/rust-lang/rust/pull/35453)
100 * [`macro_rules!` `tt` matchers can be reparsed correctly, making them much more
102 (https://github.com/rust-lang/rust/pull/34908)
103 * [`macro_rules!` `stmt` matchers correctly consume the entire contents when
104 inside non-braces invocations]
105 (https://github.com/rust-lang/rust/pull/34886)
106 * [Semicolons are properly required as statement delimeters inside
107 `macro_rules!` invocations]
108 (https://github.com/rust-lang/rust/pull/34660)
109 * [`cfg_attr` works on `path` attributes]
110 (https://github.com/rust-lang/rust/pull/34546)
116 (https://doc.rust-lang.org/std/cell/struct.Cell.html#method.as_ptr)
117 * [`RefCell::as_ptr`]
118 (https://doc.rust-lang.org/std/cell/struct.RefCell.html#method.as_ptr)
119 * [`IpAddr::is_unspecified`]
120 (https://doc.rust-lang.org/std/net/enum.IpAddr.html#method.is_unspecified)
121 * [`IpAddr::is_loopback`]
122 (https://doc.rust-lang.org/std/net/enum.IpAddr.html#method.is_loopback)
123 * [`IpAddr::is_multicast`]
124 (https://doc.rust-lang.org/std/net/enum.IpAddr.html#method.is_multicast)
125 * [`Ipv4Addr::is_unspecified`]
126 (https://doc.rust-lang.org/std/net/struct.Ipv4Addr.html#method.is_unspecified)
127 * [`Ipv6Addr::octets`]
128 (https://doc.rust-lang.org/std/net/struct.Ipv6Addr.html#method.octets)
129 * [`LinkedList::contains`]
130 (https://doc.rust-lang.org/std/collections/linked_list/struct.LinkedList.html#method.contains)
131 * [`VecDeque::contains`]
132 (https://doc.rust-lang.org/std/collections/vec_deque/struct.VecDeque.html#method.contains)
133 * [`ExitStatusExt::from_raw`]
134 (https://doc.rust-lang.org/std/os/unix/process/trait.ExitStatusExt.html#tymethod.from_raw).
135 Both on Unix and Windows.
136 * [`Receiver::recv_timeout`]
137 (https://doc.rust-lang.org/std/sync/mpsc/struct.Receiver.html#method.recv_timeout)
138 * [`RecvTimeoutError`]
139 (https://doc.rust-lang.org/std/sync/mpsc/enum.RecvTimeoutError.html)
140 * [`BinaryHeap::peek_mut`]
141 (https://doc.rust-lang.org/std/collections/binary_heap/struct.BinaryHeap.html#method.peek_mut)
143 (https://doc.rust-lang.org/std/collections/binary_heap/struct.PeekMut.html)
145 (https://doc.rust-lang.org/std/iter/trait.Product.html)
147 (https://doc.rust-lang.org/std/iter/trait.Sum.html)
148 * [`OccupiedEntry::remove_entry`]
149 (https://doc.rust-lang.org/std/collections/btree_map/struct.OccupiedEntry.html#method.remove_entry)
150 * [`VacantEntry::into_key`]
151 (https://doc.rust-lang.org/std/collections/btree_map/struct.VacantEntry.html#method.into_key)
156 * [The `format!` macro and friends now allow a single argument to be formatted
158 (https://github.com/rust-lang/rust/pull/33642)
159 * [The lifetime bounds on `[T]::binary_search_by` and
160 `[T]::binary_search_by_key` have been adjusted to be more flexible]
161 (https://github.com/rust-lang/rust/pull/34762)
162 * [`Option` implements `From` for its contained type]
163 (https://github.com/rust-lang/rust/pull/34828)
164 * [`Cell`, `RefCell` and `UnsafeCell` implement `From` for their contained type]
165 (https://github.com/rust-lang/rust/pull/35392)
166 * [`RwLock` panics if the reader count overflows]
167 (https://github.com/rust-lang/rust/pull/35378)
168 * [`vec_deque::Drain`, `hash_map::Drain` and `hash_set::Drain` are covariant]
169 (https://github.com/rust-lang/rust/pull/35354)
170 * [`vec::Drain` and `binary_heap::Drain` are covariant]
171 (https://github.com/rust-lang/rust/pull/34951)
172 * [`Cow<str>` implements `FromIterator` for `char`, `&str` and `String`]
173 (https://github.com/rust-lang/rust/pull/35064)
174 * [Sockets on Linux are correctly closed in subprocesses via `SOCK_CLOEXEC`]
175 (https://github.com/rust-lang/rust/pull/34946)
176 * [`hash_map::Entry`, `hash_map::VacantEntry` and `hash_map::OccupiedEntry`
178 (https://github.com/rust-lang/rust/pull/34937)
179 * [`btree_map::Entry`, `btree_map::VacantEntry` and `btree_map::OccupiedEntry`
181 (https://github.com/rust-lang/rust/pull/34885)
182 * [`String` implements `AddAssign`]
183 (https://github.com/rust-lang/rust/pull/34890)
184 * [Variadic `extern fn` pointers implement the `Clone`, `PartialEq`, `Eq`,
185 `PartialOrd`, `Ord`, `Hash`, `fmt::Pointer`, and `fmt::Debug` traits]
186 (https://github.com/rust-lang/rust/pull/34879)
187 * [`FileType` implements `Debug`]
188 (https://github.com/rust-lang/rust/pull/34757)
189 * [References to `Mutex` and `RwLock` are unwind-safe]
190 (https://github.com/rust-lang/rust/pull/34756)
191 * [`mpsc::sync_channel` `Receiver`s return any available message before
192 reporting a disconnect]
193 (https://github.com/rust-lang/rust/pull/34731)
194 * [Unicode definitions have been updated to 9.0]
195 (https://github.com/rust-lang/rust/pull/34599)
196 * [`env` iterators implement `DoubleEndedIterator`]
197 (https://github.com/rust-lang/rust/pull/33312)
202 * [Support local mirrors of registries]
203 (https://github.com/rust-lang/cargo/pull/2857)
204 * [Add support for command aliases]
205 (https://github.com/rust-lang/cargo/pull/2679)
206 * [Allow `opt-level="s"` / `opt-level="z"` in profile overrides]
207 (https://github.com/rust-lang/cargo/pull/3007)
208 * [Make `cargo doc --open --target` work as expected]
209 (https://github.com/rust-lang/cargo/pull/2988)
210 * [Speed up noop registry updates]
211 (https://github.com/rust-lang/cargo/pull/2974)
213 (https://github.com/rust-lang/cargo/pull/2971)
214 * [Fix `--panic=abort` with plugins]
215 (https://github.com/rust-lang/cargo/pull/2954)
216 * [Always pass `-C metadata` to the compiler]
217 (https://github.com/rust-lang/cargo/pull/2946)
218 * [Fix depending on git repos with workspaces]
219 (https://github.com/rust-lang/cargo/pull/2938)
220 * [Add a `--lib` flag to `cargo new`]
221 (https://github.com/rust-lang/cargo/pull/2921)
222 * [Add `http.cainfo` for custom certs]
223 (https://github.com/rust-lang/cargo/pull/2917)
224 * [Indicate the compilation profile after compiling]
225 (https://github.com/rust-lang/cargo/pull/2909)
226 * [Allow enabling features for dependencies with `--features`]
227 (https://github.com/rust-lang/cargo/pull/2876)
228 * [Add `--jobs` flag to `cargo package`]
229 (https://github.com/rust-lang/cargo/pull/2867)
230 * [Add `--dry-run` to `cargo publish`]
231 (https://github.com/rust-lang/cargo/pull/2849)
232 * [Add support for `RUSTDOCFLAGS`]
233 (https://github.com/rust-lang/cargo/pull/2794)
238 * [`panic::catch_unwind` is more optimized]
239 (https://github.com/rust-lang/rust/pull/35444)
240 * [`panic::catch_unwind` no longer accesses thread-local storage on entry]
241 (https://github.com/rust-lang/rust/pull/34866)
246 * [Test binaries now support a `--test-threads` argument to specify the number
247 of threads used to run tests, and which acts the same as the
248 `RUST_TEST_THREADS` environment variable]
249 (https://github.com/rust-lang/rust/pull/35414)
250 * [The test runner now emits a warning when tests run over 60 seconds]
251 (https://github.com/rust-lang/rust/pull/35405)
252 * [rustdoc: Fix methods in search results]
253 (https://github.com/rust-lang/rust/pull/34752)
254 * [`rust-lldb` warns about unsupported versions of LLDB]
255 (https://github.com/rust-lang/rust/pull/34646)
256 * [Rust releases now come with source packages that can be installed by rustup
257 via `rustup component add rust-src`]
258 (https://github.com/rust-lang/rust/pull/34366).
259 The resulting source code can be used by tools and IDES, located in the
260 sysroot under `lib/rustlib/src`.
265 * [The compiler can now be built against LLVM 3.9]
266 (https://github.com/rust-lang/rust/pull/35594)
267 * Many minor improvements to the documentation.
268 * [The Rust exception handling "personality" routine is now written in Rust]
269 (https://github.com/rust-lang/rust/pull/34832)
274 * [When printing Windows `OsStr`s, unpaired surrogate codepoints are escaped
275 with the lowercase format instead of the uppercase]
276 (https://github.com/rust-lang/rust/pull/35084)
277 * [When formatting strings, if "precision" is specified, the "fill",
278 "align" and "width" specifiers are no longer ignored]
279 (https://github.com/rust-lang/rust/pull/34544)
280 * [The `Debug` impl for strings no longer escapes all non-ASCII characters]
281 (https://github.com/rust-lang/rust/pull/34485)
284 Version 1.11.0 (2016-08-18)
285 ===========================
290 * [`cfg_attr` works on `path` attributes]
291 (https://github.com/rust-lang/rust/pull/34546)
292 * [Support nested `cfg_attr` attributes]
293 (https://github.com/rust-lang/rust/pull/34216)
294 * [Allow statement-generating braced macro invocations at the end of blocks]
295 (https://github.com/rust-lang/rust/pull/34436)
296 * [Macros can be expanded inside of trait definitions]
297 (https://github.com/rust-lang/rust/pull/34213)
298 * [`#[macro_use]` works properly when it is itself expanded from a macro]
299 (https://github.com/rust-lang/rust/pull/34032)
304 * [`BinaryHeap::append`]
305 (https://doc.rust-lang.org/std/collections/binary_heap/struct.BinaryHeap.html#method.append)
306 * [`BTreeMap::append`]
307 (https://doc.rust-lang.org/std/collections/btree_map/struct.BTreeMap.html#method.append)
308 * [`BTreeMap::split_off`]
309 (https://doc.rust-lang.org/std/collections/btree_map/struct.BTreeMap.html#method.split_off)
310 * [`BTreeSet::append`]
311 (https://doc.rust-lang.org/std/collections/btree_set/struct.BTreeSet.html#method.append)
312 * [`BTreeSet::split_off`]
313 (https://doc.rust-lang.org/std/collections/btree_set/struct.BTreeSet.html#method.split_off)
314 * [`f32::to_degrees`]
315 (https://doc.rust-lang.org/std/primitive.f32.html#method.to_degrees)
316 (in libcore - previously stabilized in libstd)
317 * [`f32::to_radians`]
318 (https://doc.rust-lang.org/std/primitive.f32.html#method.to_radians)
319 (in libcore - previously stabilized in libstd)
320 * [`f64::to_degrees`]
321 (https://doc.rust-lang.org/std/primitive.f64.html#method.to_degrees)
322 (in libcore - previously stabilized in libstd)
323 * [`f64::to_radians`]
324 (https://doc.rust-lang.org/std/primitive.f64.html#method.to_radians)
325 (in libcore - previously stabilized in libstd)
327 (https://doc.rust-lang.org/std/iter/trait.Iterator.html#method.sum)
328 * [`Iterator::product`]
329 (https://doc.rust-lang.org/std/iter/trait.Iterator.html#method.sum)
331 (https://doc.rust-lang.org/std/cell/struct.Cell.html#method.get_mut)
332 * [`RefCell::get_mut`]
333 (https://doc.rust-lang.org/std/cell/struct.RefCell.html#method.get_mut)
338 * [The `thread_local!` macro supports multiple definitions in a single
339 invocation, and can apply attributes]
340 (https://github.com/rust-lang/rust/pull/34077)
341 * [`Cow` implements `Default`]
342 (https://github.com/rust-lang/rust/pull/34305)
343 * [`Wrapping` implements binary, octal, lower-hex and upper-hex
344 `Display` formatting]
345 (https://github.com/rust-lang/rust/pull/34190)
346 * [The range types implement `Hash`]
347 (https://github.com/rust-lang/rust/pull/34180)
348 * [`lookup_host` ignores unknown address types]
349 (https://github.com/rust-lang/rust/pull/34067)
350 * [`assert_eq!` accepts a custom error message, like `assert!` does]
351 (https://github.com/rust-lang/rust/pull/33976)
352 * [The main thread is now called "main" instead of "<main>"]
353 (https://github.com/rust-lang/rust/pull/33803)
358 * [Disallow specifying features of transitive deps]
359 (https://github.com/rust-lang/cargo/pull/2821)
360 * [Add color support for Windows consoles]
361 (https://github.com/rust-lang/cargo/pull/2804)
362 * [Fix `harness = false` on `[lib]` sections]
363 (https://github.com/rust-lang/cargo/pull/2795)
364 * [Don't panic when `links` contains a '.']
365 (https://github.com/rust-lang/cargo/pull/2787)
366 * [Build scripts can emit warnings]
367 (https://github.com/rust-lang/cargo/pull/2630),
368 and `-vv` prints warnings for all crates.
369 * [Ignore file locks on OS X NFS mounts]
370 (https://github.com/rust-lang/cargo/pull/2720)
371 * [Don't warn about `package.metadata` keys]
372 (https://github.com/rust-lang/cargo/pull/2668).
373 This provides room for expansion by arbitrary tools.
374 * [Add support for cdylib crate types]
375 (https://github.com/rust-lang/cargo/pull/2741)
376 * [Prevent publishing crates when files are dirty]
377 (https://github.com/rust-lang/cargo/pull/2781)
378 * [Don't fetch all crates on clean]
379 (https://github.com/rust-lang/cargo/pull/2704)
380 * [Propagate --color option to rustc]
381 (https://github.com/rust-lang/cargo/pull/2779)
382 * [Fix `cargo doc --open` on Windows]
383 (https://github.com/rust-lang/cargo/pull/2780)
384 * [Improve autocompletion]
385 (https://github.com/rust-lang/cargo/pull/2772)
386 * [Configure colors of stderr as well as stdout]
387 (https://github.com/rust-lang/cargo/pull/2739)
392 * [Caching projections speeds up type check dramatically for some
394 (https://github.com/rust-lang/rust/pull/33816)
395 * [The default `HashMap` hasher is SipHash 1-3 instead of SipHash 2-4]
396 (https://github.com/rust-lang/rust/pull/33940)
397 This hasher is faster, but is believed to provide sufficient
398 protection from collision attacks.
399 * [Comparison of `Ipv4Addr` is 10x faster]
400 (https://github.com/rust-lang/rust/pull/33891)
405 * [Fix empty implementation section on some module pages]
406 (https://github.com/rust-lang/rust/pull/34536)
407 * [Fix inlined renamed reexports in import lists]
408 (https://github.com/rust-lang/rust/pull/34479)
409 * [Fix search result layout for enum variants and struct fields]
410 (https://github.com/rust-lang/rust/pull/34477)
411 * [Fix issues with source links to external crates]
412 (https://github.com/rust-lang/rust/pull/34387)
413 * [Fix redirect pages for renamed reexports]
414 (https://github.com/rust-lang/rust/pull/34245)
419 * [rustc is better at finding the MSVC toolchain]
420 (https://github.com/rust-lang/rust/pull/34492)
421 * [When emitting debug info, rustc emits frame pointers for closures,
422 shims and glue, as it does for all other functions]
423 (https://github.com/rust-lang/rust/pull/33909)
424 * [rust-lldb warns about unsupported versions of LLDB]
425 (https://github.com/rust-lang/rust/pull/34646)
426 * Many more errors have been given error codes and extended
428 * API documentation continues to be improved, with many new examples
433 * [rustc no longer hangs when dependencies recursively re-export
435 (https://github.com/rust-lang/rust/pull/34542)
436 * [rustc requires LLVM 3.7+]
437 (https://github.com/rust-lang/rust/pull/34104)
438 * [The 'How Safe and Unsafe Interact' chapter of The Rustonomicon was
440 (https://github.com/rust-lang/rust/pull/33895)
441 * [rustc support 16-bit pointer sizes]
442 (https://github.com/rust-lang/rust/pull/33460).
443 No targets use this yet, but it works toward AVR support.
448 * [`const`s and `static`s may not have unsized types]
449 (https://github.com/rust-lang/rust/pull/34443)
450 * [The new follow-set rules that place restrictions on `macro_rules!`
451 in order to ensure syntax forward-compatibility have been enabled]
452 (https://github.com/rust-lang/rust/pull/33982)
453 This was an [ammendment to RFC 550]
454 (https://github.com/rust-lang/rfcs/pull/1384),
455 and has been a warning since 1.10.
456 * [`cfg` attribute process has been refactored to fix various bugs]
457 (https://github.com/rust-lang/rust/pull/33706).
458 This causes breakage in some corner cases.
461 Version 1.10.0 (2016-07-07)
462 ===========================
467 * [Allow `concat_idents!` in type positions as well as in expression
469 (https://github.com/rust-lang/rust/pull/33735).
470 * [`Copy` types are required to have a trivial implementation of `Clone`]
471 (https://github.com/rust-lang/rust/pull/33420).
472 [RFC 1521](https://github.com/rust-lang/rfcs/blob/master/text/1521-copy-clone-semantics.md).
473 * [Single-variant enums support the `#[repr(..)]` attribute]
474 (https://github.com/rust-lang/rust/pull/33355).
475 * [Fix `#[derive(RustcEncodable)]` in the presence of other `encode` methods]
476 (https://github.com/rust-lang/rust/pull/32908).
477 * [`panic!` can be converted to a runtime abort with the
478 `-C panic=abort` flag]
479 (https://github.com/rust-lang/rust/pull/32900).
480 [RFC 1513](https://github.com/rust-lang/rfcs/blob/master/text/1513-less-unwinding.md).
481 * [Add a new crate type, 'cdylib']
482 (https://github.com/rust-lang/rust/pull/33553).
483 cdylibs are dynamic libraries suitable for loading by non-Rust hosts.
484 [RFC 1510](https://github.com/rust-lang/rfcs/blob/master/text/1510-rdylib.md).
485 Note that Cargo does not yet directly support cdylibs.
490 * `os::windows::fs::OpenOptionsExt::access_mode`
491 * `os::windows::fs::OpenOptionsExt::share_mode`
492 * `os::windows::fs::OpenOptionsExt::custom_flags`
493 * `os::windows::fs::OpenOptionsExt::attributes`
494 * `os::windows::fs::OpenOptionsExt::security_qos_flags`
495 * `os::unix::fs::OpenOptionsExt::custom_flags`
496 * [`sync::Weak::new`]
497 (http://doc.rust-lang.org/alloc/arc/struct.Weak.html#method.new)
498 * `Default for sync::Weak`
499 * [`panic::set_hook`]
500 (http://doc.rust-lang.org/std/panic/fn.set_hook.html)
501 * [`panic::take_hook`]
502 (http://doc.rust-lang.org/std/panic/fn.take_hook.html)
503 * [`panic::PanicInfo`]
504 (http://doc.rust-lang.org/std/panic/struct.PanicInfo.html)
505 * [`panic::PanicInfo::payload`]
506 (http://doc.rust-lang.org/std/panic/struct.PanicInfo.html#method.payload)
507 * [`panic::PanicInfo::location`]
508 (http://doc.rust-lang.org/std/panic/struct.PanicInfo.html#method.location)
509 * [`panic::Location`]
510 (http://doc.rust-lang.org/std/panic/struct.Location.html)
511 * [`panic::Location::file`]
512 (http://doc.rust-lang.org/std/panic/struct.Location.html#method.file)
513 * [`panic::Location::line`]
514 (http://doc.rust-lang.org/std/panic/struct.Location.html#method.line)
515 * [`ffi::CStr::from_bytes_with_nul`]
516 (http://doc.rust-lang.org/std/ffi/struct.CStr.html#method.from_bytes_with_nul)
517 * [`ffi::CStr::from_bytes_with_nul_unchecked`]
518 (http://doc.rust-lang.org/std/ffi/struct.CStr.html#method.from_bytes_with_nul_unchecked)
519 * [`ffi::FromBytesWithNulError`]
520 (http://doc.rust-lang.org/std/ffi/struct.FromBytesWithNulError.html)
521 * [`fs::Metadata::modified`]
522 (http://doc.rust-lang.org/std/fs/struct.Metadata.html#method.modified)
523 * [`fs::Metadata::accessed`]
524 (http://doc.rust-lang.org/std/fs/struct.Metadata.html#method.accessed)
525 * [`fs::Metadata::created`]
526 (http://doc.rust-lang.org/std/fs/struct.Metadata.html#method.created)
527 * `sync::atomic::Atomic{Usize,Isize,Bool,Ptr}::compare_exchange`
528 * `sync::atomic::Atomic{Usize,Isize,Bool,Ptr}::compare_exchange_weak`
529 * `collections::{btree,hash}_map::{Occupied,Vacant,}Entry::key`
530 * `os::unix::net::{UnixStream, UnixListener, UnixDatagram, SocketAddr}`
531 * [`SocketAddr::is_unnamed`]
532 (http://doc.rust-lang.org/std/os/unix/net/struct.SocketAddr.html#method.is_unnamed)
533 * [`SocketAddr::as_pathname`]
534 (http://doc.rust-lang.org/std/os/unix/net/struct.SocketAddr.html#method.as_pathname)
535 * [`UnixStream::connect`]
536 (http://doc.rust-lang.org/std/os/unix/net/struct.UnixStream.html#method.connect)
537 * [`UnixStream::pair`]
538 (http://doc.rust-lang.org/std/os/unix/net/struct.UnixStream.html#method.pair)
539 * [`UnixStream::try_clone`]
540 (http://doc.rust-lang.org/std/os/unix/net/struct.UnixStream.html#method.try_clone)
541 * [`UnixStream::local_addr`]
542 (http://doc.rust-lang.org/std/os/unix/net/struct.UnixStream.html#method.local_addr)
543 * [`UnixStream::peer_addr`]
544 (http://doc.rust-lang.org/std/os/unix/net/struct.UnixStream.html#method.peer_addr)
545 * [`UnixStream::set_read_timeout`]
546 (http://doc.rust-lang.org/std/os/unix/net/struct.UnixStream.html#method.read_timeout)
547 * [`UnixStream::set_write_timeout`]
548 (http://doc.rust-lang.org/std/os/unix/net/struct.UnixStream.html#method.write_timeout)
549 * [`UnixStream::read_timeout`]
550 (http://doc.rust-lang.org/std/os/unix/net/struct.UnixStream.html#method.read_timeout)
551 * [`UnixStream::write_timeout`]
552 (http://doc.rust-lang.org/std/os/unix/net/struct.UnixStream.html#method.write_timeout)
553 * [`UnixStream::set_nonblocking`]
554 (http://doc.rust-lang.org/std/os/unix/net/struct.UnixStream.html#method.set_nonblocking)
555 * [`UnixStream::take_error`]
556 (http://doc.rust-lang.org/std/os/unix/net/struct.UnixStream.html#method.take_error)
557 * [`UnixStream::shutdown`]
558 (http://doc.rust-lang.org/std/os/unix/net/struct.UnixStream.html#method.shutdown)
559 * Read/Write/RawFd impls for `UnixStream`
560 * [`UnixListener::bind`]
561 (http://doc.rust-lang.org/std/os/unix/net/struct.UnixListener.html#method.bind)
562 * [`UnixListener::accept`]
563 (http://doc.rust-lang.org/std/os/unix/net/struct.UnixListener.html#method.accept)
564 * [`UnixListener::try_clone`]
565 (http://doc.rust-lang.org/std/os/unix/net/struct.UnixListener.html#method.try_clone)
566 * [`UnixListener::local_addr`]
567 (http://doc.rust-lang.org/std/os/unix/net/struct.UnixListener.html#method.local_addr)
568 * [`UnixListener::set_nonblocking`]
569 (http://doc.rust-lang.org/std/os/unix/net/struct.UnixListener.html#method.set_nonblocking)
570 * [`UnixListener::take_error`]
571 (http://doc.rust-lang.org/std/os/unix/net/struct.UnixListener.html#method.take_error)
572 * [`UnixListener::incoming`]
573 (http://doc.rust-lang.org/std/os/unix/net/struct.UnixListener.html#method.incoming)
574 * RawFd impls for `UnixListener`
575 * [`UnixDatagram::bind`]
576 (http://doc.rust-lang.org/std/os/unix/net/struct.UnixDatagram.html#method.bind)
577 * [`UnixDatagram::unbound`]
578 (http://doc.rust-lang.org/std/os/unix/net/struct.UnixDatagram.html#method.unbound)
579 * [`UnixDatagram::pair`]
580 (http://doc.rust-lang.org/std/os/unix/net/struct.UnixDatagram.html#method.pair)
581 * [`UnixDatagram::connect`]
582 (http://doc.rust-lang.org/std/os/unix/net/struct.UnixDatagram.html#method.connect)
583 * [`UnixDatagram::try_clone`]
584 (http://doc.rust-lang.org/std/os/unix/net/struct.UnixDatagram.html#method.try_clone)
585 * [`UnixDatagram::local_addr`]
586 (http://doc.rust-lang.org/std/os/unix/net/struct.UnixDatagram.html#method.local_addr)
587 * [`UnixDatagram::peer_addr`]
588 (http://doc.rust-lang.org/std/os/unix/net/struct.UnixDatagram.html#method.peer_addr)
589 * [`UnixDatagram::recv_from`]
590 (http://doc.rust-lang.org/std/os/unix/net/struct.UnixDatagram.html#method.recv_from)
591 * [`UnixDatagram::recv`]
592 (http://doc.rust-lang.org/std/os/unix/net/struct.UnixDatagram.html#method.recv)
593 * [`UnixDatagram::send_to`]
594 (http://doc.rust-lang.org/std/os/unix/net/struct.UnixDatagram.html#method.send_to)
595 * [`UnixDatagram::send`]
596 (http://doc.rust-lang.org/std/os/unix/net/struct.UnixDatagram.html#method.send)
597 * [`UnixDatagram::set_read_timeout`]
598 (http://doc.rust-lang.org/std/os/unix/net/struct.UnixDatagram.html#method.set_read_timeout)
599 * [`UnixDatagram::set_write_timeout`]
600 (http://doc.rust-lang.org/std/os/unix/net/struct.UnixDatagram.html#method.set_write_timeout)
601 * [`UnixDatagram::read_timeout`]
602 (http://doc.rust-lang.org/std/os/unix/net/struct.UnixDatagram.html#method.read_timeout)
603 * [`UnixDatagram::write_timeout`]
604 (http://doc.rust-lang.org/std/os/unix/net/struct.UnixDatagram.html#method.write_timeout)
605 * [`UnixDatagram::set_nonblocking`]
606 (http://doc.rust-lang.org/std/os/unix/net/struct.UnixDatagram.html#method.set_nonblocking)
607 * [`UnixDatagram::take_error`]
608 (http://doc.rust-lang.org/std/os/unix/net/struct.UnixDatagram.html#method.take_error)
609 * [`UnixDatagram::shutdown`]
610 (http://doc.rust-lang.org/std/os/unix/net/struct.UnixDatagram.html#method.shutdown)
611 * RawFd impls for `UnixDatagram`
612 * `{BTree,Hash}Map::values_mut`
613 * [`<[_]>::binary_search_by_key`]
614 (http://doc.rust-lang.org/beta/std/primitive.slice.html#method.binary_search_by_key)
619 * [The `abs_sub` method of floats is deprecated]
620 (https://github.com/rust-lang/rust/pull/33664).
621 The semantics of this minor method are subtle and probably not what
623 * [Add implementation of Ord for Cell<T> and RefCell<T> where T: Ord]
624 (https://github.com/rust-lang/rust/pull/33306).
625 * [On Linux, if `HashMap`s can't be initialized with `getrandom` they
626 will fall back to `/dev/urandom` temporarily to avoid blocking
628 (https://github.com/rust-lang/rust/pull/33086).
629 * [Implemented negation for wrapping numerals]
630 (https://github.com/rust-lang/rust/pull/33067).
631 * [Implement `Clone` for `binary_heap::IntoIter`]
632 (https://github.com/rust-lang/rust/pull/33050).
633 * [Implement `Display` and `Hash` for `std::num::Wrapping`]
634 (https://github.com/rust-lang/rust/pull/33023).
635 * [Add `Default` implementation for `&CStr`, `CString`]
636 (https://github.com/rust-lang/rust/pull/32990).
637 * [Implement `From<Vec<T>>` and `Into<Vec<T>>` for `VecDeque<T>`]
638 (https://github.com/rust-lang/rust/pull/32866).
639 * [Implement `Default` for `UnsafeCell`, `fmt::Error`, `Condvar`,
641 (https://github.com/rust-lang/rust/pull/32785).
645 * [Cargo.toml supports the `profile.*.panic` option]
646 (https://github.com/rust-lang/cargo/pull/2687).
647 This controls the runtime behavior of the `panic!` macro
648 and can be either "unwind" (the default), or "abort".
649 [RFC 1513](https://github.com/rust-lang/rfcs/blob/master/text/1513-less-unwinding.md).
650 * [Don't throw away errors with `-p` arguments]
651 (https://github.com/rust-lang/cargo/pull/2723).
652 * [Report status to stderr instead of stdout]
653 (https://github.com/rust-lang/cargo/pull/2693).
654 * [Build scripts are passed a `CARGO_MANIFEST_LINKS` environment
655 variable that corresponds to the `links` field of the manifest]
656 (https://github.com/rust-lang/cargo/pull/2710).
657 * [Ban keywords from crate names]
658 (https://github.com/rust-lang/cargo/pull/2707).
659 * [Canonicalize `CARGO_HOME` on Windows]
660 (https://github.com/rust-lang/cargo/pull/2604).
661 * [Retry network requests]
662 (https://github.com/rust-lang/cargo/pull/2396).
663 By default they are retried twice, which can be customized with the
664 `net.retry` value in `.cargo/config`.
665 * [Don't print extra error info for failing subcommands]
666 (https://github.com/rust-lang/cargo/pull/2674).
667 * [Add `--force` flag to `cargo install`]
668 (https://github.com/rust-lang/cargo/pull/2405).
669 * [Don't use `flock` on NFS mounts]
670 (https://github.com/rust-lang/cargo/pull/2623).
671 * [Prefer building `cargo install` artifacts in temporary directories]
672 (https://github.com/rust-lang/cargo/pull/2610).
673 Makes it possible to install multiple crates in parallel.
674 * [Add `cargo test --doc`]
675 (https://github.com/rust-lang/cargo/pull/2578).
676 * [Add `cargo --explain`]
677 (https://github.com/rust-lang/cargo/pull/2551).
678 * [Don't print warnings when `-q` is passed]
679 (https://github.com/rust-lang/cargo/pull/2576).
680 * [Add `cargo doc --lib` and `--bin`]
681 (https://github.com/rust-lang/cargo/pull/2577).
682 * [Don't require build script output to be UTF-8]
683 (https://github.com/rust-lang/cargo/pull/2560).
684 * [Correctly attempt multiple git usernames]
685 (https://github.com/rust-lang/cargo/pull/2584).
690 * [rustc memory usage was reduced by refactoring the context used for
692 (https://github.com/rust-lang/rust/pull/33425).
693 * [Speed up creation of `HashMap`s by caching the random keys used
694 to initialize the hash state]
695 (https://github.com/rust-lang/rust/pull/33318).
696 * [The `find` implementation for `Chain` iterators is 2x faster]
697 (https://github.com/rust-lang/rust/pull/33289).
698 * [Trait selection optimizations speed up type checking by 15%]
699 (https://github.com/rust-lang/rust/pull/33138).
700 * [Efficient trie lookup for boolean Unicode properties]
701 (https://github.com/rust-lang/rust/pull/33098).
702 10x faster than the previous lookup tables.
703 * [Special case `#[derive(Copy, Clone)]` to avoid bloat]
704 (https://github.com/rust-lang/rust/pull/31414).
709 * Many incremental improvements to documentation and rustdoc.
710 * [rustdoc: List blanket trait impls]
711 (https://github.com/rust-lang/rust/pull/33514).
712 * [rustdoc: Clean up ABI rendering]
713 (https://github.com/rust-lang/rust/pull/33151).
714 * [Indexing with the wrong type produces a more informative error]
715 (https://github.com/rust-lang/rust/pull/33401).
716 * [Improve diagnostics for constants being used in irrefutable patterns]
717 (https://github.com/rust-lang/rust/pull/33406).
718 * [When many method candidates are in scope limit the suggestions to 10]
719 (https://github.com/rust-lang/rust/pull/33338).
720 * [Remove confusing suggestion when calling a `fn` type]
721 (https://github.com/rust-lang/rust/pull/33325).
722 * [Do not suggest changing `&mut self` to `&mut mut self`]
723 (https://github.com/rust-lang/rust/pull/33319).
728 * [Update i686-linux-android features to match Android ABI]
729 (https://github.com/rust-lang/rust/pull/33651).
730 * [Update aarch64-linux-android features to match Android ABI]
731 (https://github.com/rust-lang/rust/pull/33500).
732 * [`std` no longer prints backtraces on platforms where the running
733 module must be loaded with `env::current_exe`, which can't be relied
734 on](https://github.com/rust-lang/rust/pull/33554).
735 * This release includes std binaries for the i586-unknown-linux-gnu,
736 i686-unknown-linux-musl, and armv7-linux-androideabi targets. The
737 i586 target is for old x86 hardware without SSE2, and the armv7
738 target is for Android running on modern ARM architectures.
739 * [The `rust-gdb` and `rust-lldb` scripts are distributed on all
740 Unix platforms](https://github.com/rust-lang/rust/pull/32835).
741 * [On Unix the runtime aborts by calling `libc::abort` instead of
742 generating an illegal instruction]
743 (https://github.com/rust-lang/rust/pull/31457).
744 * [Rust is now bootstrapped from the previous release of Rust,
745 instead of a snapshot from an arbitrary commit]
746 (https://github.com/rust-lang/rust/pull/32942).
751 * [`AtomicBool` is now bool-sized, not word-sized]
752 (https://github.com/rust-lang/rust/pull/33579).
753 * [`target_env` for Linux ARM targets is just `gnu`, not
754 `gnueabihf`, `gnueabi`, etc]
755 (https://github.com/rust-lang/rust/pull/33403).
756 * [Consistently panic on overflow in `Duration::new`]
757 (https://github.com/rust-lang/rust/pull/33072).
758 * [Change `String::truncate` to panic less]
759 (https://github.com/rust-lang/rust/pull/32977).
760 * [Add `:block` to the follow set for `:ty` and `:path`]
761 (https://github.com/rust-lang/rust/pull/32945).
762 Affects how macros are parsed.
763 * [Fix macro hygiene bug]
764 (https://github.com/rust-lang/rust/pull/32923).
765 * [Feature-gated attributes on macro-generated macro invocations are
767 (https://github.com/rust-lang/rust/pull/32791).
768 * [Suppress fallback and ambiguity errors during type inference]
769 (https://github.com/rust-lang/rust/pull/32258).
770 This caused some minor changes to type inference.
773 Version 1.9.0 (2016-05-26)
774 ==========================
779 * The `#[deprecated]` attribute when applied to an API will generate
780 warnings when used. The warnings may be suppressed with
781 `#[allow(deprecated)]`. [RFC 1270].
782 * [`fn` item types are zero sized, and each `fn` names a unique
783 type][1.9fn]. This will break code that transmutes `fn`s, so calling
784 `transmute` on a `fn` type will generate a warning for a few cycles,
785 then will be converted to an error.
786 * [Field and method resolution understand visibility, so private
787 fields and methods cannot prevent the proper use of public fields
789 * [The parser considers unicode codepoints in the
790 `PATTERN_WHITE_SPACE` category to be whitespace][1.9ws].
796 * [`std::panic::catch_unwind`][] (renamed from `recover`)
797 * [`std::panic::resume_unwind`][] (renamed from `propagate`)
798 * [`std::panic::AssertUnwindSafe`][] (renamed from `AssertRecoverSafe`)
799 * [`std::panic::UnwindSafe`][] (renamed from `RecoverSafe`)
800 * [`str::is_char_boundary`]
801 * [`<*const T>::as_ref`]
802 * [`<*mut T>::as_ref`]
803 * [`<*mut T>::as_mut`]
804 * [`AsciiExt::make_ascii_uppercase`]
805 * [`AsciiExt::make_ascii_lowercase`]
806 * [`char::decode_utf16`]
807 * [`char::DecodeUtf16`]
808 * [`char::DecodeUtf16Error`]
809 * [`char::DecodeUtf16Error::unpaired_surrogate`]
811 * [`BTreeSet::replace`]
814 * [`HashSet::replace`]
816 * [`OsString::with_capacity`]
817 * [`OsString::clear`]
818 * [`OsString::capacity`]
819 * [`OsString::reserve`]
820 * [`OsString::reserve_exact`]
821 * [`OsStr::is_empty`]
823 * [`std::os::unix::thread`]
826 * [`JoinHandleExt::as_pthread_t`]
827 * [`JoinHandleExt::into_pthread_t`]
828 * [`HashSet::hasher`]
829 * [`HashMap::hasher`]
830 * [`CommandExt::exec`]
831 * [`File::try_clone`]
832 * [`SocketAddr::set_ip`]
833 * [`SocketAddr::set_port`]
834 * [`SocketAddrV4::set_ip`]
835 * [`SocketAddrV4::set_port`]
836 * [`SocketAddrV6::set_ip`]
837 * [`SocketAddrV6::set_port`]
838 * [`SocketAddrV6::set_flowinfo`]
839 * [`SocketAddrV6::set_scope_id`]
840 * [`slice::copy_from_slice`]
841 * [`ptr::read_volatile`]
842 * [`ptr::write_volatile`]
843 * [`OpenOptions::create_new`]
844 * [`TcpStream::set_nodelay`]
845 * [`TcpStream::nodelay`]
846 * [`TcpStream::set_ttl`]
848 * [`TcpStream::set_only_v6`]
849 * [`TcpStream::only_v6`]
850 * [`TcpStream::take_error`]
851 * [`TcpStream::set_nonblocking`]
852 * [`TcpListener::set_ttl`]
853 * [`TcpListener::ttl`]
854 * [`TcpListener::set_only_v6`]
855 * [`TcpListener::only_v6`]
856 * [`TcpListener::take_error`]
857 * [`TcpListener::set_nonblocking`]
858 * [`UdpSocket::set_broadcast`]
859 * [`UdpSocket::broadcast`]
860 * [`UdpSocket::set_multicast_loop_v4`]
861 * [`UdpSocket::multicast_loop_v4`]
862 * [`UdpSocket::set_multicast_ttl_v4`]
863 * [`UdpSocket::multicast_ttl_v4`]
864 * [`UdpSocket::set_multicast_loop_v6`]
865 * [`UdpSocket::multicast_loop_v6`]
866 * [`UdpSocket::set_multicast_ttl_v6`]
867 * [`UdpSocket::multicast_ttl_v6`]
868 * [`UdpSocket::set_ttl`]
870 * [`UdpSocket::set_only_v6`]
871 * [`UdpSocket::only_v6`]
872 * [`UdpSocket::join_multicast_v4`]
873 * [`UdpSocket::join_multicast_v6`]
874 * [`UdpSocket::leave_multicast_v4`]
875 * [`UdpSocket::leave_multicast_v6`]
876 * [`UdpSocket::take_error`]
877 * [`UdpSocket::connect`]
878 * [`UdpSocket::send`]
879 * [`UdpSocket::recv`]
880 * [`UdpSocket::set_nonblocking`]
885 * [`std::sync::Once` is poisoned if its initialization function
887 * [`cell::Ref` and `cell::RefMut` can contain unsized types][1.9cu].
888 * [Most types implement `fmt::Debug`][1.9db].
889 * [The default buffer size used by `BufReader` and `BufWriter` was
890 reduced to 8K, from 64K][1.9bf]. This is in line with the buffer size
891 used by other languages.
892 * [`Instant`, `SystemTime` and `Duration` implement `+=` and `-=`.
893 `Duration` additionally implements `*=` and `/=`][1.9ta].
894 * [`Skip` is a `DoubleEndedIterator`][1.9sk].
895 * [`From<[u8; 4]>` is implemented for `Ipv4Addr`][1.9fi].
896 * [`Chain` implements `BufRead`][1.9ch].
897 * [`HashMap`, `HashSet` and iterators are covariant][1.9hc].
902 * [Cargo can now run concurrently][1.9cc].
903 * [Top-level overrides allow specific revisions of crates to be
904 overridden through the entire crate graph][1.9ct]. This is intended
905 to make upgrades easier for large projects, by allowing crates to be
906 forked temporarily until they've been upgraded and republished.
907 * [Cargo exports a `CARGO_PKG_AUTHORS` environment variable][1.9cp].
908 * [Cargo will pass the contents of the `RUSTFLAGS` variable to `rustc`
909 on the commandline][1.9cf]. `rustc` arguments can also be specified
910 in the `build.rustflags` configuration key.
915 * [The time complexity of comparing variables for equivalence during type
916 unification is reduced from _O_(_n_!) to _O_(_n_)][1.9tu]. This leads
917 to major compilation time improvement in some scenarios.
918 * [`ToString` is specialized for `str`, giving it the same performance
919 as `to_owned`][1.9ts].
920 * [Spawning processes with `Command::output` no longer creates extra
922 * [`#[derive(PartialEq)]` and `#[derive(PartialOrd)]` emit less code
923 for C-like enums][1.9cl].
928 * [Passing the `--quiet` flag to a test runner will produce
929 much-abbreviated output][1.9q].
930 * The Rust Project now publishes std binaries for the
931 `mips-unknown-linux-musl`, `mipsel-unknown-linux-musl`, and
932 `i586-pc-windows-msvc` targets.
937 * [`std::sync::Once` is poisoned if its initialization function
939 * [It is illegal to define methods with the same name in overlapping
940 inherent `impl` blocks][1.9sn].
941 * [`fn` item types are zero sized, and each `fn` names a unique
942 type][1.9fn]. This will break code that transmutes `fn`s, so calling
943 `transmute` on a `fn` type will generate a warning for a few cycles,
944 then will be converted to an error.
945 * [Improvements to const evaluation may trigger new errors when integer
946 literals are out of range][1.9ce].
949 [1.9bf]: https://github.com/rust-lang/rust/pull/32695
950 [1.9cc]: https://github.com/rust-lang/cargo/pull/2486
951 [1.9ce]: https://github.com/rust-lang/rust/pull/30587
952 [1.9cf]: https://github.com/rust-lang/cargo/pull/2241
953 [1.9ch]: https://github.com/rust-lang/rust/pull/32541
954 [1.9cl]: https://github.com/rust-lang/rust/pull/31977
955 [1.9cp]: https://github.com/rust-lang/cargo/pull/2465
956 [1.9ct]: https://github.com/rust-lang/cargo/pull/2385
957 [1.9cu]: https://github.com/rust-lang/rust/pull/32652
958 [1.9db]: https://github.com/rust-lang/rust/pull/32054
959 [1.9fi]: https://github.com/rust-lang/rust/pull/32050
960 [1.9fn]: https://github.com/rust-lang/rust/pull/31710
961 [1.9fv]: https://github.com/rust-lang/rust/pull/31938
962 [1.9hc]: https://github.com/rust-lang/rust/pull/32635
963 [1.9o]: https://github.com/rust-lang/rust/pull/32325
964 [1.9q]: https://github.com/rust-lang/rust/pull/31887
965 [1.9sk]: https://github.com/rust-lang/rust/pull/31700
966 [1.9sn]: https://github.com/rust-lang/rust/pull/31925
967 [1.9sp]: https://github.com/rust-lang/rust/pull/31618
968 [1.9ta]: https://github.com/rust-lang/rust/pull/32448
969 [1.9ts]: https://github.com/rust-lang/rust/pull/32586
970 [1.9tu]: https://github.com/rust-lang/rust/pull/32062
971 [1.9ws]: https://github.com/rust-lang/rust/pull/29734
972 [RFC 1270]: https://github.com/rust-lang/rfcs/blob/master/text/1270-deprecation.md
973 [`<*const T>::as_ref`]: http://doc.rust-lang.org/nightly/std/primitive.pointer.html#method.as_ref
974 [`<*mut T>::as_mut`]: http://doc.rust-lang.org/nightly/std/primitive.pointer.html#method.as_mut
975 [`<*mut T>::as_ref`]: http://doc.rust-lang.org/nightly/std/primitive.pointer.html#method.as_ref
976 [`slice::copy_from_slice`]: http://doc.rust-lang.org/nightly/std/primitive.slice.html#method.copy_from_slice
977 [`AsciiExt::make_ascii_lowercase`]: http://doc.rust-lang.org/nightly/std/ascii/trait.AsciiExt.html#tymethod.make_ascii_lowercase
978 [`AsciiExt::make_ascii_uppercase`]: http://doc.rust-lang.org/nightly/std/ascii/trait.AsciiExt.html#tymethod.make_ascii_uppercase
979 [`BTreeSet::get`]: http://doc.rust-lang.org/nightly/collections/btree/set/struct.BTreeSet.html#method.get
980 [`BTreeSet::replace`]: http://doc.rust-lang.org/nightly/collections/btree/set/struct.BTreeSet.html#method.replace
981 [`BTreeSet::take`]: http://doc.rust-lang.org/nightly/collections/btree/set/struct.BTreeSet.html#method.take
982 [`CommandExt::exec`]: http://doc.rust-lang.org/nightly/std/os/unix/process/trait.CommandExt.html#tymethod.exec
983 [`File::try_clone`]: http://doc.rust-lang.org/nightly/std/fs/struct.File.html#method.try_clone
984 [`HashMap::hasher`]: http://doc.rust-lang.org/nightly/std/collections/struct.HashMap.html#method.hasher
985 [`HashSet::get`]: http://doc.rust-lang.org/nightly/std/collections/struct.HashSet.html#method.get
986 [`HashSet::hasher`]: http://doc.rust-lang.org/nightly/std/collections/struct.HashSet.html#method.hasher
987 [`HashSet::replace`]: http://doc.rust-lang.org/nightly/std/collections/struct.HashSet.html#method.replace
988 [`HashSet::take`]: http://doc.rust-lang.org/nightly/std/collections/struct.HashSet.html#method.take
989 [`JoinHandleExt::as_pthread_t`]: http://doc.rust-lang.org/nightly/std/os/unix/thread/trait.JoinHandleExt.html#tymethod.as_pthread_t
990 [`JoinHandleExt::into_pthread_t`]: http://doc.rust-lang.org/nightly/std/os/unix/thread/trait.JoinHandleExt.html#tymethod.into_pthread_t
991 [`JoinHandleExt`]: http://doc.rust-lang.org/nightly/std/os/unix/thread/trait.JoinHandleExt.html
992 [`OpenOptions::create_new`]: http://doc.rust-lang.org/nightly/std/fs/struct.OpenOptions.html#method.create_new
993 [`OsStr::is_empty`]: http://doc.rust-lang.org/nightly/std/ffi/struct.OsStr.html#method.is_empty
994 [`OsStr::len`]: http://doc.rust-lang.org/nightly/std/ffi/struct.OsStr.html#method.len
995 [`OsString::capacity`]: http://doc.rust-lang.org/nightly/std/ffi/struct.OsString.html#method.capacity
996 [`OsString::clear`]: http://doc.rust-lang.org/nightly/std/ffi/struct.OsString.html#method.clear
997 [`OsString::reserve_exact`]: http://doc.rust-lang.org/nightly/std/ffi/struct.OsString.html#method.reserve_exact
998 [`OsString::reserve`]: http://doc.rust-lang.org/nightly/std/ffi/struct.OsString.html#method.reserve
999 [`OsString::with_capacity`]: http://doc.rust-lang.org/nightly/std/ffi/struct.OsString.html#method.with_capacity
1000 [`RawPthread`]: http://doc.rust-lang.org/nightly/std/os/unix/thread/type.RawPthread.html
1001 [`SocketAddr::set_ip`]: http://doc.rust-lang.org/nightly/std/net/enum.SocketAddr.html#method.set_ip
1002 [`SocketAddr::set_port`]: http://doc.rust-lang.org/nightly/std/net/enum.SocketAddr.html#method.set_port
1003 [`SocketAddrV4::set_ip`]: http://doc.rust-lang.org/nightly/std/net/struct.SocketAddrV4.html#method.set_ip
1004 [`SocketAddrV4::set_port`]: http://doc.rust-lang.org/nightly/std/net/struct.SocketAddrV4.html#method.set_port
1005 [`SocketAddrV6::set_flowinfo`]: http://doc.rust-lang.org/nightly/std/net/struct.SocketAddrV6.html#method.set_flowinfo
1006 [`SocketAddrV6::set_ip`]: http://doc.rust-lang.org/nightly/std/net/struct.SocketAddrV6.html#method.set_ip
1007 [`SocketAddrV6::set_port`]: http://doc.rust-lang.org/nightly/std/net/struct.SocketAddrV6.html#method.set_port
1008 [`SocketAddrV6::set_scope_id`]: http://doc.rust-lang.org/nightly/std/net/struct.SocketAddrV6.html#method.set_scope_id
1009 [`TcpListener::only_v6`]: http://doc.rust-lang.org/nightly/std/net/struct.TcpStream.html#method.only_v6
1010 [`TcpListener::set_nonblocking`]: http://doc.rust-lang.org/nightly/std/net/struct.TcpStream.html#method.set_nonblocking
1011 [`TcpListener::set_only_v6`]: http://doc.rust-lang.org/nightly/std/net/struct.TcpStream.html#method.set_only_v6
1012 [`TcpListener::set_ttl`]: http://doc.rust-lang.org/nightly/std/net/struct.TcpStream.html#method.set_ttl
1013 [`TcpListener::take_error`]: http://doc.rust-lang.org/nightly/std/net/struct.TcpStream.html#method.take_error
1014 [`TcpListener::ttl`]: http://doc.rust-lang.org/nightly/std/net/struct.TcpStream.html#method.ttl
1015 [`TcpStream::nodelay`]: http://doc.rust-lang.org/nightly/std/net/struct.TcpStream.html#method.nodelay
1016 [`TcpStream::only_v6`]: http://doc.rust-lang.org/nightly/std/net/struct.TcpStream.html#method.only_v6
1017 [`TcpStream::set_nodelay`]: http://doc.rust-lang.org/nightly/std/net/struct.TcpStream.html#method.set_nodelay
1018 [`TcpStream::set_nonblocking`]: http://doc.rust-lang.org/nightly/std/net/struct.TcpStream.html#method.set_nonblocking
1019 [`TcpStream::set_only_v6`]: http://doc.rust-lang.org/nightly/std/net/struct.TcpStream.html#method.set_only_v6
1020 [`TcpStream::set_ttl`]: http://doc.rust-lang.org/nightly/std/net/struct.TcpStream.html#method.set_ttl
1021 [`TcpStream::take_error`]: http://doc.rust-lang.org/nightly/std/net/struct.TcpStream.html#method.take_error
1022 [`TcpStream::ttl`]: http://doc.rust-lang.org/nightly/std/net/struct.TcpStream.html#method.ttl
1023 [`UdpSocket::broadcast`]: http://doc.rust-lang.org/nightly/std/net/struct.UdpSocket.html#method.broadcast
1024 [`UdpSocket::connect`]: http://doc.rust-lang.org/nightly/std/net/struct.UdpSocket.html#method.connect
1025 [`UdpSocket::join_multicast_v4`]: http://doc.rust-lang.org/nightly/std/net/struct.UdpSocket.html#method.join_multicast_v4
1026 [`UdpSocket::join_multicast_v6`]: http://doc.rust-lang.org/nightly/std/net/struct.UdpSocket.html#method.join_multicast_v6
1027 [`UdpSocket::leave_multicast_v4`]: http://doc.rust-lang.org/nightly/std/net/struct.UdpSocket.html#method.leave_multicast_v4
1028 [`UdpSocket::leave_multicast_v6`]: http://doc.rust-lang.org/nightly/std/net/struct.UdpSocket.html#method.leave_multicast_v6
1029 [`UdpSocket::multicast_loop_v4`]: http://doc.rust-lang.org/nightly/std/net/struct.UdpSocket.html#method.multicast_loop_v4
1030 [`UdpSocket::multicast_loop_v6`]: http://doc.rust-lang.org/nightly/std/net/struct.UdpSocket.html#method.multicast_loop_v6
1031 [`UdpSocket::multicast_ttl_v4`]: http://doc.rust-lang.org/nightly/std/net/struct.UdpSocket.html#method.multicast_ttl_v4
1032 [`UdpSocket::multicast_ttl_v6`]: http://doc.rust-lang.org/nightly/std/net/struct.UdpSocket.html#method.multicast_ttl_v6
1033 [`UdpSocket::only_v6`]: http://doc.rust-lang.org/nightly/std/net/struct.UdpSocket.html#method.only_v6
1034 [`UdpSocket::recv`]: http://doc.rust-lang.org/nightly/std/net/struct.UdpSocket.html#method.recv
1035 [`UdpSocket::send`]: http://doc.rust-lang.org/nightly/std/net/struct.UdpSocket.html#method.send
1036 [`UdpSocket::set_broadcast`]: http://doc.rust-lang.org/nightly/std/net/struct.UdpSocket.html#method.set_broadcast
1037 [`UdpSocket::set_multicast_loop_v4`]: http://doc.rust-lang.org/nightly/std/net/struct.UdpSocket.html#method.set_multicast_loop_v4
1038 [`UdpSocket::set_multicast_loop_v6`]: http://doc.rust-lang.org/nightly/std/net/struct.UdpSocket.html#method.set_multicast_loop_v6
1039 [`UdpSocket::set_multicast_ttl_v4`]: http://doc.rust-lang.org/nightly/std/net/struct.UdpSocket.html#method.set_multicast_ttl_v4
1040 [`UdpSocket::set_multicast_ttl_v6`]: http://doc.rust-lang.org/nightly/std/net/struct.UdpSocket.html#method.set_multicast_ttl_v6
1041 [`UdpSocket::set_nonblocking`]: http://doc.rust-lang.org/nightly/std/net/struct.UdpSocket.html#method.set_nonblocking
1042 [`UdpSocket::set_only_v6`]: http://doc.rust-lang.org/nightly/std/net/struct.UdpSocket.html#method.set_only_v6
1043 [`UdpSocket::set_ttl`]: http://doc.rust-lang.org/nightly/std/net/struct.UdpSocket.html#method.set_ttl
1044 [`UdpSocket::take_error`]: http://doc.rust-lang.org/nightly/std/net/struct.UdpSocket.html#method.take_error
1045 [`UdpSocket::ttl`]: http://doc.rust-lang.org/nightly/std/net/struct.UdpSocket.html#method.ttl
1046 [`char::DecodeUtf16Error::unpaired_surrogate`]: http://doc.rust-lang.org/nightly/std/char/struct.DecodeUtf16Error.html#method.unpaired_surrogate
1047 [`char::DecodeUtf16Error`]: http://doc.rust-lang.org/nightly/std/char/struct.DecodeUtf16Error.html
1048 [`char::DecodeUtf16`]: http://doc.rust-lang.org/nightly/std/char/struct.DecodeUtf16.html
1049 [`char::decode_utf16`]: http://doc.rust-lang.org/nightly/std/char/fn.decode_utf16.html
1050 [`ptr::read_volatile`]: http://doc.rust-lang.org/nightly/std/ptr/fn.read_volatile.html
1051 [`ptr::write_volatile`]: http://doc.rust-lang.org/nightly/std/ptr/fn.write_volatile.html
1052 [`std::os::unix::thread`]: http://doc.rust-lang.org/nightly/std/os/unix/thread/index.html
1053 [`std::panic::AssertUnwindSafe`]: http://doc.rust-lang.org/nightly/std/panic/struct.AssertUnwindSafe.html
1054 [`std::panic::UnwindSafe`]: http://doc.rust-lang.org/nightly/std/panic/trait.UnwindSafe.html
1055 [`std::panic::catch_unwind`]: http://doc.rust-lang.org/nightly/std/panic/fn.catch_unwind.html
1056 [`std::panic::resume_unwind`]: http://doc.rust-lang.org/nightly/std/panic/fn.resume_unwind.html
1057 [`std::panic`]: http://doc.rust-lang.org/nightly/std/panic/index.html
1058 [`str::is_char_boundary`]: http://doc.rust-lang.org/nightly/std/primitive.str.html#method.is_char_boundary
1061 Version 1.8.0 (2016-04-14)
1062 ==========================
1067 * Rust supports overloading of compound assignment statements like
1068 `+=` by implementing the [`AddAssign`], [`SubAssign`],
1069 [`MulAssign`], [`DivAssign`], [`RemAssign`], [`BitAndAssign`],
1070 [`BitOrAssign`], [`BitXorAssign`], [`ShlAssign`], or [`ShrAssign`]
1072 * Empty structs can be defined with braces, as in `struct Foo { }`, in
1073 addition to the non-braced form, `struct Foo;`. [RFC 218].
1079 * [`str::encode_utf16`][] (renamed from `utf16_units`)
1080 * [`str::EncodeUtf16`][] (renamed from `Utf16Units`)
1083 * [`ptr::drop_in_place`]
1085 * [`time::SystemTime`]
1087 * [`Instant::duration_since`][] (renamed from `duration_from_earlier`)
1088 * [`Instant::elapsed`]
1089 * [`SystemTime::now`]
1090 * [`SystemTime::duration_since`][] (renamed from `duration_from_earlier`)
1091 * [`SystemTime::elapsed`]
1092 * Various `Add`/`Sub` impls for `Time` and `SystemTime`
1093 * [`SystemTimeError`]
1094 * [`SystemTimeError::duration`]
1095 * Various impls for `SystemTimeError`
1097 * [`AddAssign`], [`SubAssign`], [`MulAssign`], [`DivAssign`],
1098 [`RemAssign`], [`BitAndAssign`], [`BitOrAssign`],
1099 [`BitXorAssign`], [`ShlAssign`], [`ShrAssign`].
1100 * [The `write!` and `writeln!` macros correctly emit errors if any of
1101 their arguments can't be formatted][1.8w].
1102 * [Various I/O functions support large files on 32-bit Linux][1.8l].
1103 * [The Unix-specific `raw` modules, which contain a number of
1104 redefined C types are deprecated][1.8r], including `os::raw::unix`,
1105 `os::raw::macos`, and `os::raw::linux`. These modules defined types
1106 such as `ino_t` and `dev_t`. The inconsistency of these definitions
1107 across platforms was making it difficult to implement `std`
1108 correctly. Those that need these definitions should use the `libc`
1110 * The Unix-specific `MetadataExt` traits, including
1111 `os::unix::fs::MetadataExt`, which expose values such as inode
1112 numbers [no longer return platform-specific types][1.8r], but
1113 instead return widened integers. [RFC 1415].
1114 * [`btree_set::{IntoIter, Iter, Range}` are covariant][1.8cv].
1115 * [Atomic loads and stores are not volatile][1.8a].
1116 * [All types in `sync::mpsc` implement `fmt::Debug`][1.8mp].
1121 * [Inlining hash functions lead to a 3% compile-time improvement in
1122 some workloads][1.8h].
1123 * When using jemalloc, its symbols are [unprefixed so that it
1124 overrides the libc malloc implementation][1.8h]. This means that for
1125 rustc, LLVM is now using jemalloc, which results in a 6%
1126 compile-time improvement on a specific workload.
1127 * [Avoid quadratic growth in function size due to cleanups][1.8cu].
1132 * [32-bit MSVC builds finally implement unwinding][1.8ms].
1133 i686-pc-windows-msvc is now considered a tier-1 platform.
1134 * [The `--print targets` flag prints a list of supported targets][1.8t].
1135 * [The `--print cfg` flag prints the `cfg`s defined for the current
1137 * [`rustc` can be built with an new Cargo-based build system, written
1138 in Rust][1.8b]. It will eventually replace Rust's Makefile-based
1139 build system. To enable it configure with `configure --rustbuild`.
1140 * [Errors for non-exhaustive `match` patterns now list up to 3 missing
1141 variants while also indicating the total number of missing variants
1142 if more than 3][1.8m].
1143 * [Executable stacks are disabled on Linux and BSD][1.8nx].
1144 * The Rust Project now publishes binary releases of the standard
1145 library for a number of tier-2 targets:
1146 `armv7-unknown-linux-gnueabihf`, `powerpc-unknown-linux-gnu`,
1147 `powerpc64-unknown-linux-gnu`, `powerpc64le-unknown-linux-gnu`
1148 `x86_64-rumprun-netbsd`. These can be installed with
1149 tools such as [multirust][1.8mr].
1154 * [`cargo init` creates a new Cargo project in the current
1155 directory][1.8ci]. It is otherwise like `cargo new`.
1156 * [Cargo has configuration keys for `-v` and
1157 `--color`][1.8cc]. `verbose` and `color`, respectively, go in the
1158 `[term]` section of `.cargo/config`.
1159 * [Configuration keys that evaluate to strings or integers can be set
1160 via environment variables][1.8ce]. For example the `build.jobs` key
1161 can be set via `CARGO_BUILD_JOBS`. Environment variables take
1162 precedence over config files.
1163 * [Target-specific dependencies support Rust `cfg` syntax for
1164 describing targets][1.8cfg] so that dependencies for multiple
1165 targets can be specified together. [RFC 1361].
1166 * [The environment variables `CARGO_TARGET_ROOT`, `RUSTC`, and
1167 `RUSTDOC` take precedence over the `build.target-dir`,
1168 `build.rustc`, and `build.rustdoc` configuration values][1.8cv].
1169 * [The child process tree is killed on Windows when Cargo is
1171 * [The `build.target` configuration value sets the target platform,
1172 like `--target`][1.8ct].
1177 * [Unstable compiler flags have been further restricted][1.8u]. Since
1178 1.0 `-Z` flags have been considered unstable, and other flags that
1179 were considered unstable additionally required passing `-Z
1180 unstable-options` to access. Unlike unstable language and library
1181 features though, these options have been accessible on the stable
1182 release channel. Going forward, *new unstable flags will not be
1183 available on the stable release channel*, and old unstable flags
1184 will warn about their usage. In the future, all unstable flags will
1185 be unavailable on the stable release channel.
1186 * [It is no longer possible to `match` on empty enum variants using
1187 the `Variant(..)` syntax][1.8v]. This has been a warning since 1.6.
1188 * The Unix-specific `MetadataExt` traits, including
1189 `os::unix::fs::MetadataExt`, which expose values such as inode
1190 numbers [no longer return platform-specific types][1.8r], but
1191 instead return widened integers. [RFC 1415].
1192 * [Modules sourced from the filesystem cannot appear within arbitrary
1193 blocks, but only within other modules][1.8mf].
1194 * [`--cfg` compiler flags are parsed strictly as identifiers][1.8c].
1195 * On Unix, [stack overflow triggers a runtime abort instead of a
1197 * [`Command::spawn` and its equivalents return an error if any of
1198 its command-line arguments contain interior `NUL`s][1.8n].
1199 * [Tuple and unit enum variants from other crates are in the type
1201 * [On Windows `rustc` emits `.lib` files for the `staticlib` library
1202 type instead of `.a` files][1.8st]. Additionally, for the MSVC
1203 toolchain, `rustc` emits import libraries named `foo.dll.lib`
1204 instead of `foo.lib`.
1207 [1.8a]: https://github.com/rust-lang/rust/pull/30962
1208 [1.8b]: https://github.com/rust-lang/rust/pull/31123
1209 [1.8c]: https://github.com/rust-lang/rust/pull/31530
1210 [1.8cc]: https://github.com/rust-lang/cargo/pull/2397
1211 [1.8ce]: https://github.com/rust-lang/cargo/pull/2398
1212 [1.8cf]: https://github.com/rust-lang/rust/pull/31278
1213 [1.8cfg]: https://github.com/rust-lang/cargo/pull/2328
1214 [1.8ci]: https://github.com/rust-lang/cargo/pull/2081
1215 [1.8ck]: https://github.com/rust-lang/cargo/pull/2370
1216 [1.8ct]: https://github.com/rust-lang/cargo/pull/2335
1217 [1.8cu]: https://github.com/rust-lang/rust/pull/31390
1218 [1.8cv]: https://github.com/rust-lang/cargo/issues/2365
1219 [1.8cv]: https://github.com/rust-lang/rust/pull/30998
1220 [1.8h]: https://github.com/rust-lang/rust/pull/31460
1221 [1.8l]: https://github.com/rust-lang/rust/pull/31668
1222 [1.8m]: https://github.com/rust-lang/rust/pull/31020
1223 [1.8mf]: https://github.com/rust-lang/rust/pull/31534
1224 [1.8mp]: https://github.com/rust-lang/rust/pull/30894
1225 [1.8mr]: https://users.rust-lang.org/t/multirust-0-8-with-cross-std-installation/4901
1226 [1.8ms]: https://github.com/rust-lang/rust/pull/30448
1227 [1.8n]: https://github.com/rust-lang/rust/pull/31056
1228 [1.8nx]: https://github.com/rust-lang/rust/pull/30859
1229 [1.8r]: https://github.com/rust-lang/rust/pull/31551
1230 [1.8so]: https://github.com/rust-lang/rust/pull/31333
1231 [1.8st]: https://github.com/rust-lang/rust/pull/29520
1232 [1.8t]: https://github.com/rust-lang/rust/pull/31358
1233 [1.8tn]: https://github.com/rust-lang/rust/pull/30882
1234 [1.8u]: https://github.com/rust-lang/rust/pull/31793
1235 [1.8v]: https://github.com/rust-lang/rust/pull/31757
1236 [1.8w]: https://github.com/rust-lang/rust/pull/31904
1237 [RFC 1361]: https://github.com/rust-lang/rfcs/blob/master/text/1361-cargo-cfg-dependencies.md
1238 [RFC 1415]: https://github.com/rust-lang/rfcs/blob/master/text/1415-trim-std-os.md
1239 [RFC 218]: https://github.com/rust-lang/rfcs/blob/master/text/0218-empty-struct-with-braces.md
1240 [RFC 953]: https://github.com/rust-lang/rfcs/blob/master/text/0953-op-assign.md
1241 [`AddAssign`]: http://doc.rust-lang.org/nightly/std/ops/trait.AddAssign.html
1242 [`BitAndAssign`]: http://doc.rust-lang.org/nightly/std/ops/trait.BitAndAssign.html
1243 [`BitOrAssign`]: http://doc.rust-lang.org/nightly/std/ops/trait.BitOrAssign.html
1244 [`BitXorAssign`]: http://doc.rust-lang.org/nightly/std/ops/trait.BitXorAssign.html
1245 [`DivAssign`]: http://doc.rust-lang.org/nightly/std/ops/trait.DivAssign.html
1246 [`Instant::duration_since`]: http://doc.rust-lang.org/nightly/std/time/struct.Instant.html#method.duration_since
1247 [`Instant::elapsed`]: http://doc.rust-lang.org/nightly/std/time/struct.Instant.html#method.elapsed
1248 [`Instant::now`]: http://doc.rust-lang.org/nightly/std/time/struct.Instant.html#method.now
1249 [`MulAssign`]: http://doc.rust-lang.org/nightly/std/ops/trait.MulAssign.html
1250 [`Ref::map`]: http://doc.rust-lang.org/nightly/std/cell/struct.Ref.html#method.map
1251 [`RefMut::map`]: http://doc.rust-lang.org/nightly/std/cell/struct.RefMut.html#method.map
1252 [`RemAssign`]: http://doc.rust-lang.org/nightly/std/ops/trait.RemAssign.html
1253 [`ShlAssign`]: http://doc.rust-lang.org/nightly/std/ops/trait.ShlAssign.html
1254 [`ShrAssign`]: http://doc.rust-lang.org/nightly/std/ops/trait.ShrAssign.html
1255 [`SubAssign`]: http://doc.rust-lang.org/nightly/std/ops/trait.SubAssign.html
1256 [`SystemTime::duration_since`]: http://doc.rust-lang.org/nightly/std/time/struct.SystemTime.html#method.duration_since
1257 [`SystemTime::elapsed`]: http://doc.rust-lang.org/nightly/std/time/struct.SystemTime.html#method.elapsed
1258 [`SystemTime::now`]: http://doc.rust-lang.org/nightly/std/time/struct.SystemTime.html#method.now
1259 [`SystemTimeError::duration`]: http://doc.rust-lang.org/nightly/std/time/struct.SystemTimeError.html#method.duration
1260 [`SystemTimeError`]: http://doc.rust-lang.org/nightly/std/time/struct.SystemTimeError.html
1261 [`UNIX_EPOCH`]: http://doc.rust-lang.org/nightly/std/time/constant.UNIX_EPOCH.html
1262 [`ptr::drop_in_place`]: http://doc.rust-lang.org/nightly/std/ptr/fn.drop_in_place.html
1263 [`str::EncodeUtf16`]: http://doc.rust-lang.org/nightly/std/str/struct.EncodeUtf16.html
1264 [`str::encode_utf16`]: http://doc.rust-lang.org/nightly/std/primitive.str.html#method.encode_utf16
1265 [`time::Instant`]: http://doc.rust-lang.org/nightly/std/time/struct.Instant.html
1266 [`time::SystemTime`]: http://doc.rust-lang.org/nightly/std/time/struct.SystemTime.html
1269 Version 1.7.0 (2016-03-03)
1270 ==========================
1277 * [`Path::strip_prefix`][] (renamed from relative_from)
1278 * [`path::StripPrefixError`][] (new error type returned from strip_prefix)
1280 * [`Ipv4Addr::is_loopback`]
1281 * [`Ipv4Addr::is_private`]
1282 * [`Ipv4Addr::is_link_local`]
1283 * [`Ipv4Addr::is_multicast`]
1284 * [`Ipv4Addr::is_broadcast`]
1285 * [`Ipv4Addr::is_documentation`]
1287 * [`Ipv6Addr::is_unspecified`]
1288 * [`Ipv6Addr::is_loopback`]
1289 * [`Ipv6Addr::is_multicast`]
1292 * [`Vec::as_mut_slice`]
1294 * [`String::as_str`]
1295 * [`String::as_mut_str`]
1297 * `<[T]>::`[`clone_from_slice`], which now requires the two slices to
1299 * `<[T]>::`[`sort_by_key`]
1300 * checked, saturated, and overflowing operations
1301 * [`i32::checked_rem`], [`i32::checked_neg`], [`i32::checked_shl`], [`i32::checked_shr`]
1302 * [`i32::saturating_mul`]
1303 * [`i32::overflowing_add`], [`i32::overflowing_sub`], [`i32::overflowing_mul`], [`i32::overflowing_div`]
1304 * [`i32::overflowing_rem`], [`i32::overflowing_neg`], [`i32::overflowing_shl`], [`i32::overflowing_shr`]
1305 * [`u32::checked_rem`], [`u32::checked_neg`], [`u32::checked_shl`], [`u32::checked_shl`]
1306 * [`u32::saturating_mul`]
1307 * [`u32::overflowing_add`], [`u32::overflowing_sub`], [`u32::overflowing_mul`], [`u32::overflowing_div`]
1308 * [`u32::overflowing_rem`], [`u32::overflowing_neg`], [`u32::overflowing_shl`], [`u32::overflowing_shr`]
1309 * and checked, saturated, and overflowing operations for other primitive types
1311 * [`ffi::IntoStringError`]
1312 * [`CString::into_string`]
1313 * [`CString::into_bytes`]
1314 * [`CString::into_bytes_with_nul`]
1315 * `From<CString> for Vec<u8>`
1317 * [`IntoStringError::into_cstring`]
1318 * [`IntoStringError::utf8_error`]
1319 * `Error for IntoStringError`
1321 * [`std::hash::BuildHasher`]
1322 * [`BuildHasher::Hasher`]
1323 * [`BuildHasher::build_hasher`]
1324 * [`std::hash::BuildHasherDefault`]
1325 * [`HashMap::with_hasher`]
1326 * [`HashMap::with_capacity_and_hasher`]
1327 * [`HashSet::with_hasher`]
1328 * [`HashSet::with_capacity_and_hasher`]
1329 * [`std::collections::hash_map::RandomState`]
1330 * [`RandomState::new`]
1331 * [Validating UTF-8 is faster by a factor of between 7 and 14x for
1332 ASCII input][1.7utf8]. This means that creating `String`s and `str`s
1333 from bytes is faster.
1334 * [The performance of `LineWriter` (and thus `io::stdout`) was
1335 improved by using `memchr` to search for newlines][1.7m].
1336 * [`f32::to_degrees` and `f32::to_radians` are stable][1.7f]. The
1337 `f64` variants were stabilized previously.
1338 * [`BTreeMap` was rewritten to use less memory and improve the performance
1339 of insertion and iteration, the latter by as much as 5x][1.7bm].
1340 * [`BTreeSet` and its iterators, `Iter`, `IntoIter`, and `Range` are
1341 covariant over their contained type][1.7bt].
1342 * [`LinkedList` and its iterators, `Iter` and `IntoIter` are covariant
1343 over their contained type][1.7ll].
1344 * [`str::replace` now accepts a `Pattern`][1.7rp], like other string
1346 * [`Any` is implemented for unsized types][1.7a].
1347 * [`Hash` is implemented for `Duration`][1.7h].
1352 * [When running tests with `--test`, rustdoc will pass `--cfg`
1353 arguments to the compiler][1.7dt].
1354 * [The compiler is built with RPATH information by default][1.7rpa].
1355 This means that it will be possible to run `rustc` when installed in
1356 unusual configurations without configuring the dynamic linker search
1358 * [`rustc` passes `--enable-new-dtags` to GNU ld][1.7dta]. This makes
1359 any RPATH entries (emitted with `-C rpath`) *not* take precedence
1360 over `LD_LIBRARY_PATH`.
1365 * [`cargo rustc` accepts a `--profile` flag that runs `rustc` under
1366 any of the compilation profiles, 'dev', 'bench', or 'test'][1.7cp].
1367 * [The `rerun-if-changed` build script directive no longer causes the
1368 build script to incorrectly run twice in certain scenarios][1.7rr].
1373 * Soundness fixes to the interactions between associated types and
1374 lifetimes, specified in [RFC 1214], [now generate errors][1.7sf] for
1375 code that violates the new rules. This is a significant change that
1376 is known to break existing code, so it has emitted warnings for the
1377 new error cases since 1.4 to give crate authors time to adapt. The
1378 details of what is changing are subtle; read the RFC for more.
1379 * [Several bugs in the compiler's visibility calculations were
1380 fixed][1.7v]. Since this was found to break significant amounts of
1381 code, the new errors will be emitted as warnings for several release
1382 cycles, under the `private_in_public` lint.
1383 * Defaulted type parameters were accidentally accepted in positions
1384 that were not intended. In this release, [defaulted type parameters
1385 appearing outside of type definitions will generate a
1386 warning][1.7d], which will become an error in future releases.
1387 * [Parsing "." as a float results in an error instead of 0][1.7p].
1388 That is, `".".parse::<f32>()` returns `Err`, not `Ok(0.0)`.
1389 * [Borrows of closure parameters may not outlive the closure][1.7bc].
1391 [1.7a]: https://github.com/rust-lang/rust/pull/30928
1392 [1.7bc]: https://github.com/rust-lang/rust/pull/30341
1393 [1.7bm]: https://github.com/rust-lang/rust/pull/30426
1394 [1.7bt]: https://github.com/rust-lang/rust/pull/30998
1395 [1.7cp]: https://github.com/rust-lang/cargo/pull/2224
1396 [1.7d]: https://github.com/rust-lang/rust/pull/30724
1397 [1.7dt]: https://github.com/rust-lang/rust/pull/30372
1398 [1.7dta]: https://github.com/rust-lang/rust/pull/30394
1399 [1.7f]: https://github.com/rust-lang/rust/pull/30672
1400 [1.7h]: https://github.com/rust-lang/rust/pull/30818
1401 [1.7ll]: https://github.com/rust-lang/rust/pull/30663
1402 [1.7m]: https://github.com/rust-lang/rust/pull/30381
1403 [1.7p]: https://github.com/rust-lang/rust/pull/30681
1404 [1.7rp]: https://github.com/rust-lang/rust/pull/29498
1405 [1.7rpa]: https://github.com/rust-lang/rust/pull/30353
1406 [1.7rr]: https://github.com/rust-lang/cargo/pull/2279
1407 [1.7sf]: https://github.com/rust-lang/rust/pull/30389
1408 [1.7utf8]: https://github.com/rust-lang/rust/pull/30740
1409 [1.7v]: https://github.com/rust-lang/rust/pull/29973
1410 [RFC 1214]: https://github.com/rust-lang/rfcs/blob/master/text/1214-projections-lifetimes-and-wf.md
1411 [`BuildHasher::Hasher`]: http://doc.rust-lang.org/nightly/std/hash/trait.Hasher.html
1412 [`BuildHasher::build_hasher`]: http://doc.rust-lang.org/nightly/std/hash/trait.BuildHasher.html#tymethod.build_hasher
1413 [`CString::into_bytes_with_nul`]: http://doc.rust-lang.org/nightly/std/ffi/struct.CString.html#method.into_bytes_with_nul
1414 [`CString::into_bytes`]: http://doc.rust-lang.org/nightly/std/ffi/struct.CString.html#method.into_bytes
1415 [`CString::into_string`]: http://doc.rust-lang.org/nightly/std/ffi/struct.CString.html#method.into_string
1416 [`HashMap::with_capacity_and_hasher`]: http://doc.rust-lang.org/nightly/std/collections/struct.HashMap.html#method.with_capacity_and_hasher
1417 [`HashMap::with_hasher`]: http://doc.rust-lang.org/nightly/std/collections/struct.HashMap.html#method.with_hasher
1418 [`HashSet::with_capacity_and_hasher`]: http://doc.rust-lang.org/nightly/std/collections/struct.HashSet.html#method.with_capacity_and_hasher
1419 [`HashSet::with_hasher`]: http://doc.rust-lang.org/nightly/std/collections/struct.HashSet.html#method.with_hasher
1420 [`IntoStringError::into_cstring`]: http://doc.rust-lang.org/nightly/std/ffi/struct.IntoStringError.html#method.into_cstring
1421 [`IntoStringError::utf8_error`]: http://doc.rust-lang.org/nightly/std/ffi/struct.IntoStringError.html#method.utf8_error
1422 [`Ipv4Addr::is_broadcast`]: http://doc.rust-lang.org/nightly/std/net/struct.Ipv4Addr.html#method.is_broadcast
1423 [`Ipv4Addr::is_documentation`]: http://doc.rust-lang.org/nightly/std/net/struct.Ipv4Addr.html#method.is_documentation
1424 [`Ipv4Addr::is_link_local`]: http://doc.rust-lang.org/nightly/std/net/struct.Ipv4Addr.html#method.is_link_local
1425 [`Ipv4Addr::is_loopback`]: http://doc.rust-lang.org/nightly/std/net/struct.Ipv4Addr.html#method.is_loopback
1426 [`Ipv4Addr::is_multicast`]: http://doc.rust-lang.org/nightly/std/net/struct.Ipv4Addr.html#method.is_multicast
1427 [`Ipv4Addr::is_private`]: http://doc.rust-lang.org/nightly/std/net/struct.Ipv4Addr.html#method.is_private
1428 [`Ipv6Addr::is_loopback`]: http://doc.rust-lang.org/nightly/std/net/struct.Ipv6Addr.html#method.is_loopback
1429 [`Ipv6Addr::is_multicast`]: http://doc.rust-lang.org/nightly/std/net/struct.Ipv6Addr.html#method.is_multicast
1430 [`Ipv6Addr::is_unspecified`]: http://doc.rust-lang.org/nightly/std/net/struct.Ipv6Addr.html#method.is_unspecified
1431 [`Path::strip_prefix`]: http://doc.rust-lang.org/nightly/std/path/struct.Path.html#method.strip_prefix
1432 [`RandomState::new`]: http://doc.rust-lang.org/nightly/std/collections/hash_map/struct.RandomState.html#method.new
1433 [`String::as_mut_str`]: http://doc.rust-lang.org/nightly/std/string/struct.String.html#method.as_mut_str
1434 [`String::as_str`]: http://doc.rust-lang.org/nightly/std/string/struct.String.html#method.as_str
1435 [`Vec::as_mut_slice`]: http://doc.rust-lang.org/nightly/std/vec/struct.Vec.html#method.as_mut_slice
1436 [`Vec::as_slice`]: http://doc.rust-lang.org/nightly/std/vec/struct.Vec.html#method.as_slice
1437 [`clone_from_slice`]: http://doc.rust-lang.org/nightly/std/primitive.slice.html#method.clone_from_slice
1438 [`ffi::IntoStringError`]: http://doc.rust-lang.org/nightly/std/ffi/struct.IntoStringError.html
1439 [`i32::checked_neg`]: http://doc.rust-lang.org/nightly/std/primitive.i32.html#method.checked_neg
1440 [`i32::checked_rem`]: http://doc.rust-lang.org/nightly/std/primitive.i32.html#method.checked_rem
1441 [`i32::checked_shl`]: http://doc.rust-lang.org/nightly/std/primitive.i32.html#method.checked_shl
1442 [`i32::checked_shr`]: http://doc.rust-lang.org/nightly/std/primitive.i32.html#method.checked_shr
1443 [`i32::overflowing_add`]: http://doc.rust-lang.org/nightly/std/primitive.i32.html#method.overflowing_add
1444 [`i32::overflowing_div`]: http://doc.rust-lang.org/nightly/std/primitive.i32.html#method.overflowing_div
1445 [`i32::overflowing_mul`]: http://doc.rust-lang.org/nightly/std/primitive.i32.html#method.overflowing_mul
1446 [`i32::overflowing_neg`]: http://doc.rust-lang.org/nightly/std/primitive.i32.html#method.overflowing_neg
1447 [`i32::overflowing_rem`]: http://doc.rust-lang.org/nightly/std/primitive.i32.html#method.overflowing_rem
1448 [`i32::overflowing_shl`]: http://doc.rust-lang.org/nightly/std/primitive.i32.html#method.overflowing_shl
1449 [`i32::overflowing_shr`]: http://doc.rust-lang.org/nightly/std/primitive.i32.html#method.overflowing_shr
1450 [`i32::overflowing_sub`]: http://doc.rust-lang.org/nightly/std/primitive.i32.html#method.overflowing_sub
1451 [`i32::saturating_mul`]: http://doc.rust-lang.org/nightly/std/primitive.i32.html#method.saturating_mul
1452 [`path::StripPrefixError`]: http://doc.rust-lang.org/nightly/std/path/struct.StripPrefixError.html
1453 [`sort_by_key`]: http://doc.rust-lang.org/nightly/std/primitive.slice.html#method.sort_by_key
1454 [`std::collections::hash_map::RandomState`]: http://doc.rust-lang.org/nightly/std/collections/hash_map/struct.RandomState.html
1455 [`std::hash::BuildHasherDefault`]: http://doc.rust-lang.org/nightly/std/hash/struct.BuildHasherDefault.html
1456 [`std::hash::BuildHasher`]: http://doc.rust-lang.org/nightly/std/hash/trait.BuildHasher.html
1457 [`u32::checked_neg`]: http://doc.rust-lang.org/nightly/std/primitive.u32.html#method.checked_neg
1458 [`u32::checked_rem`]: http://doc.rust-lang.org/nightly/std/primitive.u32.html#method.checked_rem
1459 [`u32::checked_neg`]: http://doc.rust-lang.org/nightly/std/primitive.u32.html#method.checked_neg
1460 [`u32::checked_shl`]: http://doc.rust-lang.org/nightly/std/primitive.u32.html#method.checked_shl
1461 [`u32::overflowing_add`]: http://doc.rust-lang.org/nightly/std/primitive.u32.html#method.overflowing_add
1462 [`u32::overflowing_div`]: http://doc.rust-lang.org/nightly/std/primitive.u32.html#method.overflowing_div
1463 [`u32::overflowing_mul`]: http://doc.rust-lang.org/nightly/std/primitive.u32.html#method.overflowing_mul
1464 [`u32::overflowing_neg`]: http://doc.rust-lang.org/nightly/std/primitive.u32.html#method.overflowing_neg
1465 [`u32::overflowing_rem`]: http://doc.rust-lang.org/nightly/std/primitive.u32.html#method.overflowing_rem
1466 [`u32::overflowing_shl`]: http://doc.rust-lang.org/nightly/std/primitive.u32.html#method.overflowing_shl
1467 [`u32::overflowing_shr`]: http://doc.rust-lang.org/nightly/std/primitive.u32.html#method.overflowing_shr
1468 [`u32::overflowing_sub`]: http://doc.rust-lang.org/nightly/std/primitive.u32.html#method.overflowing_sub
1469 [`u32::saturating_mul`]: http://doc.rust-lang.org/nightly/std/primitive.u32.html#method.saturating_mul
1472 Version 1.6.0 (2016-01-21)
1473 ==========================
1478 * The `#![no_std]` attribute causes a crate to not be linked to the
1479 standard library, but only the [core library][1.6co], as described
1480 in [RFC 1184]. The core library defines common types and traits but
1481 has no platform dependencies whatsoever, and is the basis for Rust
1482 software in environments that cannot support a full port of the
1483 standard library, such as operating systems. Most of the core
1484 library is now stable.
1490 [`Read::read_exact`],
1491 [`ErrorKind::UnexpectedEof`][] (renamed from `UnexpectedEOF`),
1492 [`fs::DirBuilder`], [`fs::DirBuilder::new`],
1493 [`fs::DirBuilder::recursive`], [`fs::DirBuilder::create`],
1494 [`os::unix::fs::DirBuilderExt`],
1495 [`os::unix::fs::DirBuilderExt::mode`], [`vec::Drain`],
1496 [`vec::Vec::drain`], [`string::Drain`], [`string::String::drain`],
1497 [`vec_deque::Drain`], [`vec_deque::VecDeque::drain`],
1498 [`collections::hash_map::Drain`],
1499 [`collections::hash_map::HashMap::drain`],
1500 [`collections::hash_set::Drain`],
1501 [`collections::hash_set::HashSet::drain`],
1502 [`collections::binary_heap::Drain`],
1503 [`collections::binary_heap::BinaryHeap::drain`],
1504 [`Vec::extend_from_slice`][] (renamed from `push_all`),
1505 [`Mutex::get_mut`], [`Mutex::into_inner`], [`RwLock::get_mut`],
1506 [`RwLock::into_inner`],
1507 [`Iterator::min_by_key`][] (renamed from `min_by`),
1508 [`Iterator::max_by_key`][] (renamed from `max_by`).
1509 * The [core library][1.6co] is stable, as are most of its APIs.
1510 * [The `assert_eq!` macro supports arguments that don't implement
1511 `Sized`][1.6ae], such as arrays. In this way it behaves more like
1513 * Several timer functions that take duration in milliseconds [are
1514 deprecated in favor of those that take `Duration`][1.6ms]. These
1515 include `Condvar::wait_timeout_ms`, `thread::sleep_ms`, and
1516 `thread::park_timeout_ms`.
1517 * The algorithm by which `Vec` reserves additional elements was
1518 [tweaked to not allocate excessive space][1.6a] while still growing
1520 * `From` conversions are [implemented from integers to floats][1.6f]
1521 in cases where the conversion is lossless. Thus they are not
1522 implemented for 32-bit ints to `f32`, nor for 64-bit ints to `f32`
1523 or `f64`. They are also not implemented for `isize` and `usize`
1524 because the implementations would be platform-specific. `From` is
1525 also implemented from `f32` to `f64`.
1526 * `From<&Path>` and `From<PathBuf>` are implemented for `Cow<Path>`.
1527 * `From<T>` is implemented for `Box<T>`, `Rc<T>` and `Arc<T>`.
1528 * `IntoIterator` is implemented for `&PathBuf` and `&Path`.
1529 * [`BinaryHeap` was refactored][1.6bh] for modest performance
1531 * Sorting slices that are already sorted [is 50% faster in some
1537 * Cargo will look in `$CARGO_HOME/bin` for subcommands [by default][1.6c].
1538 * Cargo build scripts can specify their dependencies by emitting the
1539 [`rerun-if-changed`][1.6rr] key.
1540 * crates.io will reject publication of crates with dependencies that
1541 have a wildcard version constraint. Crates with wildcard
1542 dependencies were seen to cause a variety of problems, as described
1543 in [RFC 1241]. Since 1.5 publication of such crates has emitted a
1545 * `cargo clean` [accepts a `--release` flag][1.6cc] to clean the
1546 release folder. A variety of artifacts that Cargo failed to clean
1547 are now correctly deleted.
1552 * The `unreachable_code` lint [warns when a function call's argument
1554 * The parser indicates [failures that may be caused by
1555 confusingly-similar Unicode characters][1.6uc]
1556 * Certain macro errors [are reported at definition time][1.6m], not
1562 * The compiler no longer makes use of the [`RUST_PATH`][1.6rp]
1563 environment variable when locating crates. This was a pre-cargo
1564 feature for integrating with the package manager that was
1565 accidentally never removed.
1566 * [A number of bugs were fixed in the privacy checker][1.6p] that
1567 could cause previously-accepted code to break.
1568 * [Modules and unit/tuple structs may not share the same name][1.6ts].
1569 * [Bugs in pattern matching unit structs were fixed][1.6us]. The tuple
1570 struct pattern syntax (`Foo(..)`) can no longer be used to match
1571 unit structs. This is a warning now, but will become an error in
1572 future releases. Patterns that share the same name as a const are
1574 * A bug was fixed that causes [rustc not to apply default type
1575 parameters][1.6xc] when resolving certain method implementations of
1576 traits defined in other crates.
1578 [1.6a]: https://github.com/rust-lang/rust/pull/29454
1579 [1.6ae]: https://github.com/rust-lang/rust/pull/29770
1580 [1.6bh]: https://github.com/rust-lang/rust/pull/29811
1581 [1.6c]: https://github.com/rust-lang/cargo/pull/2192
1582 [1.6cc]: https://github.com/rust-lang/cargo/pull/2131
1583 [1.6co]: http://doc.rust-lang.org/beta/core/index.html
1584 [1.6dv]: https://github.com/rust-lang/rust/pull/30000
1585 [1.6f]: https://github.com/rust-lang/rust/pull/29129
1586 [1.6m]: https://github.com/rust-lang/rust/pull/29828
1587 [1.6ms]: https://github.com/rust-lang/rust/pull/29604
1588 [1.6p]: https://github.com/rust-lang/rust/pull/29726
1589 [1.6rp]: https://github.com/rust-lang/rust/pull/30034
1590 [1.6rr]: https://github.com/rust-lang/cargo/pull/2134
1591 [1.6s]: https://github.com/rust-lang/rust/pull/29675
1592 [1.6ts]: https://github.com/rust-lang/rust/issues/21546
1593 [1.6uc]: https://github.com/rust-lang/rust/pull/29837
1594 [1.6us]: https://github.com/rust-lang/rust/pull/29383
1595 [1.6xc]: https://github.com/rust-lang/rust/issues/30123
1596 [RFC 1184]: https://github.com/rust-lang/rfcs/blob/master/text/1184-stabilize-no_std.md
1597 [RFC 1241]: https://github.com/rust-lang/rfcs/blob/master/text/1241-no-wildcard-deps.md
1598 [`ErrorKind::UnexpectedEof`]: http://doc.rust-lang.org/nightly/std/io/enum.ErrorKind.html#variant.UnexpectedEof
1599 [`Iterator::max_by_key`]: http://doc.rust-lang.org/nightly/std/iter/trait.Iterator.html#method.max_by_key
1600 [`Iterator::min_by_key`]: http://doc.rust-lang.org/nightly/std/iter/trait.Iterator.html#method.min_by_key
1601 [`Mutex::get_mut`]: http://doc.rust-lang.org/nightly/std/sync/struct.Mutex.html#method.get_mut
1602 [`Mutex::into_inner`]: http://doc.rust-lang.org/nightly/std/sync/struct.Mutex.html#method.into_inner
1603 [`Read::read_exact`]: http://doc.rust-lang.org/nightly/std/io/trait.Read.html#method.read_exact
1604 [`RwLock::get_mut`]: http://doc.rust-lang.org/nightly/std/sync/struct.RwLock.html#method.get_mut
1605 [`RwLock::into_inner`]: http://doc.rust-lang.org/nightly/std/sync/struct.RwLock.html#method.into_inner
1606 [`Vec::extend_from_slice`]: http://doc.rust-lang.org/nightly/collections/vec/struct.Vec.html#method.extend_from_slice
1607 [`collections::binary_heap::BinaryHeap::drain`]: http://doc.rust-lang.org/nightly/std/collections/binary_heap/struct.BinaryHeap.html#method.drain
1608 [`collections::binary_heap::Drain`]: http://doc.rust-lang.org/nightly/std/collections/binary_heap/struct.Drain.html
1609 [`collections::hash_map::Drain`]: http://doc.rust-lang.org/nightly/std/collections/hash_map/struct.Drain.html
1610 [`collections::hash_map::HashMap::drain`]: http://doc.rust-lang.org/nightly/std/collections/hash_map/struct.HashMap.html#method.drain
1611 [`collections::hash_set::Drain`]: http://doc.rust-lang.org/nightly/std/collections/hash_set/struct.Drain.html
1612 [`collections::hash_set::HashSet::drain`]: http://doc.rust-lang.org/nightly/std/collections/hash_set/struct.HashSet.html#method.drain
1613 [`fs::DirBuilder::create`]: http://doc.rust-lang.org/nightly/std/fs/struct.DirBuilder.html#method.create
1614 [`fs::DirBuilder::new`]: http://doc.rust-lang.org/nightly/std/fs/struct.DirBuilder.html#method.new
1615 [`fs::DirBuilder::recursive`]: http://doc.rust-lang.org/nightly/std/fs/struct.DirBuilder.html#method.recursive
1616 [`fs::DirBuilder`]: http://doc.rust-lang.org/nightly/std/fs/struct.DirBuilder.html
1617 [`os::unix::fs::DirBuilderExt::mode`]: http://doc.rust-lang.org/nightly/std/os/unix/fs/trait.DirBuilderExt.html#tymethod.mode
1618 [`os::unix::fs::DirBuilderExt`]: http://doc.rust-lang.org/nightly/std/os/unix/fs/trait.DirBuilderExt.html
1619 [`string::Drain`]: http://doc.rust-lang.org/nightly/std/string/struct.Drain.html
1620 [`string::String::drain`]: http://doc.rust-lang.org/nightly/std/string/struct.String.html#method.drain
1621 [`vec::Drain`]: http://doc.rust-lang.org/nightly/std/vec/struct.Drain.html
1622 [`vec::Vec::drain`]: http://doc.rust-lang.org/nightly/std/vec/struct.Vec.html#method.drain
1623 [`vec_deque::Drain`]: http://doc.rust-lang.org/nightly/std/collections/vec_deque/struct.Drain.html
1624 [`vec_deque::VecDeque::drain`]: http://doc.rust-lang.org/nightly/std/collections/vec_deque/struct.VecDeque.html#method.drain
1627 Version 1.5.0 (2015-12-10)
1628 ==========================
1630 * ~700 changes, numerous bugfixes
1636 [`BinaryHeap::from`], [`BinaryHeap::into_sorted_vec`],
1637 [`BinaryHeap::into_vec`], [`Condvar::wait_timeout`],
1638 [`FileTypeExt::is_block_device`], [`FileTypeExt::is_char_device`],
1639 [`FileTypeExt::is_fifo`], [`FileTypeExt::is_socket`],
1640 [`FileTypeExt`], [`Formatter::alternate`], [`Formatter::fill`],
1641 [`Formatter::precision`], [`Formatter::sign_aware_zero_pad`],
1642 [`Formatter::sign_minus`], [`Formatter::sign_plus`],
1643 [`Formatter::width`], [`Iterator::cmp`], [`Iterator::eq`],
1644 [`Iterator::ge`], [`Iterator::gt`], [`Iterator::le`],
1645 [`Iterator::lt`], [`Iterator::ne`], [`Iterator::partial_cmp`],
1646 [`Path::canonicalize`], [`Path::exists`], [`Path::is_dir`],
1647 [`Path::is_file`], [`Path::metadata`], [`Path::read_dir`],
1648 [`Path::read_link`], [`Path::symlink_metadata`],
1649 [`Utf8Error::valid_up_to`], [`Vec::resize`],
1650 [`VecDeque::as_mut_slices`], [`VecDeque::as_slices`],
1651 [`VecDeque::insert`], [`VecDeque::shrink_to_fit`],
1652 [`VecDeque::swap_remove_back`], [`VecDeque::swap_remove_front`],
1653 [`slice::split_first_mut`], [`slice::split_first`],
1654 [`slice::split_last_mut`], [`slice::split_last`],
1655 [`char::from_u32_unchecked`], [`fs::canonicalize`],
1656 [`str::MatchIndices`], [`str::RMatchIndices`],
1657 [`str::match_indices`], [`str::rmatch_indices`],
1658 [`str::slice_mut_unchecked`], [`string::ParseError`].
1659 * Rust applications hosted on crates.io can be installed locally to
1660 `~/.cargo/bin` with the [`cargo install`] command. Among other
1661 things this makes it easier to augment Cargo with new subcommands:
1662 when a binary named e.g. `cargo-foo` is found in `$PATH` it can be
1663 invoked as `cargo foo`.
1664 * Crates with wildcard (`*`) dependencies will [emit warnings when
1665 published][1.5w]. In 1.6 it will no longer be possible to publish
1666 crates with wildcard dependencies.
1671 * The rules determining when a particular lifetime must outlive
1672 a particular value (known as '[dropck]') have been [modified
1673 to not rely on parametricity][1.5p].
1674 * [Implementations of `AsRef` and `AsMut` were added to `Box`, `Rc`,
1675 and `Arc`][1.5a]. Because these smart pointer types implement
1676 `Deref`, this causes breakage in cases where the interior type
1677 contains methods of the same name.
1678 * [Correct a bug in Rc/Arc][1.5c] that caused [dropck] to be unaware
1679 that they could drop their content. Soundness fix.
1680 * All method invocations are [properly checked][1.5wf1] for
1681 [well-formedness][1.5wf2]. Soundness fix.
1682 * Traits whose supertraits contain `Self` are [not object
1683 safe][1.5o]. Soundness fix.
1684 * Target specifications support a [`no_default_libraries`][1.5nd]
1685 setting that controls whether `-nodefaultlibs` is passed to the
1686 linker, and in turn the `is_like_windows` setting no longer affects
1687 the `-nodefaultlibs` flag.
1688 * `#[derive(Show)]`, long-deprecated, [has been removed][1.5ds].
1689 * The `#[inline]` and `#[repr]` attributes [can only appear
1690 in valid locations][1.5at].
1691 * Native libraries linked from the local crate are [passed to
1692 the linker before native libraries from upstream crates][1.5nl].
1693 * Two rarely-used attributes, `#[no_debug]` and
1694 `#[omit_gdb_pretty_printer_section]` [are feature gated][1.5fg].
1695 * Negation of unsigned integers, which has been a warning for
1696 several releases, [is now behind a feature gate and will
1697 generate errors][1.5nu].
1698 * The parser accidentally accepted visibility modifiers on
1699 enum variants, a bug [which has been fixed][1.5ev].
1700 * [A bug was fixed that allowed `use` statements to import unstable
1706 * When evaluating expressions at compile-time that are not
1707 compile-time constants (const-evaluating expressions in non-const
1708 contexts), incorrect code such as overlong bitshifts and arithmetic
1709 overflow will [generate a warning instead of an error][1.5ce],
1710 delaying the error until runtime. This will allow the
1711 const-evaluator to be expanded in the future backwards-compatibly.
1712 * The `improper_ctypes` lint [no longer warns about using `isize` and
1713 `usize` in FFI][1.5ict].
1718 * `Arc<T>` and `Rc<T>` are [covariant with respect to `T` instead of
1720 * `Default` is [implemented for mutable slices][1.5d].
1721 * `FromStr` is [implemented for `SockAddrV4` and `SockAddrV6`][1.5s].
1722 * There are now `From` conversions [between floating point
1723 types][1.5f] where the conversions are lossless.
1724 * Thera are now `From` conversions [between integer types][1.5i] where
1725 the conversions are lossless.
1726 * [`fs::Metadata` implements `Clone`][1.5fs].
1727 * The `parse` method [accepts a leading "+" when parsing
1729 * [`AsMut` is implemented for `Vec`][1.5am].
1730 * The `clone_from` implementations for `String` and `BinaryHeap` [have
1731 been optimized][1.5cf] and no longer rely on the default impl.
1732 * The `extern "Rust"`, `extern "C"`, `unsafe extern "Rust"` and
1733 `unsafe extern "C"` function types now [implement `Clone`,
1734 `PartialEq`, `Eq`, `PartialOrd`, `Ord`, `Hash`, `fmt::Pointer`, and
1735 `fmt::Debug` for up to 12 arguments][1.5fp].
1736 * [Dropping `Vec`s is much faster in unoptimized builds when the
1737 element types don't implement `Drop`][1.5dv].
1738 * A bug that caused in incorrect behavior when [combining `VecDeque`
1739 with zero-sized types][1.5vdz] was resolved.
1740 * [`PartialOrd` for slices is faster][1.5po].
1745 * [Crate metadata size was reduced by 20%][1.5md].
1746 * [Improvements to code generation reduced the size of libcore by 3.3
1747 MB and rustc's memory usage by 18MB][1.5m].
1748 * [Improvements to deref translation increased performance in
1749 unoptimized builds][1.5dr].
1750 * Various errors in trait resolution [are deduplicated to only be
1751 reported once][1.5te].
1752 * Rust has preliminary [support for rumprun kernels][1.5rr].
1753 * Rust has preliminary [support for NetBSD on amd64][1.5na].
1755 [1.5use]: https://github.com/rust-lang/rust/pull/28364
1756 [1.5po]: https://github.com/rust-lang/rust/pull/28436
1757 [1.5ev]: https://github.com/rust-lang/rust/pull/28442
1758 [1.5nu]: https://github.com/rust-lang/rust/pull/28468
1759 [1.5dr]: https://github.com/rust-lang/rust/pull/28491
1760 [1.5vdz]: https://github.com/rust-lang/rust/pull/28494
1761 [1.5md]: https://github.com/rust-lang/rust/pull/28521
1762 [1.5fg]: https://github.com/rust-lang/rust/pull/28522
1763 [1.5dv]: https://github.com/rust-lang/rust/pull/28531
1764 [1.5na]: https://github.com/rust-lang/rust/pull/28543
1765 [1.5fp]: https://github.com/rust-lang/rust/pull/28560
1766 [1.5rr]: https://github.com/rust-lang/rust/pull/28593
1767 [1.5cf]: https://github.com/rust-lang/rust/pull/28602
1768 [1.5nl]: https://github.com/rust-lang/rust/pull/28605
1769 [1.5te]: https://github.com/rust-lang/rust/pull/28645
1770 [1.5at]: https://github.com/rust-lang/rust/pull/28650
1771 [1.5am]: https://github.com/rust-lang/rust/pull/28663
1772 [1.5m]: https://github.com/rust-lang/rust/pull/28778
1773 [1.5ict]: https://github.com/rust-lang/rust/pull/28779
1774 [1.5a]: https://github.com/rust-lang/rust/pull/28811
1775 [1.5pi]: https://github.com/rust-lang/rust/pull/28826
1776 [1.5ce]: https://github.com/rust-lang/rfcs/blob/master/text/1229-compile-time-asserts.md
1777 [1.5p]: https://github.com/rust-lang/rfcs/blob/master/text/1238-nonparametric-dropck.md
1778 [1.5i]: https://github.com/rust-lang/rust/pull/28921
1779 [1.5fs]: https://github.com/rust-lang/rust/pull/29021
1780 [1.5f]: https://github.com/rust-lang/rust/pull/29129
1781 [1.5ds]: https://github.com/rust-lang/rust/pull/29148
1782 [1.5s]: https://github.com/rust-lang/rust/pull/29190
1783 [1.5d]: https://github.com/rust-lang/rust/pull/29245
1784 [1.5o]: https://github.com/rust-lang/rust/pull/29259
1785 [1.5nd]: https://github.com/rust-lang/rust/pull/28578
1786 [1.5wf2]: https://github.com/rust-lang/rfcs/blob/master/text/1214-projections-lifetimes-and-wf.md
1787 [1.5wf1]: https://github.com/rust-lang/rust/pull/28669
1788 [dropck]: https://doc.rust-lang.org/nightly/nomicon/dropck.html
1789 [1.5c]: https://github.com/rust-lang/rust/pull/29110
1790 [1.5w]: https://github.com/rust-lang/rfcs/blob/master/text/1241-no-wildcard-deps.md
1791 [`cargo install`]: https://github.com/rust-lang/rfcs/blob/master/text/1200-cargo-install.md
1792 [`BinaryHeap::from`]: http://doc.rust-lang.org/nightly/std/convert/trait.From.html#method.from
1793 [`BinaryHeap::into_sorted_vec`]: http://doc.rust-lang.org/nightly/std/collections/struct.BinaryHeap.html#method.into_sorted_vec
1794 [`BinaryHeap::into_vec`]: http://doc.rust-lang.org/nightly/std/collections/struct.BinaryHeap.html#method.into_vec
1795 [`Condvar::wait_timeout`]: http://doc.rust-lang.org/nightly/std/sync/struct.Condvar.html#method.wait_timeout
1796 [`FileTypeExt::is_block_device`]: http://doc.rust-lang.org/nightly/std/os/unix/fs/trait.FileTypeExt.html#tymethod.is_block_device
1797 [`FileTypeExt::is_char_device`]: http://doc.rust-lang.org/nightly/std/os/unix/fs/trait.FileTypeExt.html#tymethod.is_char_device
1798 [`FileTypeExt::is_fifo`]: http://doc.rust-lang.org/nightly/std/os/unix/fs/trait.FileTypeExt.html#tymethod.is_fifo
1799 [`FileTypeExt::is_socket`]: http://doc.rust-lang.org/nightly/std/os/unix/fs/trait.FileTypeExt.html#tymethod.is_socket
1800 [`FileTypeExt`]: http://doc.rust-lang.org/nightly/std/os/unix/fs/trait.FileTypeExt.html
1801 [`Formatter::alternate`]: http://doc.rust-lang.org/nightly/core/fmt/struct.Formatter.html#method.alternate
1802 [`Formatter::fill`]: http://doc.rust-lang.org/nightly/core/fmt/struct.Formatter.html#method.fill
1803 [`Formatter::precision`]: http://doc.rust-lang.org/nightly/core/fmt/struct.Formatter.html#method.precision
1804 [`Formatter::sign_aware_zero_pad`]: http://doc.rust-lang.org/nightly/core/fmt/struct.Formatter.html#method.sign_aware_zero_pad
1805 [`Formatter::sign_minus`]: http://doc.rust-lang.org/nightly/core/fmt/struct.Formatter.html#method.sign_minus
1806 [`Formatter::sign_plus`]: http://doc.rust-lang.org/nightly/core/fmt/struct.Formatter.html#method.sign_plus
1807 [`Formatter::width`]: http://doc.rust-lang.org/nightly/core/fmt/struct.Formatter.html#method.width
1808 [`Iterator::cmp`]: http://doc.rust-lang.org/nightly/core/iter/trait.Iterator.html#method.cmp
1809 [`Iterator::eq`]: http://doc.rust-lang.org/nightly/core/iter/trait.Iterator.html#method.eq
1810 [`Iterator::ge`]: http://doc.rust-lang.org/nightly/core/iter/trait.Iterator.html#method.ge
1811 [`Iterator::gt`]: http://doc.rust-lang.org/nightly/core/iter/trait.Iterator.html#method.gt
1812 [`Iterator::le`]: http://doc.rust-lang.org/nightly/core/iter/trait.Iterator.html#method.le
1813 [`Iterator::lt`]: http://doc.rust-lang.org/nightly/core/iter/trait.Iterator.html#method.lt
1814 [`Iterator::ne`]: http://doc.rust-lang.org/nightly/core/iter/trait.Iterator.html#method.ne
1815 [`Iterator::partial_cmp`]: http://doc.rust-lang.org/nightly/core/iter/trait.Iterator.html#method.partial_cmp
1816 [`Path::canonicalize`]: http://doc.rust-lang.org/nightly/std/path/struct.Path.html#method.canonicalize
1817 [`Path::exists`]: http://doc.rust-lang.org/nightly/std/path/struct.Path.html#method.exists
1818 [`Path::is_dir`]: http://doc.rust-lang.org/nightly/std/path/struct.Path.html#method.is_dir
1819 [`Path::is_file`]: http://doc.rust-lang.org/nightly/std/path/struct.Path.html#method.is_file
1820 [`Path::metadata`]: http://doc.rust-lang.org/nightly/std/path/struct.Path.html#method.metadata
1821 [`Path::read_dir`]: http://doc.rust-lang.org/nightly/std/path/struct.Path.html#method.read_dir
1822 [`Path::read_link`]: http://doc.rust-lang.org/nightly/std/path/struct.Path.html#method.read_link
1823 [`Path::symlink_metadata`]: http://doc.rust-lang.org/nightly/std/path/struct.Path.html#method.symlink_metadata
1824 [`Utf8Error::valid_up_to`]: http://doc.rust-lang.org/nightly/core/str/struct.Utf8Error.html#method.valid_up_to
1825 [`Vec::resize`]: http://doc.rust-lang.org/nightly/std/vec/struct.Vec.html#method.resize
1826 [`VecDeque::as_mut_slices`]: http://doc.rust-lang.org/nightly/std/collections/struct.VecDeque.html#method.as_mut_slices
1827 [`VecDeque::as_slices`]: http://doc.rust-lang.org/nightly/std/collections/struct.VecDeque.html#method.as_slices
1828 [`VecDeque::insert`]: http://doc.rust-lang.org/nightly/std/collections/struct.VecDeque.html#method.insert
1829 [`VecDeque::shrink_to_fit`]: http://doc.rust-lang.org/nightly/std/collections/struct.VecDeque.html#method.shrink_to_fit
1830 [`VecDeque::swap_remove_back`]: http://doc.rust-lang.org/nightly/std/collections/struct.VecDeque.html#method.swap_remove_back
1831 [`VecDeque::swap_remove_front`]: http://doc.rust-lang.org/nightly/std/collections/struct.VecDeque.html#method.swap_remove_front
1832 [`slice::split_first_mut`]: http://doc.rust-lang.org/nightly/std/primitive.slice.html#method.split_first_mut
1833 [`slice::split_first`]: http://doc.rust-lang.org/nightly/std/primitive.slice.html#method.split_first
1834 [`slice::split_last_mut`]: http://doc.rust-lang.org/nightly/std/primitive.slice.html#method.split_last_mut
1835 [`slice::split_last`]: http://doc.rust-lang.org/nightly/std/primitive.slice.html#method.split_last
1836 [`char::from_u32_unchecked`]: http://doc.rust-lang.org/nightly/std/char/fn.from_u32_unchecked.html
1837 [`fs::canonicalize`]: http://doc.rust-lang.org/nightly/std/fs/fn.canonicalize.html
1838 [`str::MatchIndices`]: http://doc.rust-lang.org/nightly/std/str/struct.MatchIndices.html
1839 [`str::RMatchIndices`]: http://doc.rust-lang.org/nightly/std/str/struct.RMatchIndices.html
1840 [`str::match_indices`]: http://doc.rust-lang.org/nightly/std/primitive.str.html#method.match_indices
1841 [`str::rmatch_indices`]: http://doc.rust-lang.org/nightly/std/primitive.str.html#method.rmatch_indices
1842 [`str::slice_mut_unchecked`]: http://doc.rust-lang.org/nightly/std/primitive.str.html#method.slice_mut_unchecked
1843 [`string::ParseError`]: http://doc.rust-lang.org/nightly/std/string/enum.ParseError.html
1845 Version 1.4.0 (2015-10-29)
1846 ==========================
1848 * ~1200 changes, numerous bugfixes
1853 * Windows builds targeting the 64-bit MSVC ABI and linker (instead of
1854 GNU) are now supported and recommended for use.
1859 * [Several changes have been made to fix type soundness and improve
1860 the behavior of associated types][sound]. See [RFC 1214]. Although
1861 we have mostly introduced these changes as warnings this release, to
1862 become errors next release, there are still some scenarios that will
1863 see immediate breakage.
1864 * [The `str::lines` and `BufRead::lines` iterators treat `\r\n` as
1865 line breaks in addition to `\n`][crlf].
1866 * [Loans of `'static` lifetime extend to the end of a function][stat].
1867 * [`str::parse` no longer introduces avoidable rounding error when
1868 parsing floating point numbers. Together with earlier changes to
1869 float formatting/output, "round trips" like f.to_string().parse()
1870 now preserve the value of f exactly. Additionally, leading plus
1871 signs are now accepted][fp3].
1877 * `use` statements that import multiple items [can now rename
1878 them][i], as in `use foo::{bar as kitten, baz as puppy}`.
1879 * [Binops work correctly on fat pointers][binfat].
1880 * `pub extern crate`, which does not behave as expected, [issues a
1881 warning][pec] until a better solution is found.
1886 * [Many APIs were stabilized][stab]: `<Box<str>>::into_string`,
1887 [`Arc::downgrade`], [`Arc::get_mut`], [`Arc::make_mut`],
1888 [`Arc::try_unwrap`], [`Box::from_raw`], [`Box::into_raw`], [`CStr::to_str`],
1889 [`CStr::to_string_lossy`], [`CString::from_raw`], [`CString::into_raw`],
1890 [`IntoRawFd::into_raw_fd`], [`IntoRawFd`],
1891 `IntoRawHandle::into_raw_handle`, `IntoRawHandle`,
1892 `IntoRawSocket::into_raw_socket`, `IntoRawSocket`, [`Rc::downgrade`],
1893 [`Rc::get_mut`], [`Rc::make_mut`], [`Rc::try_unwrap`], [`Result::expect`],
1894 [`String::into_boxed_str`], [`TcpStream::read_timeout`],
1895 [`TcpStream::set_read_timeout`], [`TcpStream::set_write_timeout`],
1896 [`TcpStream::write_timeout`], [`UdpSocket::read_timeout`],
1897 [`UdpSocket::set_read_timeout`], [`UdpSocket::set_write_timeout`],
1898 [`UdpSocket::write_timeout`], `Vec::append`, `Vec::split_off`,
1899 [`VecDeque::append`], [`VecDeque::retain`], [`VecDeque::split_off`],
1900 [`rc::Weak::upgrade`], [`rc::Weak`], [`slice::Iter::as_slice`],
1901 [`slice::IterMut::into_slice`], [`str::CharIndices::as_str`],
1902 [`str::Chars::as_str`], [`str::split_at_mut`], [`str::split_at`],
1903 [`sync::Weak::upgrade`], [`sync::Weak`], [`thread::park_timeout`],
1905 * [Some APIs were deprecated][dep]: `BTreeMap::with_b`,
1906 `BTreeSet::with_b`, `Option::as_mut_slice`, `Option::as_slice`,
1907 `Result::as_mut_slice`, `Result::as_slice`, `f32::from_str_radix`,
1908 `f64::from_str_radix`.
1909 * [Reverse-searching strings is faster with the 'two-way'
1911 * [`std::io::copy` allows `?Sized` arguments][cc].
1912 * The `Windows`, `Chunks`, and `ChunksMut` iterators over slices all
1913 [override `count`, `nth` and `last` with an O(1)
1914 implementation][it].
1915 * [`Default` is implemented for arrays up to `[T; 32]`][d].
1916 * [`IntoRawFd` has been added to the Unix-specific prelude,
1917 `IntoRawSocket` and `IntoRawHandle` to the Windows-specific
1919 * [`Extend<String>` and `FromIterator<String` are both implemented for
1921 * [`IntoIterator` is implemented for references to `Option` and
1923 * [`HashMap` and `HashSet` implement `Extend<&T>` where `T:
1924 Copy`][ext] as part of [RFC 839]. This will cause type inferance
1925 breakage in rare situations.
1926 * [`BinaryHeap` implements `Debug`][bh2].
1927 * [`Borrow` and `BorrowMut` are implemented for fixed-size
1929 * [`extern fn`s with the "Rust" and "C" ABIs implement common
1930 traits including `Eq`, `Ord`, `Debug`, `Hash`][fp].
1931 * [String comparison is faster][faststr].
1932 * `&mut T` where `T: std::fmt::Write` [also implements
1933 `std::fmt::Write`][mutw].
1934 * [A stable regression in `VecDeque::push_back` and other
1935 capicity-altering methods that caused panics for zero-sized types
1937 * [Function pointers implement traits for up to 12 parameters][fp2].
1942 * The compiler [no longer uses the 'morestack' feature to prevent
1943 stack overflow][mm]. Instead it uses guard pages and stack
1944 probes (though stack probes are not yet implemented on any platform
1946 * [The compiler matches traits faster when projections are involved][p].
1947 * The 'improper_ctypes' lint [no longer warns about use of `isize` and
1949 * [Cargo now displays useful information about what its doing during
1950 `cargo update`][cu].
1952 [`Arc::downgrade`]: http://doc.rust-lang.org/nightly/alloc/arc/struct.Arc.html#method.downgrade
1953 [`Arc::make_mut`]: http://doc.rust-lang.org/nightly/alloc/arc/struct.Arc.html#method.make_mut
1954 [`Arc::get_mut`]: http://doc.rust-lang.org/nightly/alloc/arc/struct.Arc.html#method.get_mut
1955 [`Arc::try_unwrap`]: http://doc.rust-lang.org/nightly/alloc/arc/struct.Arc.html#method.try_unwrap
1956 [`Box::from_raw`]: http://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html#method.from_raw
1957 [`Box::into_raw`]: http://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html#method.into_raw
1958 [`CStr::to_str`]: http://doc.rust-lang.org/nightly/std/ffi/struct.CStr.html#method.to_str
1959 [`CStr::to_string_lossy`]: http://doc.rust-lang.org/nightly/std/ffi/struct.CStr.html#method.to_string_lossy
1960 [`CString::from_raw`]: http://doc.rust-lang.org/nightly/std/ffi/struct.CString.html#method.from_raw
1961 [`CString::into_raw`]: http://doc.rust-lang.org/nightly/std/ffi/struct.CString.html#method.into_raw
1962 [`IntoRawFd::into_raw_fd`]: http://doc.rust-lang.org/nightly/std/os/unix/io/trait.IntoRawFd.html#tymethod.into_raw_fd
1963 [`IntoRawFd`]: http://doc.rust-lang.org/nightly/std/os/unix/io/trait.IntoRawFd.html
1964 [`Rc::downgrade`]: http://doc.rust-lang.org/nightly/alloc/rc/struct.Rc.html#method.downgrade
1965 [`Rc::get_mut`]: http://doc.rust-lang.org/nightly/alloc/rc/struct.Rc.html#method.get_mut
1966 [`Rc::make_mut`]: http://doc.rust-lang.org/nightly/alloc/rc/struct.Rc.html#method.make_mut
1967 [`Rc::try_unwrap`]: http://doc.rust-lang.org/nightly/alloc/rc/struct.Rc.html#method.try_unwrap
1968 [`Result::expect`]: http://doc.rust-lang.org/nightly/core/result/enum.Result.html#method.expect
1969 [`String::into_boxed_str`]: http://doc.rust-lang.org/nightly/collections/string/struct.String.html#method.into_boxed_str
1970 [`TcpStream::read_timeout`]: http://doc.rust-lang.org/nightly/std/net/struct.TcpStream.html#method.read_timeout
1971 [`TcpStream::set_read_timeout`]: http://doc.rust-lang.org/nightly/std/net/struct.TcpStream.html#method.set_read_timeout
1972 [`TcpStream::write_timeout`]: http://doc.rust-lang.org/nightly/std/net/struct.TcpStream.html#method.write_timeout
1973 [`TcpStream::set_write_timeout`]: http://doc.rust-lang.org/nightly/std/net/struct.TcpStream.html#method.set_write_timeout
1974 [`UdpSocket::read_timeout`]: http://doc.rust-lang.org/nightly/std/net/struct.TcpStream.html#method.read_timeout
1975 [`UdpSocket::set_read_timeout`]: http://doc.rust-lang.org/nightly/std/net/struct.TcpStream.html#method.set_read_timeout
1976 [`UdpSocket::write_timeout`]: http://doc.rust-lang.org/nightly/std/net/struct.TcpStream.html#method.write_timeout
1977 [`UdpSocket::set_write_timeout`]: http://doc.rust-lang.org/nightly/std/net/struct.TcpStream.html#method.set_write_timeout
1978 [`VecDeque::append`]: http://doc.rust-lang.org/nightly/std/collections/struct.VecDeque.html#method.append
1979 [`VecDeque::retain`]: http://doc.rust-lang.org/nightly/std/collections/struct.VecDeque.html#method.retain
1980 [`VecDeque::split_off`]: http://doc.rust-lang.org/nightly/std/collections/struct.VecDeque.html#method.split_off
1981 [`rc::Weak::upgrade`]: http://doc.rust-lang.org/nightly/std/rc/struct.Weak.html#method.upgrade
1982 [`rc::Weak`]: http://doc.rust-lang.org/nightly/std/rc/struct.Weak.html
1983 [`slice::Iter::as_slice`]: http://doc.rust-lang.org/nightly/std/slice/struct.Iter.html#method.as_slice
1984 [`slice::IterMut::into_slice`]: http://doc.rust-lang.org/nightly/std/slice/struct.IterMut.html#method.into_slice
1985 [`str::CharIndices::as_str`]: http://doc.rust-lang.org/nightly/std/str/struct.CharIndices.html#method.as_str
1986 [`str::Chars::as_str`]: http://doc.rust-lang.org/nightly/std/str/struct.Chars.html#method.as_str
1987 [`str::split_at_mut`]: http://doc.rust-lang.org/nightly/std/primitive.str.html#method.split_at_mut
1988 [`str::split_at`]: http://doc.rust-lang.org/nightly/std/primitive.str.html#method.split_at
1989 [`sync::Weak::upgrade`]: http://doc.rust-lang.org/nightly/std/sync/struct.Weak.html#method.upgrade
1990 [`sync::Weak`]: http://doc.rust-lang.org/nightly/std/sync/struct.Weak.html
1991 [`thread::park_timeout`]: http://doc.rust-lang.org/nightly/std/thread/fn.park_timeout.html
1992 [`thread::sleep`]: http://doc.rust-lang.org/nightly/std/thread/fn.sleep.html
1993 [bh2]: https://github.com/rust-lang/rust/pull/28156
1994 [binfat]: https://github.com/rust-lang/rust/pull/28270
1995 [bm]: https://github.com/rust-lang/rust/pull/28197
1996 [cc]: https://github.com/rust-lang/rust/pull/27531
1997 [crlf]: https://github.com/rust-lang/rust/pull/28034
1998 [cu]: https://github.com/rust-lang/cargo/pull/1931
1999 [d]: https://github.com/rust-lang/rust/pull/27825
2000 [dep]: https://github.com/rust-lang/rust/pull/28339
2001 [es]: https://github.com/rust-lang/rust/pull/27956
2002 [ext]: https://github.com/rust-lang/rust/pull/28094
2003 [faststr]: https://github.com/rust-lang/rust/pull/28338
2004 [ffi]: https://github.com/rust-lang/rust/pull/28779
2005 [fp]: https://github.com/rust-lang/rust/pull/28268
2006 [fp2]: https://github.com/rust-lang/rust/pull/28560
2007 [fp3]: https://github.com/rust-lang/rust/pull/27307
2008 [i]: https://github.com/rust-lang/rust/pull/27451
2009 [into2]: https://github.com/rust-lang/rust/pull/28039
2010 [it]: https://github.com/rust-lang/rust/pull/27652
2011 [mm]: https://github.com/rust-lang/rust/pull/27338
2012 [mutw]: https://github.com/rust-lang/rust/pull/28368
2013 [sound]: https://github.com/rust-lang/rust/pull/27641
2014 [p]: https://github.com/rust-lang/rust/pull/27866
2015 [pec]: https://github.com/rust-lang/rust/pull/28486
2016 [pr]: https://github.com/rust-lang/rust/pull/27896
2017 [RFC 839]: https://github.com/rust-lang/rfcs/blob/master/text/0839-embrace-extend-extinguish.md
2018 [RFC 1214]: https://github.com/rust-lang/rfcs/blob/master/text/1214-projections-lifetimes-and-wf.md
2019 [s]: https://github.com/rust-lang/rust/pull/27474
2020 [stab]: https://github.com/rust-lang/rust/pull/28339
2021 [stat]: https://github.com/rust-lang/rust/pull/28321
2022 [vd]: https://github.com/rust-lang/rust/pull/28494
2024 Version 1.3.0 (2015-09-17)
2025 ==============================
2027 * ~900 changes, numerous bugfixes
2032 * The [new object lifetime defaults][nold] have been [turned
2033 on][nold2] after a cycle of warnings about the change. Now types
2034 like `&'a Box<Trait>` (or `&'a Rc<Trait>`, etc) will change from
2035 being interpreted as `&'a Box<Trait+'a>` to `&'a
2036 Box<Trait+'static>`.
2037 * [The Rustonomicon][nom] is a new book in the official documentation
2038 that dives into writing unsafe Rust.
2039 * The [`Duration`] API, [has been stabilized][ds]. This basic unit of
2040 timekeeping is employed by other std APIs, as well as out-of-tree
2046 * The [new object lifetime defaults][nold] have been [turned
2047 on][nold2] after a cycle of warnings about the change.
2048 * There is a known [regression][lr] in how object lifetime elision is
2049 interpreted, the proper solution for which is undetermined.
2050 * The `#[prelude_import]` attribute, an internal implementation
2051 detail, was accidentally stabilized previously. [It has been put
2052 behind the `prelude_import` feature gate][pi]. This change is
2053 believed to break no existing code.
2054 * The behavior of [`size_of_val`][dst1] and [`align_of_val`][dst2] is
2055 [more sane for dynamically sized types][dst3]. Code that relied on
2056 the previous behavior is thought to be broken.
2057 * The `dropck` rules, which checks that destructors can't access
2058 destroyed values, [have been updated][dropck] to match the
2059 [RFC][dropckrfc]. This fixes some soundness holes, and as such will
2060 cause some previously-compiling code to no longer build.
2065 * The [new object lifetime defaults][nold] have been [turned
2066 on][nold2] after a cycle of warnings about the change.
2067 * Semicolons may [now follow types and paths in
2068 macros](https://github.com/rust-lang/rust/pull/27000).
2069 * The behavior of [`size_of_val`][dst1] and [`align_of_val`][dst2] is
2070 [more sane for dynamically sized types][dst3]. Code that relied on
2071 the previous behavior is not known to exist, and suspected to be
2073 * `'static` variables [may now be recursive][st].
2074 * `ref` bindings choose between [`Deref`] and [`DerefMut`]
2075 implementations correctly.
2076 * The `dropck` rules, which checks that destructors can't access
2077 destroyed values, [have been updated][dropck] to match the
2083 * The [`Duration`] API, [has been stabilized][ds], as well as the
2084 `std::time` module, which presently contains only `Duration`.
2085 * `Box<str>` and `Box<[T]>` both implement `Clone`.
2086 * The owned C string, [`CString`], implements [`Borrow`] and the
2087 borrowed C string, [`CStr`], implements [`ToOwned`]. The two of
2088 these allow C strings to be borrowed and cloned in generic code.
2089 * [`CStr`] implements [`Debug`].
2090 * [`AtomicPtr`] implements [`Debug`].
2091 * [`Error`] trait objects [can be downcast to their concrete types][e]
2092 in many common configurations, using the [`is`], [`downcast`],
2093 [`downcast_ref`] and [`downcast_mut`] methods, similarly to the
2095 * Searching for substrings now [employs the two-way algorithm][search]
2096 instead of doing a naive search. This gives major speedups to a
2097 number of methods, including [`contains`][sc], [`find`][sf],
2098 [`rfind`][srf], [`split`][ss]. [`starts_with`][ssw] and
2099 [`ends_with`][sew] are also faster.
2100 * The performance of `PartialEq` for slices is [much faster][ps].
2101 * The [`Hash`] trait offers the default method, [`hash_slice`], which
2102 is overridden and optimized by the implementations for scalars.
2103 * The [`Hasher`] trait now has a number of specialized `write_*`
2104 methods for primitive types, for efficiency.
2105 * The I/O-specific error type, [`std::io::Error`][ie], gained a set of
2106 methods for accessing the 'inner error', if any: [`get_ref`][iegr],
2107 [`get_mut`][iegm], [`into_inner`][ieii]. As well, the implementation
2108 of [`std::error::Error::cause`][iec] also delegates to the inner
2110 * [`process::Child`][pc] gained the [`id`] method, which returns a
2111 `u32` representing the platform-specific process identifier.
2112 * The [`connect`] method on slices is deprecated, replaced by the new
2113 [`join`] method (note that both of these are on the *unstable*
2114 [`SliceConcatExt`] trait, but through the magic of the prelude are
2115 available to stable code anyway).
2116 * The [`Div`] operator is implemented for [`Wrapping`] types.
2117 * [`DerefMut` is implemented for `String`][dms].
2118 * Performance of SipHash (the default hasher for `HashMap`) is
2119 [better for long data][sh].
2120 * [`AtomicPtr`] implements [`Send`].
2121 * The [`read_to_end`] implementations for [`Stdin`] and [`File`]
2122 are now [specialized to use uninitalized buffers for increased
2124 * Lifetime parameters of foreign functions [are now resolved
2130 * Rust can now, with some coercion, [produce programs that run on
2131 Windows XP][xp], though XP is not considered a supported platform.
2132 * Porting Rust on Windows from the GNU toolchain to MSVC continues
2133 ([1][win1], [2][win2], [3][win3], [4][win4]). It is still not
2134 recommended for use in 1.3, though should be fully-functional
2135 in the [64-bit 1.4 beta][b14].
2136 * On Fedora-based systems installation will [properly configure the
2137 dynamic linker][fl].
2138 * The compiler gained many new extended error descriptions, which can
2139 be accessed with the `--explain` flag.
2140 * The `dropck` pass, which checks that destructors can't access
2141 destroyed values, [has been rewritten][dropck]. This fixes some
2142 soundness holes, and as such will cause some previously-compiling
2143 code to no longer build.
2144 * `rustc` now uses [LLVM to write archive files where possible][ar].
2145 Eventually this will eliminate the compiler's dependency on the ar
2147 * Rust has [preliminary support for i686 FreeBSD][fb] (it has long
2148 supported FreeBSD on x86_64).
2149 * The [`unused_mut`][lum], [`unconditional_recursion`][lur],
2150 [`improper_ctypes`][lic], and [`negate_unsigned`][lnu] lints are
2152 * If landing pads are disabled (with `-Z no-landing-pads`), [`panic!`
2153 will kill the process instead of leaking][nlp].
2155 [`Any`]: http://doc.rust-lang.org/nightly/std/any/trait.Any.html
2156 [`AtomicPtr`]: http://doc.rust-lang.org/nightly/std/sync/atomic/struct.AtomicPtr.html
2157 [`Borrow`]: http://doc.rust-lang.org/nightly/std/borrow/trait.Borrow.html
2158 [`CStr`]: http://doc.rust-lang.org/nightly/std/ffi/struct.CStr.html
2159 [`CString`]: http://doc.rust-lang.org/nightly/std/ffi/struct.CString.html
2160 [`Debug`]: http://doc.rust-lang.org/nightly/std/fmt/trait.Debug.html
2161 [`DerefMut`]: http://doc.rust-lang.org/nightly/std/ops/trait.DerefMut.html
2162 [`Deref`]: http://doc.rust-lang.org/nightly/std/ops/trait.Deref.html
2163 [`Div`]: http://doc.rust-lang.org/nightly/std/ops/trait.Div.html
2164 [`Duration`]: http://doc.rust-lang.org/nightly/std/time/struct.Duration.html
2165 [`Error`]: http://doc.rust-lang.org/nightly/std/error/trait.Error.html
2166 [`File`]: http://doc.rust-lang.org/nightly/std/fs/struct.File.html
2167 [`Hash`]: http://doc.rust-lang.org/nightly/std/hash/trait.Hash.html
2168 [`Hasher`]: http://doc.rust-lang.org/nightly/std/hash/trait.Hasher.html
2169 [`Send`]: http://doc.rust-lang.org/nightly/std/marker/trait.Send.html
2170 [`SliceConcatExt`]: http://doc.rust-lang.org/nightly/std/slice/trait.SliceConcatExt.html
2171 [`Stdin`]: http://doc.rust-lang.org/nightly/std/io/struct.Stdin.html
2172 [`ToOwned`]: http://doc.rust-lang.org/nightly/std/borrow/trait.ToOwned.html
2173 [`Wrapping`]: http://doc.rust-lang.org/nightly/std/num/struct.Wrapping.html
2174 [`connect`]: http://doc.rust-lang.org/nightly/std/slice/trait.SliceConcatExt.html#method.connect
2175 [`downcast_mut`]: http://doc.rust-lang.org/nightly/std/error/trait.Error.html#method.downcast_mut
2176 [`downcast_ref`]: http://doc.rust-lang.org/nightly/std/error/trait.Error.html#method.downcast_ref
2177 [`downcast`]: http://doc.rust-lang.org/nightly/std/error/trait.Error.html#method.downcast
2178 [`hash_slice`]: http://doc.rust-lang.org/nightly/std/hash/trait.Hash.html#method.hash_slice
2179 [`id`]: http://doc.rust-lang.org/nightly/std/process/struct.Child.html#method.id
2180 [`is`]: http://doc.rust-lang.org/nightly/std/error/trait.Error.html#method.is
2181 [`join`]: http://doc.rust-lang.org/nightly/std/slice/trait.SliceConcatExt.html#method.join
2182 [`read_to_end`]: http://doc.rust-lang.org/nightly/std/io/trait.Read.html#method.read_to_end
2183 [ar]: https://github.com/rust-lang/rust/pull/26926
2184 [b14]: https://static.rust-lang.org/dist/rust-beta-x86_64-pc-windows-msvc.msi
2185 [dms]: https://github.com/rust-lang/rust/pull/26241
2186 [dropck]: https://github.com/rust-lang/rust/pull/27261
2187 [dropckrfc]: https://github.com/rust-lang/rfcs/blob/master/text/0769-sound-generic-drop.md
2188 [ds]: https://github.com/rust-lang/rust/pull/26818
2189 [dst1]: http://doc.rust-lang.org/nightly/std/mem/fn.size_of_val.html
2190 [dst2]: http://doc.rust-lang.org/nightly/std/mem/fn.align_of_val.html
2191 [dst3]: https://github.com/rust-lang/rust/pull/27351
2192 [e]: https://github.com/rust-lang/rust/pull/24793
2193 [f]: https://github.com/rust-lang/rust/pull/26588
2194 [fb]: https://github.com/rust-lang/rust/pull/26959
2195 [fl]: https://github.com/rust-lang/rust-installer/pull/41
2196 [hs]: http://doc.rust-lang.org/nightly/std/hash/trait.Hash.html#method.hash_slice
2197 [ie]: http://doc.rust-lang.org/nightly/std/io/struct.Error.html
2198 [iec]: http://doc.rust-lang.org/nightly/std/io/struct.Error.html#method.cause
2199 [iegm]: http://doc.rust-lang.org/nightly/std/io/struct.Error.html#method.get_mut
2200 [iegr]: http://doc.rust-lang.org/nightly/std/io/struct.Error.html#method.get_ref
2201 [ieii]: http://doc.rust-lang.org/nightly/std/io/struct.Error.html#method.into_inner
2202 [lic]: https://github.com/rust-lang/rust/pull/26583
2203 [lnu]: https://github.com/rust-lang/rust/pull/27026
2204 [lr]: https://github.com/rust-lang/rust/issues/27248
2205 [lum]: https://github.com/rust-lang/rust/pull/26378
2206 [lur]: https://github.com/rust-lang/rust/pull/26783
2207 [nlp]: https://github.com/rust-lang/rust/pull/27176
2208 [nold2]: https://github.com/rust-lang/rust/pull/27045
2209 [nold]: https://github.com/rust-lang/rfcs/blob/master/text/1156-adjust-default-object-bounds.md
2210 [nom]: http://doc.rust-lang.org/nightly/nomicon/
2211 [pc]: http://doc.rust-lang.org/nightly/std/process/struct.Child.html
2212 [pi]: https://github.com/rust-lang/rust/pull/26699
2213 [ps]: https://github.com/rust-lang/rust/pull/26884
2214 [rte]: https://github.com/rust-lang/rust/pull/26950
2215 [sc]: http://doc.rust-lang.org/nightly/std/primitive.str.html#method.contains
2216 [search]: https://github.com/rust-lang/rust/pull/26327
2217 [sew]: http://doc.rust-lang.org/nightly/std/primitive.str.html#method.ends_with
2218 [sf]: http://doc.rust-lang.org/nightly/std/primitive.str.html#method.find
2219 [sh]: https://github.com/rust-lang/rust/pull/27280
2220 [srf]: http://doc.rust-lang.org/nightly/std/primitive.str.html#method.rfind
2221 [ss]: http://doc.rust-lang.org/nightly/std/primitive.str.html#method.split
2222 [ssw]: http://doc.rust-lang.org/nightly/std/primitive.str.html#method.starts_with
2223 [st]: https://github.com/rust-lang/rust/pull/26630
2224 [win1]: https://github.com/rust-lang/rust/pull/26569
2225 [win2]: https://github.com/rust-lang/rust/pull/26741
2226 [win3]: https://github.com/rust-lang/rust/pull/26741
2227 [win4]: https://github.com/rust-lang/rust/pull/27210
2228 [xp]: https://github.com/rust-lang/rust/pull/26569
2230 Version 1.2.0 (2015-08-07)
2231 ==========================
2233 * ~1200 changes, numerous bugfixes
2238 * [Dynamically-sized-type coercions][dst] allow smart pointer types
2239 like `Rc` to contain types without a fixed size, arrays and trait
2240 objects, finally enabling use of `Rc<[T]>` and completing the
2241 implementation of DST.
2242 * [Parallel codegen][parcodegen] is now working again, which can
2243 substantially speed up large builds in debug mode; It also gets
2244 another ~33% speedup when bootstrapping on a 4 core machine (using 8
2245 jobs). It's not enabled by default, but will be "in the near
2246 future". It can be activated with the `-C codegen-units=N` flag to
2248 * This is the first release with [experimental support for linking
2249 with the MSVC linker and lib C on Windows (instead of using the GNU
2250 variants via MinGW)][win]. It is yet recommended only for the most
2251 intrepid Rusticians.
2252 * Benchmark compilations are showing a 30% improvement in
2253 bootstrapping over 1.1.
2258 * The [`to_uppercase`] and [`to_lowercase`] methods on `char` now do
2259 unicode case mapping, which is a previously-planned change in
2260 behavior and considered a bugfix.
2261 * [`mem::align_of`] now specifies [the *minimum alignment* for
2262 T][align], which is usually the alignment programs are interested
2263 in, and the same value reported by clang's
2264 `alignof`. [`mem::min_align_of`] is deprecated. This is not known to
2266 * [The `#[packed]` attribute is no longer silently accepted by the
2267 compiler][packed]. This attribute did nothing and code that
2268 mentioned it likely did not work as intended.
2269 * Associated type defaults are [now behind the
2270 `associated_type_defaults` feature gate][ad]. In 1.1 associated type
2271 defaults *did not work*, but could be mentioned syntactically. As
2272 such this breakage has minimal impact.
2277 * Patterns with `ref mut` now correctly invoke [`DerefMut`] when
2278 matching against dereferencable values.
2283 * The [`Extend`] trait, which grows a collection from an iterator, is
2284 implemented over iterators of references, for `String`, `Vec`,
2285 `LinkedList`, `VecDeque`, `EnumSet`, `BinaryHeap`, `VecMap`,
2286 `BTreeSet` and `BTreeMap`. [RFC][extend-rfc].
2287 * The [`iter::once`] function returns an iterator that yields a single
2288 element, and [`iter::empty`] returns an iterator that yields no
2290 * The [`matches`] and [`rmatches`] methods on `str` return iterators
2291 over substring matches.
2292 * [`Cell`] and [`RefCell`] both implement `Eq`.
2293 * A number of methods for wrapping arithmetic are added to the
2294 integral types, [`wrapping_div`], [`wrapping_rem`],
2295 [`wrapping_neg`], [`wrapping_shl`], [`wrapping_shr`]. These are in
2296 addition to the existing [`wrapping_add`], [`wrapping_sub`], and
2297 [`wrapping_mul`] methods, and alternatives to the [`Wrapping`]
2298 type.. It is illegal for the default arithmetic operations in Rust
2299 to overflow; the desire to wrap must be explicit.
2300 * The `{:#?}` formatting specifier [displays the alternate,
2301 pretty-printed][debugfmt] form of the `Debug` formatter. This
2302 feature was actually introduced prior to 1.0 with little
2304 * [`fmt::Formatter`] implements [`fmt::Write`], a `fmt`-specific trait
2305 for writing data to formatted strings, similar to [`io::Write`].
2306 * [`fmt::Formatter`] adds 'debug builder' methods, [`debug_struct`],
2307 [`debug_tuple`], [`debug_list`], [`debug_set`], [`debug_map`]. These
2308 are used by code generators to emit implementations of [`Debug`].
2309 * `str` has new [`to_uppercase`][strup] and [`to_lowercase`][strlow]
2310 methods that convert case, following Unicode case mapping.
2311 * It is now easier to handle poisoned locks. The [`PoisonError`]
2312 type, returned by failing lock operations, exposes `into_inner`,
2313 `get_ref`, and `get_mut`, which all give access to the inner lock
2314 guard, and allow the poisoned lock to continue to operate. The
2315 `is_poisoned` method of [`RwLock`] and [`Mutex`] can poll for a
2316 poisoned lock without attempting to take the lock.
2317 * On Unix the [`FromRawFd`] trait is implemented for [`Stdio`], and
2318 [`AsRawFd`] for [`ChildStdin`], [`ChildStdout`], [`ChildStderr`].
2319 On Windows the `FromRawHandle` trait is implemented for `Stdio`,
2320 and `AsRawHandle` for `ChildStdin`, `ChildStdout`,
2322 * [`io::ErrorKind`] has a new variant, `InvalidData`, which indicates
2328 * `rustc` employs smarter heuristics for guessing at [typos].
2329 * `rustc` emits more efficient code for [no-op conversions between
2330 unsafe pointers][nop].
2331 * Fat pointers are now [passed in pairs of immediate arguments][fat],
2332 resulting in faster compile times and smaller code.
2334 [`Extend`]: https://doc.rust-lang.org/nightly/std/iter/trait.Extend.html
2335 [extend-rfc]: https://github.com/rust-lang/rfcs/blob/master/text/0839-embrace-extend-extinguish.md
2336 [`iter::once`]: https://doc.rust-lang.org/nightly/std/iter/fn.once.html
2337 [`iter::empty`]: https://doc.rust-lang.org/nightly/std/iter/fn.empty.html
2338 [`matches`]: https://doc.rust-lang.org/nightly/std/primitive.str.html#method.matches
2339 [`rmatches`]: https://doc.rust-lang.org/nightly/std/primitive.str.html#method.rmatches
2340 [`Cell`]: https://doc.rust-lang.org/nightly/std/cell/struct.Cell.html
2341 [`RefCell`]: https://doc.rust-lang.org/nightly/std/cell/struct.RefCell.html
2342 [`wrapping_add`]: https://doc.rust-lang.org/nightly/std/primitive.i8.html#method.wrapping_add
2343 [`wrapping_sub`]: https://doc.rust-lang.org/nightly/std/primitive.i8.html#method.wrapping_sub
2344 [`wrapping_mul`]: https://doc.rust-lang.org/nightly/std/primitive.i8.html#method.wrapping_mul
2345 [`wrapping_div`]: https://doc.rust-lang.org/nightly/std/primitive.i8.html#method.wrapping_div
2346 [`wrapping_rem`]: https://doc.rust-lang.org/nightly/std/primitive.i8.html#method.wrapping_rem
2347 [`wrapping_neg`]: https://doc.rust-lang.org/nightly/std/primitive.i8.html#method.wrapping_neg
2348 [`wrapping_shl`]: https://doc.rust-lang.org/nightly/std/primitive.i8.html#method.wrapping_shl
2349 [`wrapping_shr`]: https://doc.rust-lang.org/nightly/std/primitive.i8.html#method.wrapping_shr
2350 [`Wrapping`]: https://doc.rust-lang.org/nightly/std/num/struct.Wrapping.html
2351 [`fmt::Formatter`]: https://doc.rust-lang.org/nightly/std/fmt/struct.Formatter.html
2352 [`fmt::Write`]: https://doc.rust-lang.org/nightly/std/fmt/trait.Write.html
2353 [`io::Write`]: https://doc.rust-lang.org/nightly/std/io/trait.Write.html
2354 [`debug_struct`]: https://doc.rust-lang.org/nightly/core/fmt/struct.Formatter.html#method.debug_struct
2355 [`debug_tuple`]: https://doc.rust-lang.org/nightly/core/fmt/struct.Formatter.html#method.debug_tuple
2356 [`debug_list`]: https://doc.rust-lang.org/nightly/core/fmt/struct.Formatter.html#method.debug_list
2357 [`debug_set`]: https://doc.rust-lang.org/nightly/core/fmt/struct.Formatter.html#method.debug_set
2358 [`debug_map`]: https://doc.rust-lang.org/nightly/core/fmt/struct.Formatter.html#method.debug_map
2359 [`Debug`]: https://doc.rust-lang.org/nightly/std/fmt/trait.Debug.html
2360 [strup]: https://doc.rust-lang.org/nightly/std/primitive.str.html#method.to_uppercase
2361 [strlow]: https://doc.rust-lang.org/nightly/std/primitive.str.html#method.to_lowercase
2362 [`to_uppercase`]: https://doc.rust-lang.org/nightly/std/primitive.char.html#method.to_uppercase
2363 [`to_lowercase`]: https://doc.rust-lang.org/nightly/std/primitive.char.html#method.to_lowercase
2364 [`PoisonError`]: https://doc.rust-lang.org/nightly/std/sync/struct.PoisonError.html
2365 [`RwLock`]: https://doc.rust-lang.org/nightly/std/sync/struct.RwLock.html
2366 [`Mutex`]: https://doc.rust-lang.org/nightly/std/sync/struct.Mutex.html
2367 [`FromRawFd`]: https://doc.rust-lang.org/nightly/std/os/unix/io/trait.FromRawFd.html
2368 [`AsRawFd`]: https://doc.rust-lang.org/nightly/std/os/unix/io/trait.AsRawFd.html
2369 [`Stdio`]: https://doc.rust-lang.org/nightly/std/process/struct.Stdio.html
2370 [`ChildStdin`]: https://doc.rust-lang.org/nightly/std/process/struct.ChildStdin.html
2371 [`ChildStdout`]: https://doc.rust-lang.org/nightly/std/process/struct.ChildStdout.html
2372 [`ChildStderr`]: https://doc.rust-lang.org/nightly/std/process/struct.ChildStderr.html
2373 [`io::ErrorKind`]: https://doc.rust-lang.org/nightly/std/io/enum.ErrorKind.html
2374 [debugfmt]: https://www.reddit.com/r/rust/comments/3ceaui/psa_produces_prettyprinted_debug_output/
2375 [`DerefMut`]: https://doc.rust-lang.org/nightly/std/ops/trait.DerefMut.html
2376 [`mem::align_of`]: https://doc.rust-lang.org/nightly/std/mem/fn.align_of.html
2377 [align]: https://github.com/rust-lang/rust/pull/25646
2378 [`mem::min_align_of`]: https://doc.rust-lang.org/nightly/std/mem/fn.min_align_of.html
2379 [typos]: https://github.com/rust-lang/rust/pull/26087
2380 [nop]: https://github.com/rust-lang/rust/pull/26336
2381 [fat]: https://github.com/rust-lang/rust/pull/26411
2382 [dst]: https://github.com/rust-lang/rfcs/blob/master/text/0982-dst-coercion.md
2383 [parcodegen]: https://github.com/rust-lang/rust/pull/26018
2384 [packed]: https://github.com/rust-lang/rust/pull/25541
2385 [ad]: https://github.com/rust-lang/rust/pull/27382
2386 [win]: https://github.com/rust-lang/rust/pull/25350
2388 Version 1.1.0 (2015-06-25)
2389 =========================
2391 * ~850 changes, numerous bugfixes
2396 * The [`std::fs` module has been expanded][fs] to expand the set of
2397 functionality exposed:
2398 * `DirEntry` now supports optimizations like `file_type` and `metadata` which
2399 don't incur a syscall on some platforms.
2400 * A `symlink_metadata` function has been added.
2401 * The `fs::Metadata` structure now lowers to its OS counterpart, providing
2402 access to all underlying information.
2403 * The compiler now contains extended explanations of many errors. When an error
2404 with an explanation occurs the compiler suggests using the `--explain` flag
2405 to read the explanation. Error explanations are also [available online][err-index].
2406 * Thanks to multiple [improvements][sk] to [type checking][pre], as
2407 well as other work, the time to bootstrap the compiler decreased by
2413 * The [`str::split_whitespace`] method splits a string on unicode
2414 whitespace boundaries.
2415 * On both Windows and Unix, new extension traits provide conversion of
2416 I/O types to and from the underlying system handles. On Unix, these
2417 traits are [`FromRawFd`] and [`AsRawFd`], on Windows `FromRawHandle`
2418 and `AsRawHandle`. These are implemented for `File`, `TcpStream`,
2419 `TcpListener`, and `UpdSocket`. Further implementations for
2420 `std::process` will be stabilized later.
2421 * On Unix, [`std::os::unix::symlink`] creates symlinks. On
2422 Windows, symlinks can be created with
2423 `std::os::windows::symlink_dir` and
2424 `std::os::windows::symlink_file`.
2425 * The `mpsc::Receiver` type can now be converted into an iterator with
2426 `into_iter` on the [`IntoIterator`] trait.
2427 * `Ipv4Addr` can be created from `u32` with the `From<u32>`
2428 implementation of the [`From`] trait.
2429 * The `Debug` implementation for `RangeFull` [creates output that is
2430 more consistent with other implementations][rf].
2431 * [`Debug` is implemented for `File`][file].
2432 * The `Default` implementation for `Arc` [no longer requires `Sync +
2434 * [The `Iterator` methods `count`, `nth`, and `last` have been
2435 overridden for slices to have O(1) performance instead of O(n)][si].
2436 * Incorrect handling of paths on Windows has been improved in both the
2437 compiler and the standard library.
2438 * [`AtomicPtr` gained a `Default` implementation][ap].
2439 * In accordance with Rust's policy on arithmetic overflow `abs` now
2440 [panics on overflow when debug assertions are enabled][abs].
2441 * The [`Cloned`] iterator, which was accidentally left unstable for
2442 1.0 [has been stabilized][c].
2443 * The [`Incoming`] iterator, which iterates over incoming TCP
2444 connections, and which was accidentally unnamable in 1.0, [is now
2445 properly exported][inc].
2446 * [`BinaryHeap`] no longer corrupts itself [when functions called by
2447 `sift_up` or `sift_down` panic][bh].
2448 * The [`split_off`] method of `LinkedList` [no longer corrupts
2449 the list in certain scenarios][ll].
2454 * Type checking performance [has improved notably][sk] with
2455 [multiple improvements][pre].
2456 * The compiler [suggests code changes][ch] for more errors.
2457 * rustc and it's build system have experimental support for [building
2458 toolchains against MUSL][m] instead of glibc on Linux.
2459 * The compiler defines the `target_env` cfg value, which is used for
2460 distinguishing toolchains that are otherwise for the same
2461 platform. Presently this is set to `gnu` for common GNU Linux
2462 targets and for MinGW targets, and `musl` for MUSL Linux targets.
2463 * The [`cargo rustc`][crc] command invokes a build with custom flags
2465 * [Android executables are always position independent][pie].
2466 * [The `drop_with_repr_extern` lint warns about mixing `repr(C)`
2469 [`str::split_whitespace`]: https://doc.rust-lang.org/nightly/std/primitive.str.html#method.split_whitespace
2470 [`FromRawFd`]: https://doc.rust-lang.org/nightly/std/os/unix/io/trait.FromRawFd.html
2471 [`AsRawFd`]: https://doc.rust-lang.org/nightly/std/os/unix/io/trait.AsRawFd.html
2472 [`std::os::unix::symlink`]: https://doc.rust-lang.org/nightly/std/os/unix/fs/fn.symlink.html
2473 [`IntoIterator`]: https://doc.rust-lang.org/nightly/std/iter/trait.IntoIterator.html
2474 [`From`]: https://doc.rust-lang.org/nightly/std/convert/trait.From.html
2475 [rf]: https://github.com/rust-lang/rust/pull/24491
2476 [err-index]: https://doc.rust-lang.org/error-index.html
2477 [sk]: https://github.com/rust-lang/rust/pull/24615
2478 [pre]: https://github.com/rust-lang/rust/pull/25323
2479 [file]: https://github.com/rust-lang/rust/pull/24598
2480 [ch]: https://github.com/rust-lang/rust/pull/24683
2481 [arc]: https://github.com/rust-lang/rust/pull/24695
2482 [si]: https://github.com/rust-lang/rust/pull/24701
2483 [ap]: https://github.com/rust-lang/rust/pull/24834
2484 [m]: https://github.com/rust-lang/rust/pull/24777
2485 [fs]: https://github.com/rust-lang/rfcs/blob/master/text/1044-io-fs-2.1.md
2486 [crc]: https://github.com/rust-lang/cargo/pull/1568
2487 [pie]: https://github.com/rust-lang/rust/pull/24953
2488 [abs]: https://github.com/rust-lang/rust/pull/25441
2489 [c]: https://github.com/rust-lang/rust/pull/25496
2490 [`Cloned`]: https://doc.rust-lang.org/nightly/std/iter/struct.Cloned.html
2491 [`Incoming`]: https://doc.rust-lang.org/nightly/std/net/struct.Incoming.html
2492 [inc]: https://github.com/rust-lang/rust/pull/25522
2493 [bh]: https://github.com/rust-lang/rust/pull/25856
2494 [`BinaryHeap`]: https://doc.rust-lang.org/nightly/std/collections/struct.BinaryHeap.html
2495 [ll]: https://github.com/rust-lang/rust/pull/26022
2496 [`split_off`]: https://doc.rust-lang.org/nightly/collections/linked_list/struct.LinkedList.html#method.split_off
2497 [drop]: https://github.com/rust-lang/rust/pull/24935
2499 Version 1.0.0 (2015-05-15)
2500 ========================
2502 * ~1500 changes, numerous bugfixes
2507 * The vast majority of the standard library is now `#[stable]`. It is
2508 no longer possible to use unstable features with a stable build of
2510 * Many popular crates on [crates.io] now work on the stable release
2512 * Arithmetic on basic integer types now [checks for overflow in debug
2518 * Several [restrictions have been added to trait coherence][coh] in
2519 order to make it easier for upstream authors to change traits
2520 without breaking downstream code.
2521 * Digits of binary and octal literals are [lexed more eagerly][lex] to
2522 improve error messages and macro behavior. For example, `0b1234` is
2523 now lexed as `0b1234` instead of two tokens, `0b1` and `234`.
2524 * Trait bounds [are always invariant][inv], eliminating the need for
2525 the `PhantomFn` and `MarkerTrait` lang items, which have been
2527 * ["-" is no longer a valid character in crate names][cr], the `extern crate
2528 "foo" as bar` syntax has been replaced with `extern crate foo as
2529 bar`, and Cargo now automatically translates "-" in *package* names
2530 to underscore for the crate name.
2531 * [Lifetime shadowing is an error][lt].
2532 * [`Send` no longer implies `'static`][send-rfc].
2533 * [UFCS now supports trait-less associated paths][moar-ufcs] like
2534 `MyType::default()`.
2535 * Primitive types [now have inherent methods][prim-inherent],
2536 obviating the need for extension traits like `SliceExt`.
2537 * Methods with `Self: Sized` in their `where` clause are [considered
2538 object-safe][self-sized], allowing many extension traits like
2539 `IteratorExt` to be merged into the traits they extended.
2540 * You can now [refer to associated types][assoc-where] whose
2541 corresponding trait bounds appear only in a `where` clause.
2542 * The final bits of [OIBIT landed][oibit-final], meaning that traits
2543 like `Send` and `Sync` are now library-defined.
2544 * A [Reflect trait][reflect] was introduced, which means that
2545 downcasting via the `Any` trait is effectively limited to concrete
2546 types. This helps retain the potentially-important "parametricity"
2547 property: generic code cannot behave differently for different type
2548 arguments except in minor ways.
2549 * The `unsafe_destructor` feature is now deprecated in favor of the
2550 [new `dropck`][dropck]. This change is a major reduction in unsafe
2556 * The `thread_local` module [has been renamed to `std::thread`][th].
2557 * The methods of `IteratorExt` [have been moved to the `Iterator`
2559 * Several traits that implement Rust's conventions for type
2560 conversions, `AsMut`, `AsRef`, `From`, and `Into` have been
2561 [centralized in the `std::convert` module][con].
2562 * The `FromError` trait [was removed in favor of `From`][fe].
2563 * The basic sleep function [has moved to
2564 `std::thread::sleep_ms`][slp].
2565 * The `splitn` function now takes an `n` parameter that represents the
2566 number of items yielded by the returned iterator [instead of the
2567 number of 'splits'][spl].
2568 * [On Unix, all file descriptors are `CLOEXEC` by default][clo].
2569 * [Derived implementations of `PartialOrd` now order enums according
2570 to their explicitly-assigned discriminants][po].
2571 * [Methods for searching strings are generic over `Pattern`s][pat],
2572 implemented presently by `&char`, `&str`, `FnMut(char) -> bool` and
2574 * [In method resolution, object methods are resolved before inherent
2576 * [`String::from_str` has been deprecated in favor of the `From` impl,
2577 `String::from`][sf].
2578 * [`io::Error` implements `Sync`][ios].
2579 * [The `words` method on `&str` has been replaced with
2580 `split_whitespace`][sw], to avoid answering the tricky question, 'what is
2582 * The new path and IO modules are complete and `#[stable]`. This
2583 was the major library focus for this cycle.
2584 * The path API was [revised][path-normalize] to normalize `.`,
2585 adjusting the tradeoffs in favor of the most common usage.
2586 * A large number of remaining APIs in `std` were also stabilized
2587 during this cycle; about 75% of the non-deprecated API surface
2589 * The new [string pattern API][string-pattern] landed, which makes
2590 the string slice API much more internally consistent and flexible.
2591 * A new set of [generic conversion traits][conversion] replaced
2592 many existing ad hoc traits.
2593 * Generic numeric traits were [completely removed][num-traits]. This
2594 was made possible thanks to inherent methods for primitive types,
2595 and the removal gives maximal flexibility for designing a numeric
2596 hierarchy in the future.
2597 * The `Fn` traits are now related via [inheritance][fn-inherit]
2598 and provide ergonomic [blanket implementations][fn-blanket].
2599 * The `Index` and `IndexMut` traits were changed to
2600 [take the index by value][index-value], enabling code like
2601 `hash_map["string"]` to work.
2602 * `Copy` now [inherits][copy-clone] from `Clone`, meaning that all
2603 `Copy` data is known to be `Clone` as well.
2608 * Many errors now have extended explanations that can be accessed with
2609 the `--explain` flag to `rustc`.
2610 * Many new examples have been added to the standard library
2612 * rustdoc has received a number of improvements focused on completion
2614 * Metadata was tuned, shrinking binaries [by 27%][metadata-shrink].
2615 * Much headway was made on ecosystem-wide CI, making it possible
2616 to [compare builds for breakage][ci-compare].
2619 [crates.io]: http://crates.io
2620 [clo]: https://github.com/rust-lang/rust/pull/24034
2621 [coh]: https://github.com/rust-lang/rfcs/blob/master/text/1023-rebalancing-coherence.md
2622 [con]: https://github.com/rust-lang/rust/pull/23875
2623 [cr]: https://github.com/rust-lang/rust/pull/23419
2624 [fe]: https://github.com/rust-lang/rust/pull/23879
2625 [ie]: https://github.com/rust-lang/rust/pull/23300
2626 [inv]: https://github.com/rust-lang/rust/pull/23938
2627 [ios]: https://github.com/rust-lang/rust/pull/24133
2628 [lex]: https://github.com/rust-lang/rfcs/blob/master/text/0879-small-base-lexing.md
2629 [lt]: https://github.com/rust-lang/rust/pull/24057
2630 [meth]: https://github.com/rust-lang/rust/pull/24056
2631 [pat]: https://github.com/rust-lang/rfcs/blob/master/text/0528-string-patterns.md
2632 [po]: https://github.com/rust-lang/rust/pull/24270
2633 [sf]: https://github.com/rust-lang/rust/pull/24517
2634 [slp]: https://github.com/rust-lang/rust/pull/23949
2635 [spl]: https://github.com/rust-lang/rfcs/blob/master/text/0979-align-splitn-with-other-languages.md
2636 [sw]: https://github.com/rust-lang/rfcs/blob/master/text/1054-str-words.md
2637 [th]: https://github.com/rust-lang/rfcs/blob/master/text/0909-move-thread-local-to-std-thread.md
2638 [send-rfc]: https://github.com/rust-lang/rfcs/blob/master/text/0458-send-improvements.md
2639 [moar-ufcs]: https://github.com/rust-lang/rust/pull/22172
2640 [prim-inherent]: https://github.com/rust-lang/rust/pull/23104
2641 [overflow]: https://github.com/rust-lang/rfcs/blob/master/text/0560-integer-overflow.md
2642 [metadata-shrink]: https://github.com/rust-lang/rust/pull/22971
2643 [self-sized]: https://github.com/rust-lang/rust/pull/22301
2644 [assoc-where]: https://github.com/rust-lang/rust/pull/22512
2645 [string-pattern]: https://github.com/rust-lang/rust/pull/22466
2646 [oibit-final]: https://github.com/rust-lang/rust/pull/21689
2647 [reflect]: https://github.com/rust-lang/rust/pull/23712
2648 [conversion]: https://github.com/rust-lang/rfcs/pull/529
2649 [num-traits]: https://github.com/rust-lang/rust/pull/23549
2650 [index-value]: https://github.com/rust-lang/rust/pull/23601
2651 [dropck]: https://github.com/rust-lang/rfcs/pull/769
2652 [ci-compare]: https://gist.github.com/brson/a30a77836fbec057cbee
2653 [fn-inherit]: https://github.com/rust-lang/rust/pull/23282
2654 [fn-blanket]: https://github.com/rust-lang/rust/pull/23895
2655 [copy-clone]: https://github.com/rust-lang/rust/pull/23860
2656 [path-normalize]: https://github.com/rust-lang/rust/pull/23229
2659 Version 1.0.0-alpha.2 (2015-02-20)
2660 =====================================
2662 * ~1300 changes, numerous bugfixes
2666 * The various I/O modules were [overhauled][io-rfc] to reduce
2667 unnecessary abstractions and provide better interoperation with
2668 the underlying platform. The old `io` module remains temporarily
2670 * The standard library now [participates in feature gating][feat],
2671 so use of unstable libraries now requires a `#![feature(...)]`
2672 attribute. The impact of this change is [described on the
2673 forum][feat-forum]. [RFC][feat-rfc].
2677 * `for` loops [now operate on the `IntoIterator` trait][into],
2678 which eliminates the need to call `.iter()`, etc. to iterate
2679 over collections. There are some new subtleties to remember
2680 though regarding what sort of iterators various types yield, in
2681 particular that `for foo in bar { }` yields values from a move
2682 iterator, destroying the original collection. [RFC][into-rfc].
2683 * Objects now have [default lifetime bounds][obj], so you don't
2684 have to write `Box<Trait+'static>` when you don't care about
2685 storing references. [RFC][obj-rfc].
2686 * In types that implement `Drop`, [lifetimes must outlive the
2687 value][drop]. This will soon make it possible to safely
2688 implement `Drop` for types where `#[unsafe_destructor]` is now
2689 required. Read the [gorgeous RFC][drop-rfc] for details.
2690 * The fully qualified <T as Trait>::X syntax lets you set the Self
2691 type for a trait method or associated type. [RFC][ufcs-rfc].
2692 * References to types that implement `Deref<U>` now [automatically
2693 coerce to references][deref] to the dereferenced type `U`,
2694 e.g. `&T where T: Deref<U>` automatically coerces to `&U`. This
2695 should eliminate many unsightly uses of `&*`, as when converting
2696 from references to vectors into references to
2697 slices. [RFC][deref-rfc].
2698 * The explicit [closure kind syntax][close] (`|&:|`, `|&mut:|`,
2699 `|:|`) is obsolete and closure kind is inferred from context.
2700 * [`Self` is a keyword][Self].
2704 * The `Show` and `String` formatting traits [have been
2705 renamed][fmt] to `Debug` and `Display` to more clearly reflect
2706 their related purposes. Automatically getting a string
2707 conversion to use with `format!("{:?}", something_to_debug)` is
2708 now written `#[derive(Debug)]`.
2709 * Abstract [OS-specific string types][osstr], `std::ff::{OsString,
2710 OsStr}`, provide strings in platform-specific encodings for easier
2711 interop with system APIs. [RFC][osstr-rfc].
2712 * The `boxed::into_raw` and `Box::from_raw` functions [convert
2713 between `Box<T>` and `*mut T`][boxraw], a common pattern for
2714 creating raw pointers.
2718 * Certain long error messages of the form 'expected foo found bar'
2719 are now [split neatly across multiple
2720 lines][multiline]. Examples in the PR.
2721 * On Unix Rust can be [uninstalled][un] by running
2722 `/usr/local/lib/rustlib/uninstall.sh`.
2723 * The `#[rustc_on_unimplemented]` attribute, requiring the
2724 'on_unimplemented' feature, lets rustc [display custom error
2725 messages when a trait is expected to be implemented for a type
2730 * Rust is tested against a [LALR grammar][lalr], which parses
2731 almost all the Rust files that rustc does.
2733 [boxraw]: https://github.com/rust-lang/rust/pull/21318
2734 [close]: https://github.com/rust-lang/rust/pull/21843
2735 [deref]: https://github.com/rust-lang/rust/pull/21351
2736 [deref-rfc]: https://github.com/rust-lang/rfcs/blob/master/text/0241-deref-conversions.md
2737 [drop]: https://github.com/rust-lang/rust/pull/21972
2738 [drop-rfc]: https://github.com/rust-lang/rfcs/blob/master/text/0769-sound-generic-drop.md
2739 [feat]: https://github.com/rust-lang/rust/pull/21248
2740 [feat-forum]: https://users.rust-lang.org/t/psa-important-info-about-rustcs-new-feature-staging/82/5
2741 [feat-rfc]: https://github.com/rust-lang/rfcs/blob/master/text/0507-release-channels.md
2742 [fmt]: https://github.com/rust-lang/rust/pull/21457
2743 [into]: https://github.com/rust-lang/rust/pull/20790
2744 [into-rfc]: https://github.com/rust-lang/rfcs/blob/master/text/0235-collections-conventions.md#intoiterator-and-iterable
2745 [io-rfc]: https://github.com/rust-lang/rfcs/blob/master/text/0517-io-os-reform.md
2746 [lalr]: https://github.com/rust-lang/rust/pull/21452
2747 [multiline]: https://github.com/rust-lang/rust/pull/19870
2748 [obj]: https://github.com/rust-lang/rust/pull/22230
2749 [obj-rfc]: https://github.com/rust-lang/rfcs/blob/master/text/0599-default-object-bound.md
2750 [onun]: https://github.com/rust-lang/rust/pull/20889
2751 [osstr]: https://github.com/rust-lang/rust/pull/21488
2752 [osstr-rfc]: https://github.com/rust-lang/rfcs/blob/master/text/0517-io-os-reform.md
2753 [Self]: https://github.com/rust-lang/rust/pull/22158
2754 [ufcs-rfc]: https://github.com/rust-lang/rfcs/blob/master/text/0132-ufcs.md
2755 [un]: https://github.com/rust-lang/rust/pull/22256
2758 Version 1.0.0-alpha (2015-01-09)
2759 ==================================
2761 * ~2400 changes, numerous bugfixes
2765 * The language itself is considered feature complete for 1.0,
2766 though there will be many usability improvements and bugfixes
2767 before the final release.
2768 * Nearly 50% of the public API surface of the standard library has
2769 been declared 'stable'. Those interfaces are unlikely to change
2771 * The long-running debate over integer types has been
2772 [settled][ints]: Rust will ship with types named `isize` and
2773 `usize`, rather than `int` and `uint`, for pointer-sized
2774 integers. Guidelines will be rolled out during the alpha cycle.
2775 * Most crates that are not `std` have been moved out of the Rust
2776 distribution into the Cargo ecosystem so they can evolve
2777 separately and don't need to be stabilized as quickly, including
2778 'time', 'getopts', 'num', 'regex', and 'term'.
2779 * Documentation continues to be expanded with more API coverage, more
2780 examples, and more in-depth explanations. The guides have been
2781 consolidated into [The Rust Programming Language][trpl].
2782 * "[Rust By Example][rbe]" is now maintained by the Rust team.
2783 * All official Rust binary installers now come with [Cargo], the
2784 Rust package manager.
2788 * Closures have been [completely redesigned][unboxed] to be
2789 implemented in terms of traits, can now be used as generic type
2790 bounds and thus monomorphized and inlined, or via an opaque
2791 pointer (boxed) as in the old system. The new system is often
2792 referred to as 'unboxed' closures.
2793 * Traits now support [associated types][assoc], allowing families
2794 of related types to be defined together and used generically in
2796 * Enum variants are [namespaced by their type names][enum].
2797 * [`where` clauses][where] provide a more versatile and attractive
2798 syntax for specifying generic bounds, though the previous syntax
2800 * Rust again picks a [fallback][fb] (either i32 or f64) for uninferred
2802 * Rust [no longer has a runtime][rt] of any description, and only
2803 supports OS threads, not green threads.
2804 * At long last, Rust has been overhauled for 'dynamically-sized
2805 types' ([DST]), which integrates 'fat pointers' (object types,
2806 arrays, and `str`) more deeply into the type system, making it
2808 * Rust now has a general [range syntax][range], `i..j`, `i..`, and
2809 `..j` that produce range types and which, when combined with the
2810 `Index` operator and multidispatch, leads to a convenient slice
2812 * The new range syntax revealed an ambiguity in the fixed-length
2813 array syntax, so now fixed length arrays [are written `[T;
2815 * The `Copy` trait is no longer implemented automatically. Unsafe
2816 pointers no longer implement `Sync` and `Send` so types
2817 containing them don't automatically either. `Sync` and `Send`
2818 are now 'unsafe traits' so one can "forcibly" implement them via
2819 `unsafe impl` if a type confirms to the requirements for them
2820 even though the internals do not (e.g. structs containing unsafe
2821 pointers like `Arc`). These changes are intended to prevent some
2822 footguns and are collectively known as [opt-in built-in
2823 traits][oibit] (though `Sync` and `Send` will soon become pure
2824 library types unknown to the compiler).
2825 * Operator traits now take their operands [by value][ops], and
2826 comparison traits can use multidispatch to compare one type
2827 against multiple other types, allowing e.g. `String` to be
2828 compared with `&str`.
2829 * `if let` and `while let` are no longer feature-gated.
2830 * Rust has adopted a more [uniform syntax for escaping unicode
2831 characters][unicode].
2832 * `macro_rules!` [has been declared stable][mac]. Though it is a
2833 flawed system it is sufficiently popular that it must be usable
2834 for 1.0. Effort has gone into [future-proofing][mac-future] it
2835 in ways that will allow other macro systems to be developed in
2836 parallel, and won't otherwise impact the evolution of the
2838 * The prelude has been [pared back significantly][prelude] such
2839 that it is the minimum necessary to support the most pervasive
2840 code patterns, and through [generalized where clauses][where]
2841 many of the prelude extension traits have been consolidated.
2842 * Rust's rudimentary reflection [has been removed][refl], as it
2843 incurred too much code generation for little benefit.
2844 * [Struct variants][structvars] are no longer feature-gated.
2845 * Trait bounds can be [polymorphic over lifetimes][hrtb]. Also
2846 known as 'higher-ranked trait bounds', this crucially allows
2847 unboxed closures to work.
2848 * Macros invocations surrounded by parens or square brackets and
2849 not terminated by a semicolon are [parsed as
2850 expressions][macros], which makes expressions like `vec![1i32,
2851 2, 3].len()` work as expected.
2852 * Trait objects now implement their traits automatically, and
2853 traits that can be coerced to objects now must be [object
2855 * Automatically deriving traits is now done with `#[derive(...)]`
2856 not `#[deriving(...)]` for [consistency with other naming
2857 conventions][derive].
2858 * Importing the containing module or enum at the same time as
2859 items or variants they contain is [now done with `self` instead
2860 of `mod`][self], as in use `foo::{self, bar}`
2861 * Glob imports are no longer feature-gated.
2862 * The `box` operator and `box` patterns have been feature-gated
2863 pending a redesign. For now unique boxes should be allocated
2864 like other containers, with `Box::new`.
2868 * A [series][coll1] of [efforts][coll2] to establish
2869 [conventions][coll3] for collections types has resulted in API
2870 improvements throughout the standard library.
2871 * New [APIs for error handling][err] provide ergonomic interop
2872 between error types, and [new conventions][err-conv] describe
2873 more clearly the recommended error handling strategies in Rust.
2874 * The `fail!` macro has been renamed to [`panic!`][panic] so that
2875 it is easier to discuss failure in the context of error handling
2876 without making clarifications as to whether you are referring to
2877 the 'fail' macro or failure more generally.
2878 * On Linux, `OsRng` prefers the new, more reliable `getrandom`
2879 syscall when available.
2880 * The 'serialize' crate has been renamed 'rustc-serialize' and
2881 moved out of the distribution to Cargo. Although it is widely
2882 used now, it is expected to be superseded in the near future.
2883 * The `Show` formatter, typically implemented with
2884 `#[derive(Show)]` is [now requested with the `{:?}`
2885 specifier][show] and is intended for use by all types, for uses
2886 such as `println!` debugging. The new `String` formatter must be
2887 implemented by hand, uses the `{}` specifier, and is intended
2888 for full-fidelity conversions of things that can logically be
2889 represented as strings.
2893 * [Flexible target specification][flex] allows rustc's code
2894 generation to be configured to support otherwise-unsupported
2896 * Rust comes with rust-gdb and rust-lldb scripts that launch their
2897 respective debuggers with Rust-appropriate pretty-printing.
2898 * The Windows installation of Rust is distributed with the the
2899 MinGW components currently required to link binaries on that
2904 * Nullable enum optimizations have been extended to more types so
2905 that e.g. `Option<Vec<T>>` and `Option<String>` take up no more
2906 space than the inner types themselves.
2907 * Work has begun on supporting AArch64.
2909 [Cargo]: https://crates.io
2910 [unboxed]: http://smallcultfollowing.com/babysteps/blog/2014/11/26/purging-proc/
2911 [enum]: https://github.com/rust-lang/rfcs/blob/master/text/0390-enum-namespacing.md
2912 [flex]: https://github.com/rust-lang/rfcs/blob/master/text/0131-target-specification.md
2913 [err]: https://github.com/rust-lang/rfcs/blob/master/text/0201-error-chaining.md
2914 [err-conv]: https://github.com/rust-lang/rfcs/blob/master/text/0236-error-conventions.md
2915 [rt]: https://github.com/rust-lang/rfcs/blob/master/text/0230-remove-runtime.md
2916 [mac]: https://github.com/rust-lang/rfcs/blob/master/text/0453-macro-reform.md
2917 [mac-future]: https://github.com/rust-lang/rfcs/pull/550
2918 [DST]: http://smallcultfollowing.com/babysteps/blog/2014/01/05/dst-take-5/
2919 [coll1]: https://github.com/rust-lang/rfcs/blob/master/text/0235-collections-conventions.md
2920 [coll2]: https://github.com/rust-lang/rfcs/blob/master/text/0509-collections-reform-part-2.md
2921 [coll3]: https://github.com/rust-lang/rfcs/blob/master/text/0216-collection-views.md
2922 [ops]: https://github.com/rust-lang/rfcs/blob/master/text/0439-cmp-ops-reform.md
2923 [prelude]: https://github.com/rust-lang/rfcs/blob/master/text/0503-prelude-stabilization.md
2924 [where]: https://github.com/rust-lang/rfcs/blob/master/text/0135-where.md
2925 [refl]: https://github.com/rust-lang/rfcs/blob/master/text/0379-remove-reflection.md
2926 [panic]: https://github.com/rust-lang/rfcs/blob/master/text/0221-panic.md
2927 [structvars]: https://github.com/rust-lang/rfcs/blob/master/text/0418-struct-variants.md
2928 [hrtb]: https://github.com/rust-lang/rfcs/blob/master/text/0387-higher-ranked-trait-bounds.md
2929 [unicode]: https://github.com/rust-lang/rfcs/blob/master/text/0446-es6-unicode-escapes.md
2930 [oibit]: https://github.com/rust-lang/rfcs/blob/master/text/0019-opt-in-builtin-traits.md
2931 [macros]: https://github.com/rust-lang/rfcs/blob/master/text/0378-expr-macros.md
2932 [range]: https://github.com/rust-lang/rfcs/blob/master/text/0439-cmp-ops-reform.md#indexing-and-slicing
2933 [arrays]: https://github.com/rust-lang/rfcs/blob/master/text/0520-new-array-repeat-syntax.md
2934 [show]: https://github.com/rust-lang/rfcs/blob/master/text/0504-show-stabilization.md
2935 [derive]: https://github.com/rust-lang/rfcs/blob/master/text/0534-deriving2derive.md
2936 [self]: https://github.com/rust-lang/rfcs/blob/master/text/0532-self-in-use.md
2937 [fb]: https://github.com/rust-lang/rfcs/blob/master/text/0212-restore-int-fallback.md
2938 [objsafe]: https://github.com/rust-lang/rfcs/blob/master/text/0255-object-safety.md
2939 [assoc]: https://github.com/rust-lang/rfcs/blob/master/text/0195-associated-items.md
2940 [ints]: https://github.com/rust-lang/rfcs/pull/544#issuecomment-68760871
2941 [trpl]: https://doc.rust-lang.org/book/index.html
2942 [rbe]: http://rustbyexample.com/
2945 Version 0.12.0 (2014-10-09)
2946 =============================
2948 * ~1900 changes, numerous bugfixes
2952 * The introductory documentation (now called The Rust Guide) has
2953 been completely rewritten, as have a number of supplementary
2955 * Rust's package manager, Cargo, continues to improve and is
2956 sometimes considered to be quite awesome.
2957 * Many API's in `std` have been reviewed and updated for
2958 consistency with the in-development Rust coding
2959 guidelines. The standard library documentation tracks
2960 stabilization progress.
2961 * Minor libraries have been moved out-of-tree to the rust-lang org
2962 on GitHub: uuid, semver, glob, num, hexfloat, fourcc. They can
2963 be installed with Cargo.
2964 * Lifetime elision allows lifetime annotations to be left off of
2965 function declarations in many common scenarios.
2966 * Rust now works on 64-bit Windows.
2969 * Indexing can be overloaded with the `Index` and `IndexMut`
2971 * The `if let` construct takes a branch only if the `let` pattern
2972 matches, currently behind the 'if_let' feature gate.
2973 * 'where clauses', a more flexible syntax for specifying trait
2974 bounds that is more aesthetic, have been added for traits and
2975 free functions. Where clauses will in the future make it
2976 possible to constrain associated types, which would be
2977 impossible with the existing syntax.
2978 * A new slicing syntax (e.g. `[0..4]`) has been introduced behind
2979 the 'slicing_syntax' feature gate, and can be overloaded with
2980 the `Slice` or `SliceMut` traits.
2981 * The syntax for matching of sub-slices has been changed to use a
2982 postfix `..` instead of prefix (.e.g. `[a, b, c..]`), for
2983 consistency with other uses of `..` and to future-proof
2984 potential additional uses of the syntax.
2985 * The syntax for matching inclusive ranges in patterns has changed
2986 from `0..3` to `0...4` to be consistent with the exclusive range
2988 * Matching of sub-slices in non-tail positions (e.g. `[a.., b,
2989 c]`) has been put behind the 'advanced_slice_patterns' feature
2990 gate and may be removed in the future.
2991 * Components of tuples and tuple structs can be extracted using
2992 the `value.0` syntax, currently behind the `tuple_indexing`
2994 * The `#[crate_id]` attribute is no longer supported; versioning
2995 is handled by the package manager.
2996 * Renaming crate imports are now written `extern crate foo as bar`
2997 instead of `extern crate bar = foo`.
2998 * Renaming use statements are now written `use foo as bar` instead
3000 * `let` and `match` bindings and argument names in macros are now
3002 * The new, more efficient, closure types ('unboxed closures') have
3003 been added under a feature gate, 'unboxed_closures'. These will
3004 soon replace the existing closure types, once higher-ranked
3005 trait lifetimes are added to the language.
3006 * `move` has been added as a keyword, for indicating closures
3007 that capture by value.
3008 * Mutation and assignment is no longer allowed in pattern guards.
3009 * Generic structs and enums can now have trait bounds.
3010 * The `Share` trait is now called `Sync` to free up the term
3011 'shared' to refer to 'shared reference' (the default reference
3013 * Dynamically-sized types have been mostly implemented,
3014 unifying the behavior of fat-pointer types with the rest of the
3016 * As part of dynamically-sized types, the `Sized` trait has been
3017 introduced, which qualifying types implement by default, and
3018 which type parameters expect by default. To specify that a type
3019 parameter does not need to be sized, write `<Sized? T>`. Most
3020 types are `Sized`, notable exceptions being unsized arrays
3021 (`[T]`) and trait types.
3022 * Closures can return `!`, as in `|| -> !` or `proc() -> !`.
3023 * Lifetime bounds can now be applied to type parameters and object
3025 * The old, reference counted GC type, `Gc<T>` which was once
3026 denoted by the `@` sigil, has finally been removed. GC will be
3027 revisited in the future.
3030 * Library documentation has been improved for a number of modules.
3031 * Bit-vectors, collections::bitv has been modernized.
3032 * The url crate is deprecated in favor of
3033 http://github.com/servo/rust-url, which can be installed with
3035 * Most I/O stream types can be cloned and subsequently closed from
3037 * A `std::time::Duration` type has been added for use in I/O
3038 methods that rely on timers, as well as in the 'time' crate's
3039 `Timespec` arithmetic.
3040 * The runtime I/O abstraction layer that enabled the green thread
3041 scheduler to do non-thread-blocking I/O has been removed, along
3042 with the libuv-based implementation employed by the green thread
3043 scheduler. This will greatly simplify the future I/O work.
3044 * `collections::btree` has been rewritten to have a more
3045 idiomatic and efficient design.
3048 * rustdoc output now indicates the stability levels of API's.
3049 * The `--crate-name` flag can specify the name of the crate
3050 being compiled, like `#[crate_name]`.
3051 * The `-C metadata` specifies additional metadata to hash into
3052 symbol names, and `-C extra-filename` specifies additional
3053 information to put into the output filename, for use by the
3054 package manager for versioning.
3055 * debug info generation has continued to improve and should be
3056 more reliable under both gdb and lldb.
3057 * rustc has experimental support for compiling in parallel
3058 using the `-C codegen-units` flag.
3059 * rustc no longer encodes rpath information into binaries by
3063 * Stack usage has been optimized with LLVM lifetime annotations.
3064 * Official Rust binaries on Linux are more compatible with older
3065 kernels and distributions, built on CentOS 5.10.
3068 Version 0.11.0 (2014-07-02)
3069 ==========================
3071 * ~1700 changes, numerous bugfixes
3074 * ~[T] has been removed from the language. This type is superseded by
3076 * ~str has been removed from the language. This type is superseded by
3078 * ~T has been removed from the language. This type is superseded by the
3080 * @T has been removed from the language. This type is superseded by the
3081 standard library's std::gc::Gc<T> type.
3082 * Struct fields are now all private by default.
3083 * Vector indices and shift amounts are both required to be a `uint`
3084 instead of any integral type.
3085 * Byte character, byte string, and raw byte string literals are now all
3086 supported by prefixing the normal literal with a `b`.
3087 * Multiple ABIs are no longer allowed in an ABI string
3088 * The syntax for lifetimes on closures/procedures has been tweaked
3089 slightly: `<'a>|A, B|: 'b + K -> T`
3090 * Floating point modulus has been removed from the language; however it
3091 is still provided by a library implementation.
3092 * Private enum variants are now disallowed.
3093 * The `priv` keyword has been removed from the language.
3094 * A closure can no longer be invoked through a &-pointer.
3095 * The `use foo, bar, baz;` syntax has been removed from the language.
3096 * The transmute intrinsic no longer works on type parameters.
3097 * Statics now allow blocks/items in their definition.
3098 * Trait bounds are separated from objects with + instead of : now.
3099 * Objects can no longer be read while they are mutably borrowed.
3100 * The address of a static is now marked as insignificant unless the
3101 #[inline(never)] attribute is placed it.
3102 * The #[unsafe_destructor] attribute is now behind a feature gate.
3103 * Struct literals are no longer allowed in ambiguous positions such as
3104 if, while, match, and for..in.
3105 * Declaration of lang items and intrinsics are now feature-gated by
3107 * Integral literals no longer default to `int`, and floating point
3108 literals no longer default to `f64`. Literals must be suffixed with an
3109 appropriate type if inference cannot determine the type of the
3111 * The Box<T> type is no longer implicitly borrowed to &mut T.
3112 * Procedures are now required to not capture borrowed references.
3115 * The standard library is now a "facade" over a number of underlying
3116 libraries. This means that development on the standard library should
3117 be speeder due to smaller crates, as well as a clearer line between
3119 * A new library, libcore, lives under the standard library's facade
3120 which is Rust's "0-assumption" library, suitable for embedded and
3121 kernel development for example.
3122 * A regex crate has been added to the standard distribution. This crate
3123 includes statically compiled regular expressions.
3124 * The unwrap/unwrap_err methods on Result require a Show bound for
3125 better error messages.
3126 * The return types of the std::comm primitives have been centralized
3127 around the Result type.
3128 * A number of I/O primitives have gained the ability to time out their
3130 * A number of I/O primitives have gained the ability to close their
3131 reading/writing halves to cancel pending operations.
3132 * Reverse iterator methods have been removed in favor of `rev()` on
3133 their forward-iteration counterparts.
3134 * A bitflags! macro has been added to enable easy interop with C and
3135 management of bit flags.
3136 * A debug_assert! macro is now provided which is disabled when
3137 `--cfg ndebug` is passed to the compiler.
3138 * A graphviz crate has been added for creating .dot files.
3139 * The std::cast module has been migrated into std::mem.
3140 * The std::local_data api has been migrated from freestanding functions
3141 to being based on methods.
3142 * The Pod trait has been renamed to Copy.
3143 * jemalloc has been added as the default allocator for types.
3144 * The API for allocating memory has been changed to use proper alignment
3145 and sized deallocation
3146 * Connecting a TcpStream or binding a TcpListener is now based on a
3147 string address and a u16 port. This allows connecting to a hostname as
3149 * The Reader trait now contains a core method, read_at_least(), which
3150 correctly handles many repeated 0-length reads.
3151 * The process-spawning API is now centered around a builder-style
3153 * The :? printing qualifier has been moved from the standard library to
3154 an external libdebug crate.
3155 * Eq/Ord have been renamed to PartialEq/PartialOrd. TotalEq/TotalOrd
3156 have been renamed to Eq/Ord.
3157 * The select/plural methods have been removed from format!. The escapes
3158 for { and } have also changed from \{ and \} to {{ and }},
3160 * The TaskBuilder API has been re-worked to be a true builder, and
3161 extension traits for spawning native/green tasks have been added.
3164 * All breaking changes to the language or libraries now have their
3165 commit message annotated with `[breaking-change]` to allow for easy
3166 discovery of breaking changes.
3167 * The compiler will now try to suggest how to annotate lifetimes if a
3168 lifetime-related error occurs.
3169 * Debug info continues to be improved greatly with general bug fixes and
3170 better support for situations like link time optimization (LTO).
3171 * Usage of syntax extensions when cross-compiling has been fixed.
3172 * Functionality equivalent to GCC & Clang's -ffunction-sections,
3173 -fdata-sections and --gc-sections has been enabled by default
3174 * The compiler is now stricter about where it will load module files
3175 from when a module is declared via `mod foo;`.
3176 * The #[phase(syntax)] attribute has been renamed to #[phase(plugin)].
3177 Syntax extensions are now discovered via a "plugin registrar" type
3178 which will be extended in the future to other various plugins.
3179 * Lints have been restructured to allow for dynamically loadable lints.
3180 * A number of rustdoc improvements:
3181 * The HTML output has been visually redesigned.
3182 * Markdown is now powered by hoedown instead of sundown.
3183 * Searching heuristics have been greatly improved.
3184 * The search index has been reduced in size by a great amount.
3185 * Cross-crate documentation via `pub use` has been greatly improved.
3186 * Primitive types are now hyperlinked and documented.
3187 * Documentation has been moved from static.rust-lang.org/doc to
3189 * A new sandbox, play.rust-lang.org, is available for running and
3190 sharing rust code examples on-line.
3191 * Unused attributes are now more robustly warned about.
3192 * The dead_code lint now warns about unused struct fields.
3193 * Cross-compiling to iOS is now supported.
3194 * Cross-compiling to mipsel is now supported.
3195 * Stability attributes are now inherited by default and no longer apply
3196 to intra-crate usage, only inter-crate usage.
3197 * Error message related to non-exhaustive match expressions have been
3201 Version 0.10 (2014-04-03)
3202 =========================
3204 * ~1500 changes, numerous bugfixes
3207 * A new RFC process is now in place for modifying the language.
3208 * Patterns with `@`-pointers have been removed from the language.
3209 * Patterns with unique vectors (`~[T]`) have been removed from the
3211 * Patterns with unique strings (`~str`) have been removed from the
3213 * `@str` has been removed from the language.
3214 * `@[T]` has been removed from the language.
3215 * `@self` has been removed from the language.
3216 * `@Trait` has been removed from the language.
3217 * Headers on `~` allocations which contain `@` boxes inside the type for
3218 reference counting have been removed.
3219 * The semantics around the lifetimes of temporary expressions have changed,
3220 see #3511 and #11585 for more information.
3221 * Cross-crate syntax extensions are now possible, but feature gated. See
3222 #11151 for more information. This includes both `macro_rules!` macros as
3223 well as syntax extensions such as `format!`.
3224 * New lint modes have been added, and older ones have been turned on to be
3226 * Unnecessary parentheses
3229 * Uppercase variables
3230 * Publicly visible private types
3231 * `#[deriving]` with raw pointers
3232 * Unsafe functions can no longer be coerced to closures.
3233 * Various obscure macros such as `log_syntax!` are now behind feature gates.
3234 * The `#[simd]` attribute is now behind a feature gate.
3235 * Visibility is no longer allowed on `extern crate` statements, and
3236 unnecessary visibility (`priv`) is no longer allowed on `use` statements.
3237 * Trailing commas are now allowed in argument lists and tuple patterns.
3238 * The `do` keyword has been removed, it is now a reserved keyword.
3239 * Default type parameters have been implemented, but are feature gated.
3240 * Borrowed variables through captures in closures are now considered soundly.
3241 * `extern mod` is now `extern crate`
3242 * The `Freeze` trait has been removed.
3243 * The `Share` trait has been added for types that can be shared among
3245 * Labels in macros are now hygienic.
3246 * Expression/statement macro invocations can be delimited with `{}` now.
3247 * Treatment of types allowed in `static mut` locations has been tweaked.
3248 * The `*` and `.` operators are now overloadable through the `Deref` and
3250 * `~Trait` and `proc` no longer have `Send` bounds by default.
3251 * Partial type hints are now supported with the `_` type marker.
3252 * An `Unsafe` type was introduced for interior mutability. It is now
3253 considered undefined to transmute from `&T` to `&mut T` without using the
3255 * The #[linkage] attribute was implemented for extern statics/functions.
3256 * The inner attribute syntax has changed from `#[foo];` to `#![foo]`.
3257 * `Pod` was renamed to `Copy`.
3260 * The `libextra` library has been removed. It has now been decomposed into
3261 component libraries with smaller and more focused nuggets of
3262 functionality. The full list of libraries can be found on the
3263 documentation index page.
3264 * std: `std::condition` has been removed. All I/O errors are now propagated
3265 through the `Result` type. In order to assist with error handling, a
3266 `try!` macro for unwrapping errors with an early return and a lint for
3267 unused results has been added. See #12039 for more information.
3268 * std: The `vec` module has been renamed to `slice`.
3269 * std: A new vector type, `Vec<T>`, has been added in preparation for DST.
3270 This will become the only growable vector in the future.
3271 * std: `std::io` now has more public-reexports. Types such as `BufferedReader`
3272 are now found at `std::io::BufferedReader` instead of
3273 `std::io::buffered::BufferedReader`.
3274 * std: `print` and `println` are no longer in the prelude, the `print!` and
3275 `println!` macros are intended to be used instead.
3276 * std: `Rc` now has a `Weak` pointer for breaking cycles, and it no longer
3277 attempts to statically prevent cycles.
3278 * std: The standard distribution is adopting the policy of pushing failure
3279 to the user rather than failing in libraries. Many functions (such as
3280 `slice::last()`) now return `Option<T>` instead of `T` + failing.
3281 * std: `fmt::Default` has been renamed to `fmt::Show`, and it now has a new
3282 deriving mode: `#[deriving(Show)]`.
3283 * std: `ToStr` is now implemented for all types implementing `Show`.
3284 * std: The formatting trait methods now take `&self` instead of `&T`
3285 * std: The `invert()` method on iterators has been renamed to `rev()`
3286 * std: `std::num` has seen a reduction in the genericity of its traits,
3287 consolidating functionality into a few core traits.
3288 * std: Backtraces are now printed on task failure if the environment
3289 variable `RUST_BACKTRACE` is present.
3290 * std: Naming conventions for iterators have been standardized. More details
3291 can be found on the wiki's style guide.
3292 * std: `eof()` has been removed from the `Reader` trait. Specific types may
3293 still implement the function.
3294 * std: Networking types are now cloneable to allow simultaneous reads/writes.
3295 * std: `assert_approx_eq!` has been removed
3296 * std: The `e` and `E` formatting specifiers for floats have been added to
3297 print them in exponential notation.
3298 * std: The `Times` trait has been removed
3299 * std: Indications of variance and opting out of builtin bounds is done
3300 through marker types in `std::kinds::marker` now
3301 * std: `hash` has been rewritten, `IterBytes` has been removed, and
3302 `#[deriving(Hash)]` is now possible.
3303 * std: `SharedChan` has been removed, `Sender` is now cloneable.
3304 * std: `Chan` and `Port` were renamed to `Sender` and `Receiver`.
3305 * std: `Chan::new` is now `channel()`.
3306 * std: A new synchronous channel type has been implemented.
3307 * std: A `select!` macro is now provided for selecting over `Receiver`s.
3308 * std: `hashmap` and `trie` have been moved to `libcollections`
3309 * std: `run` has been rolled into `io::process`
3310 * std: `assert_eq!` now uses `{}` instead of `{:?}`
3311 * std: The equality and comparison traits have seen some reorganization.
3312 * std: `rand` has moved to `librand`.
3313 * std: `to_{lower,upper}case` has been implemented for `char`.
3314 * std: Logging has been moved to `liblog`.
3315 * collections: `HashMap` has been rewritten for higher performance and less
3317 * native: The default runtime is now `libnative`. If `libgreen` is desired,
3318 it can be booted manually. The runtime guide has more information and
3320 * native: All I/O functionality except signals has been implemented.
3321 * green: Task spawning with `libgreen` has been optimized with stack caching
3322 and various trimming of code.
3323 * green: Tasks spawned by `libgreen` now have an unmapped guard page.
3324 * sync: The `extra::sync` module has been updated to modern rust (and moved
3325 to the `sync` library), tweaking and improving various interfaces while
3326 dropping redundant functionality.
3327 * sync: A new `Barrier` type has been added to the `sync` library.
3328 * sync: An efficient mutex for native and green tasks has been implemented.
3329 * serialize: The `base64` module has seen some improvement. It treats
3330 newlines better, has non-string error values, and has seen general
3332 * fourcc: A `fourcc!` macro was introduced
3333 * hexfloat: A `hexfloat!` macro was implemented for specifying floats via a
3334 hexadecimal literal.
3337 * `rustpkg` has been deprecated and removed from the main repository. Its
3338 replacement, `cargo`, is under development.
3339 * Nightly builds of rust are now available
3340 * The memory usage of rustc has been improved many times throughout this
3342 * The build process supports disabling rpath support for the rustc binary
3344 * Code generation has improved in some cases, giving more information to the
3345 LLVM optimization passes to enable more extensive optimizations.
3346 * Debuginfo compatibility with lldb on OSX has been restored.
3347 * The master branch is now gated on an android bot, making building for
3348 android much more reliable.
3349 * Output flags have been centralized into one `--emit` flag.
3350 * Crate type flags have been centralized into one `--crate-type` flag.
3351 * Codegen flags have been consolidated behind a `-C` flag.
3352 * Linking against outdated crates now has improved error messages.
3353 * Error messages with lifetimes will often suggest how to annotate the
3354 function to fix the error.
3355 * Many more types are documented in the standard library, and new guides
3357 * Many `rustdoc` improvements:
3358 * code blocks are syntax highlighted.
3359 * render standalone markdown files.
3360 * the --test flag tests all code blocks by default.
3361 * exported macros are displayed.
3362 * reexported types have their documentation inlined at the location of the
3364 * search works across crates that have been rendered to the same output
3368 Version 0.9 (2014-01-09)
3369 ==========================
3371 * ~1800 changes, numerous bugfixes
3374 * The `float` type has been removed. Use `f32` or `f64` instead.
3375 * A new facility for enabling experimental features (feature gating) has
3376 been added, using the crate-level `#[feature(foo)]` attribute.
3377 * Managed boxes (@) are now behind a feature gate
3378 (`#[feature(managed_boxes)]`) in preparation for future removal. Use the
3379 standard library's `Gc` or `Rc` types instead.
3380 * `@mut` has been removed. Use `std::cell::{Cell, RefCell}` instead.
3381 * Jumping back to the top of a loop is now done with `continue` instead of
3383 * Strings can no longer be mutated through index assignment.
3384 * Raw strings can be created via the basic `r"foo"` syntax or with matched
3385 hash delimiters, as in `r###"foo"###`.
3386 * `~fn` is now written `proc (args) -> retval { ... }` and may only be
3388 * The `&fn` type is now written `|args| -> ret` to match the literal form.
3389 * `@fn`s have been removed.
3390 * `do` only works with procs in order to make it obvious what the cost
3392 * Single-element tuple-like structs can no longer be dereferenced to
3393 obtain the inner value. A more comprehensive solution for overloading
3394 the dereference operator will be provided in the future.
3395 * The `#[link(...)]` attribute has been replaced with
3396 `#[crate_id = "name#vers"]`.
3397 * Empty `impl`s must be terminated with empty braces and may not be
3398 terminated with a semicolon.
3399 * Keywords are no longer allowed as lifetime names; the `self` lifetime
3400 no longer has any special meaning.
3401 * The old `fmt!` string formatting macro has been removed.
3402 * `printf!` and `printfln!` (old-style formatting) removed in favor of
3403 `print!` and `println!`.
3404 * `mut` works in patterns now, as in `let (mut x, y) = (1, 2);`.
3405 * The `extern mod foo (name = "bar")` syntax has been removed. Use
3406 `extern mod foo = "bar"` instead.
3407 * New reserved keywords: `alignof`, `offsetof`, `sizeof`.
3408 * Macros can have attributes.
3409 * Macros can expand to items with attributes.
3410 * Macros can expand to multiple items.
3411 * The `asm!` macro is feature-gated (`#[feature(asm)]`).
3412 * Comments may be nested.
3413 * Values automatically coerce to trait objects they implement, without
3415 * Enum discriminants are no longer an entire word but as small as needed to
3416 contain all the variants. The `repr` attribute can be used to override
3417 the discriminant size, as in `#[repr(int)]` for integer-sized, and
3418 `#[repr(C)]` to match C enums.
3419 * Non-string literals are not allowed in attributes (they never worked).
3420 * The FFI now supports variadic functions.
3421 * Octal numeric literals, as in `0o7777`.
3422 * The `concat!` syntax extension performs compile-time string concatenation.
3423 * The `#[fixed_stack_segment]` and `#[rust_stack]` attributes have been
3424 removed as Rust no longer uses segmented stacks.
3425 * Non-ascii identifiers are feature-gated (`#[feature(non_ascii_idents)]`).
3426 * Ignoring all fields of an enum variant or tuple-struct is done with `..`,
3427 not `*`; ignoring remaining fields of a struct is also done with `..`,
3428 not `_`; ignoring a slice of a vector is done with `..`, not `.._`.
3429 * `rustc` supports the "win64" calling convention via `extern "win64"`.
3430 * `rustc` supports the "system" calling convention, which defaults to the
3431 preferred convention for the target platform, "stdcall" on 32-bit Windows,
3433 * The `type_overflow` lint (default: warn) checks literals for overflow.
3434 * The `unsafe_block` lint (default: allow) checks for usage of `unsafe`.
3435 * The `attribute_usage` lint (default: warn) warns about unknown
3437 * The `unknown_features` lint (default: warn) warns about unknown
3439 * The `dead_code` lint (default: warn) checks for dead code.
3440 * Rust libraries can be linked statically to one another
3441 * `#[link_args]` is behind the `link_args` feature gate.
3442 * Native libraries are now linked with `#[link(name = "foo")]`
3443 * Native libraries can be statically linked to a rust crate
3444 (`#[link(name = "foo", kind = "static")]`).
3445 * Native OS X frameworks are now officially supported
3446 (`#[link(name = "foo", kind = "framework")]`).
3447 * The `#[thread_local]` attribute creates thread-local (not task-local)
3448 variables. Currently behind the `thread_local` feature gate.
3449 * The `return` keyword may be used in closures.
3450 * Types that can be copied via a memcpy implement the `Pod` kind.
3451 * The `cfg` attribute can now be used on struct fields and enum variants.
3454 * std: The `option` and `result` API's have been overhauled to make them
3455 simpler, more consistent, and more composable.
3456 * std: The entire `std::io` module has been replaced with one that is
3457 more comprehensive and that properly interfaces with the underlying
3458 scheduler. File, TCP, UDP, Unix sockets, pipes, and timers are all
3460 * std: `io::util` contains a number of useful implementations of
3461 `Reader` and `Writer`, including `NullReader`, `NullWriter`,
3462 `ZeroReader`, `TeeReader`.
3463 * std: The reference counted pointer type `extra::rc` moved into std.
3464 * std: The `Gc` type in the `gc` module will replace `@` (it is currently
3465 just a wrapper around it).
3466 * std: The `Either` type has been removed.
3467 * std: `fmt::Default` can be implemented for any type to provide default
3468 formatting to the `format!` macro, as in `format!("{}", myfoo)`.
3469 * std: The `rand` API continues to be tweaked.
3470 * std: The `rust_begin_unwind` function, useful for inserting breakpoints
3471 on failure in gdb, is now named `rust_fail`.
3472 * std: The `each_key` and `each_value` methods on `HashMap` have been
3473 replaced by the `keys` and `values` iterators.
3474 * std: Functions dealing with type size and alignment have moved from the
3475 `sys` module to the `mem` module.
3476 * std: The `path` module was written and API changed.
3477 * std: `str::from_utf8` has been changed to cast instead of allocate.
3478 * std: `starts_with` and `ends_with` methods added to vectors via the
3479 `ImmutableEqVector` trait, which is in the prelude.
3480 * std: Vectors can be indexed with the `get_opt` method, which returns `None`
3481 if the index is out of bounds.
3482 * std: Task failure no longer propagates between tasks, as the model was
3483 complex, expensive, and incompatible with thread-based tasks.
3484 * std: The `Any` type can be used for dynamic typing.
3485 * std: `~Any` can be passed to the `fail!` macro and retrieved via
3487 * std: Methods that produce iterators generally do not have an `_iter`
3489 * std: `cell::Cell` and `cell::RefCell` can be used to introduce mutability
3490 roots (mutable fields, etc.). Use instead of e.g. `@mut`.
3491 * std: `util::ignore` renamed to `prelude::drop`.
3492 * std: Slices have `sort` and `sort_by` methods via the `MutableVector`
3494 * std: `vec::raw` has seen a lot of cleanup and API changes.
3495 * std: The standard library no longer includes any C++ code, and very
3496 minimal C, eliminating the dependency on libstdc++.
3497 * std: Runtime scheduling and I/O functionality has been factored out into
3498 extensible interfaces and is now implemented by two different crates:
3499 libnative, for native threading and I/O; and libgreen, for green threading
3500 and I/O. This paves the way for using the standard library in more limited
3501 embedded environments.
3502 * std: The `comm` module has been rewritten to be much faster, have a
3503 simpler, more consistent API, and to work for both native and green
3505 * std: All libuv dependencies have been moved into the rustuv crate.
3506 * native: New implementations of runtime scheduling on top of OS threads.
3507 * native: New native implementations of TCP, UDP, file I/O, process spawning,
3509 * green: The green thread scheduler and message passing types are almost
3511 * extra: The `flatpipes` module had bitrotted and was removed.
3512 * extra: All crypto functions have been removed and Rust now has a policy of
3513 not reimplementing crypto in the standard library. In the future crypto
3514 will be provided by external crates with bindings to established libraries.
3515 * extra: `c_vec` has been modernized.
3516 * extra: The `sort` module has been removed. Use the `sort` method on
3520 * The `rust` and `rusti` commands have been removed, due to lack of
3522 * `rustdoc` was completely rewritten.
3523 * `rustdoc` can test code examples in documentation.
3524 * `rustpkg` can test packages with the argument, 'test'.
3525 * `rustpkg` supports arbitrary dependencies, including C libraries.
3526 * `rustc`'s support for generating debug info is improved again.
3527 * `rustc` has better error reporting for unbalanced delimiters.
3528 * `rustc`'s JIT support was removed due to bitrot.
3529 * Executables and static libraries can be built with LTO (-Z lto)
3530 * `rustc` adds a `--dep-info` flag for communicating dependencies to
3534 Version 0.8 (2013-09-26)
3535 ============================
3537 * ~2200 changes, numerous bugfixes
3540 * The `for` loop syntax has changed to work with the `Iterator` trait.
3541 * At long last, unwinding works on Windows.
3542 * Default methods are ready for use.
3543 * Many trait inheritance bugs fixed.
3544 * Owned and borrowed trait objects work more reliably.
3545 * `copy` is no longer a keyword. It has been replaced by the `Clone` trait.
3546 * rustc can omit emission of code for the `debug!` macro if it is passed
3548 * mod.rs is now "blessed". When loading `mod foo;`, rustc will now look
3549 for foo.rs, then foo/mod.rs, and will generate an error when both are
3551 * Strings no longer contain trailing nulls. The new `std::c_str` module
3552 provides new mechanisms for converting to C strings.
3553 * The type of foreign functions is now `extern "C" fn` instead of `*u8'.
3554 * The FFI has been overhauled such that foreign functions are called directly,
3555 instead of through a stack-switching wrapper.
3556 * Calling a foreign function must be done through a Rust function with the
3557 `#[fixed_stack_segment]` attribute.
3558 * The `externfn!` macro can be used to declare both a foreign function and
3559 a `#[fixed_stack_segment]` wrapper at once.
3560 * `pub` and `priv` modifiers on `extern` blocks are no longer parsed.
3561 * `unsafe` is no longer allowed on extern fns - they are all unsafe.
3562 * `priv` is disallowed everywhere except for struct fields and enum variants.
3563 * `&T` (besides `&'static T`) is no longer allowed in `@T`.
3564 * `ref` bindings in irrefutable patterns work correctly now.
3565 * `char` is now prevented from containing invalid code points.
3566 * Casting to `bool` is no longer allowed.
3567 * `\0` is now accepted as an escape in chars and strings.
3568 * `yield` is a reserved keyword.
3569 * `typeof` is a reserved keyword.
3570 * Crates may be imported by URL with `extern mod foo = "url";`.
3571 * Explicit enum discriminants may be given as uints as in `enum E { V = 0u }`
3572 * Static vectors can be initialized with repeating elements,
3573 e.g. `static foo: [u8, .. 100]: [0, .. 100];`.
3574 * Static structs can be initialized with functional record update,
3575 e.g. `static foo: Foo = Foo { a: 5, .. bar };`.
3576 * `cfg!` can be used to conditionally execute code based on the crate
3577 configuration, similarly to `#[cfg(...)]`.
3578 * The `unnecessary_qualification` lint detects unneeded module
3579 prefixes (default: allow).
3580 * Arithmetic operations have been implemented on the SIMD types in
3581 `std::unstable::simd`.
3582 * Exchange allocation headers were removed, reducing memory usage.
3583 * `format!` implements a completely new, extensible, and higher-performance
3584 string formatting system. It will replace `fmt!`.
3585 * `print!` and `println!` write formatted strings (using the `format!`
3586 extension) to stdout.
3587 * `write!` and `writeln!` write formatted strings (using the `format!`
3588 extension) to the new Writers in `std::rt::io`.
3589 * The library section in which a function or static is placed may
3590 be specified with `#[link_section = "..."]`.
3591 * The `proto!` syntax extension for defining bounded message protocols
3593 * `macro_rules!` is hygienic for `let` declarations.
3594 * The `#[export_name]` attribute specifies the name of a symbol.
3595 * `unreachable!` can be used to indicate unreachable code, and fails
3599 * std: Transitioned to the new runtime, written in Rust.
3600 * std: Added an experimental I/O library, `rt::io`, based on the new
3602 * std: A new generic `range` function was added to the prelude, replacing
3603 `uint::range` and friends.
3604 * std: `range_rev` no longer exists. Since range is an iterator it can be
3605 reversed with `range(lo, hi).invert()`.
3606 * std: The `chain` method on option renamed to `and_then`; `unwrap_or_default`
3607 renamed to `unwrap_or`.
3608 * std: The `iterator` module was renamed to `iter`.
3609 * std: Integral types now support the `checked_add`, `checked_sub`, and
3610 `checked_mul` operations for detecting overflow.
3611 * std: Many methods in `str`, `vec`, `option, `result` were renamed for
3613 * std: Methods are standardizing on conventions for casting methods:
3614 `to_foo` for copying, `into_foo` for moving, `as_foo` for temporary
3616 * std: The `CString` type in `c_str` provides new ways to convert to and
3618 * std: `DoubleEndedIterator` can yield elements in two directions.
3619 * std: The `mut_split` method on vectors partitions an `&mut [T]` into
3621 * std: `str::from_bytes` renamed to `str::from_utf8`.
3622 * std: `pop_opt` and `shift_opt` methods added to vectors.
3623 * std: The task-local data interface no longer uses @, and keys are
3624 no longer function pointers.
3625 * std: The `swap_unwrap` method of `Option` renamed to `take_unwrap`.
3626 * std: Added `SharedPort` to `comm`.
3627 * std: `Eq` has a default method for `ne`; only `eq` is required
3629 * std: `Ord` has default methods for `le`, `gt` and `ge`; only `lt`
3630 is required in implementations.
3631 * std: `is_utf8` performance is improved, impacting many string functions.
3632 * std: `os::MemoryMap` provides cross-platform mmap.
3633 * std: `ptr::offset` is now unsafe, but also more optimized. Offsets that
3634 are not 'in-bounds' are considered undefined.
3635 * std: Many freestanding functions in `vec` removed in favor of methods.
3636 * std: Many freestanding functions on scalar types removed in favor of
3638 * std: Many options to task builders were removed since they don't make
3639 sense in the new scheduler design.
3640 * std: More containers implement `FromIterator` so can be created by the
3642 * std: More complete atomic types in `unstable::atomics`.
3643 * std: `comm::PortSet` removed.
3644 * std: Mutating methods in the `Set` and `Map` traits have been moved into
3645 the `MutableSet` and `MutableMap` traits. `Container::is_empty`,
3646 `Map::contains_key`, `MutableMap::insert`, and `MutableMap::remove` have
3647 default implementations.
3648 * std: Various `from_str` functions were removed in favor of a generic
3649 `from_str` which is available in the prelude.
3650 * std: `util::unreachable` removed in favor of the `unreachable!` macro.
3651 * extra: `dlist`, the doubly-linked list was modernized.
3652 * extra: Added a `hex` module with `ToHex` and `FromHex` traits.
3653 * extra: Added `glob` module, replacing `std::os::glob`.
3654 * extra: `rope` was removed.
3655 * extra: `deque` was renamed to `ringbuf`. `RingBuf` implements `Deque`.
3656 * extra: `net`, and `timer` were removed. The experimental replacements
3657 are `std::rt::io::net` and `std::rt::io::timer`.
3658 * extra: Iterators implemented for `SmallIntMap`.
3659 * extra: Iterators implemented for `Bitv` and `BitvSet`.
3660 * extra: `SmallIntSet` removed. Use `BitvSet`.
3661 * extra: Performance of JSON parsing greatly improved.
3662 * extra: `semver` updated to SemVer 2.0.0.
3663 * extra: `term` handles more terminals correctly.
3664 * extra: `dbg` module removed.
3665 * extra: `par` module removed.
3666 * extra: `future` was cleaned up, with some method renames.
3667 * extra: Most free functions in `getopts` were converted to methods.
3670 * rustc's debug info generation (`-Z debug-info`) is greatly improved.
3671 * rustc accepts `--target-cpu` to compile to a specific CPU architecture,
3672 similarly to gcc's `--march` flag.
3673 * rustc's performance compiling small crates is much better.
3674 * rustpkg has received many improvements.
3675 * rustpkg supports git tags as package IDs.
3676 * rustpkg builds into target-specific directories so it can be used for
3678 * The number of concurrent test tasks is controlled by the environment
3679 variable RUST_TEST_TASKS.
3680 * The test harness can now report metrics for benchmarks.
3681 * All tools have man pages.
3682 * Programs compiled with `--test` now support the `-h` and `--help` flags.
3683 * The runtime uses jemalloc for allocations.
3684 * Segmented stacks are temporarily disabled as part of the transition to
3685 the new runtime. Stack overflows are possible!
3686 * A new documentation backend, rustdoc_ng, is available for use. It is
3687 still invoked through the normal `rustdoc` command.
3690 Version 0.7 (2013-07-03)
3691 =======================
3693 * ~2000 changes, numerous bugfixes
3696 * `impl`s no longer accept a visibility qualifier. Put them on methods
3698 * The borrow checker has been rewritten with flow-sensitivity, fixing
3699 many bugs and inconveniences.
3700 * The `self` parameter no longer implicitly means `&'self self`,
3701 and can be explicitly marked with a lifetime.
3702 * Overloadable compound operators (`+=`, etc.) have been temporarily
3703 removed due to bugs.
3704 * The `for` loop protocol now requires `for`-iterators to return `bool`
3705 so they compose better.
3706 * The `Durable` trait is replaced with the `'static` bounds.
3707 * Trait default methods work more often.
3708 * Structs with the `#[packed]` attribute have byte alignment and
3709 no padding between fields.
3710 * Type parameters bound by `Copy` must now be copied explicitly with
3712 * It is now illegal to move out of a dereferenced unsafe pointer.
3713 * `Option<~T>` is now represented as a nullable pointer.
3714 * `@mut` does dynamic borrow checks correctly.
3715 * The `main` function is only detected at the topmost level of the crate.
3716 The `#[main]` attribute is still valid anywhere.
3717 * Struct fields may no longer be mutable. Use inherited mutability.
3718 * The `#[no_send]` attribute makes a type that would otherwise be
3720 * The `#[no_freeze]` attribute makes a type that would otherwise be
3722 * Unbounded recursion will abort the process after reaching the limit
3723 specified by the `RUST_MAX_STACK` environment variable (default: 1GB).
3724 * The `vecs_implicitly_copyable` lint mode has been removed. Vectors
3725 are never implicitly copyable.
3726 * `#[static_assert]` makes compile-time assertions about static bools.
3727 * At long last, 'argument modes' no longer exist.
3728 * The rarely used `use mod` statement no longer exists.
3731 * `fail!` and `assert!` accept `~str`, `&'static str` or `fmt!`-style
3733 * `Encodable`, `Decodable`, `Ord`, `TotalOrd`, `TotalEq`, `DeepClone`,
3734 `Rand`, `Zero` and `ToStr` can all be automatically derived with
3736 * The `bytes!` macro returns a vector of bytes for string, u8, char,
3737 and unsuffixed integer literals.
3740 * The `core` crate was renamed to `std`.
3741 * The `std` crate was renamed to `extra`.
3742 * More and improved documentation.
3743 * std: `iterator` module for external iterator objects.
3744 * Many old-style (internal, higher-order function) iterators replaced by
3745 implementations of `Iterator`.
3746 * std: Many old internal vector and string iterators,
3747 incl. `any`, `all`. removed.
3748 * std: The `finalize` method of `Drop` renamed to `drop`.
3749 * std: The `drop` method now takes `&mut self` instead of `&self`.
3750 * std: The prelude no longer reexports any modules, only types and traits.
3751 * std: Prelude additions: `print`, `println`, `FromStr`, `ApproxEq`, `Equiv`,
3752 `Iterator`, `IteratorUtil`, many numeric traits, many tuple traits.
3753 * std: New numeric traits: `Fractional`, `Real`, `RealExt`, `Integer`, `Ratio`,
3754 `Algebraic`, `Trigonometric`, `Exponential`, `Primitive`.
3755 * std: Tuple traits and accessors defined for up to 12-tuples, e.g.
3756 `(0, 1, 2).n2()` or `(0, 1, 2).n2_ref()`.
3757 * std: Many types implement `Clone`.
3758 * std: `path` type renamed to `Path`.
3759 * std: `mut` module and `Mut` type removed.
3760 * std: Many standalone functions removed in favor of methods and iterators
3761 in `vec`, `str`. In the future methods will also work as functions.
3762 * std: `reinterpret_cast` removed. Use `transmute`.
3763 * std: ascii string handling in `std::ascii`.
3764 * std: `Rand` is implemented for ~/@.
3765 * std: `run` module for spawning processes overhauled.
3766 * std: Various atomic types added to `unstable::atomic`.
3767 * std: Various types implement `Zero`.
3768 * std: `LinearMap` and `LinearSet` renamed to `HashMap` and `HashSet`.
3769 * std: Borrowed pointer functions moved from `ptr` to `borrow`.
3770 * std: Added `os::mkdir_recursive`.
3771 * std: Added `os::glob` function performs filesystems globs.
3772 * std: `FuzzyEq` renamed to `ApproxEq`.
3773 * std: `Map` now defines `pop` and `swap` methods.
3774 * std: `Cell` constructors converted to static methods.
3775 * extra: `rc` module adds the reference counted pointers, `Rc` and `RcMut`.
3776 * extra: `flate` module moved from `std` to `extra`.
3777 * extra: `fileinput` module for iterating over a series of files.
3778 * extra: `Complex` number type and `complex` module.
3779 * extra: `Rational` number type and `rational` module.
3780 * extra: `BigInt`, `BigUint` implement numeric and comparison traits.
3781 * extra: `term` uses terminfo now, is more correct.
3782 * extra: `arc` functions converted to methods.
3783 * extra: Implementation of fixed output size variations of SHA-2.
3786 * `unused_variable` lint mode for unused variables (default: warn).
3787 * `unused_unsafe` lint mode for detecting unnecessary `unsafe` blocks
3789 * `unused_mut` lint mode for identifying unused `mut` qualifiers
3791 * `dead_assignment` lint mode for unread variables (default: warn).
3792 * `unnecessary_allocation` lint mode detects some heap allocations that are
3793 immediately borrowed so could be written without allocating (default: warn).
3794 * `missing_doc` lint mode (default: allow).
3795 * `unreachable_code` lint mode (default: warn).
3796 * The `rusti` command has been rewritten and a number of bugs addressed.
3797 * rustc outputs in color on more terminals.
3798 * rustc accepts a `--link-args` flag to pass arguments to the linker.
3799 * rustc accepts a `-Z print-link-args` flag for debugging linkage.
3800 * Compiling with `-g` will make the binary record information about
3801 dynamic borrowcheck failures for debugging.
3802 * rustdoc has a nicer stylesheet.
3803 * Various improvements to rustdoc.
3804 * Improvements to rustpkg (see the detailed release notes).
3807 Version 0.6 (2013-04-03)
3808 ========================
3810 * ~2100 changes, numerous bugfixes
3813 * The self type parameter in traits is now spelled `Self`
3814 * The `self` parameter in trait and impl methods must now be explicitly
3815 named (for example: `fn f(&self) { }`). Implicit self is deprecated.
3816 * Static methods no longer require the `static` keyword and instead
3817 are distinguished by the lack of a `self` parameter
3818 * Replaced the `Durable` trait with the `'static` lifetime
3819 * The old closure type syntax with the trailing sigil has been
3820 removed in favor of the more consistent leading sigil
3821 * `super` is a keyword, and may be prefixed to paths
3822 * Trait bounds are separated with `+` instead of whitespace
3823 * Traits are implemented with `impl Trait for Type`
3824 instead of `impl Type: Trait`
3825 * Lifetime syntax is now `&'l foo` instead of `&l/foo`
3826 * The `export` keyword has finally been removed
3827 * The `move` keyword has been removed (see "Semantic changes")
3828 * The interior mutability qualifier on vectors, `[mut T]`, has been
3829 removed. Use `&mut [T]`, etc.
3830 * `mut` is no longer valid in `~mut T`. Use inherited mutability
3831 * `fail` is no longer a keyword. Use `fail!()`
3832 * `assert` is no longer a keyword. Use `assert!()`
3833 * `log` is no longer a keyword. use `debug!`, etc.
3834 * 1-tuples may be represented as `(T,)`
3835 * Struct fields may no longer be `mut`. Use inherited mutability,
3836 `@mut T`, `core::mut` or `core::cell`
3837 * `extern mod { ... }` is no longer valid syntax for foreign
3838 function modules. Use extern blocks: `extern { ... }`
3839 * Newtype enums removed. Use tuple-structs.
3840 * Trait implementations no longer support visibility modifiers
3841 * Pattern matching over vectors improved and expanded
3842 * `const` renamed to `static` to correspond to lifetime name,
3843 and make room for future `static mut` unsafe mutable globals.
3844 * Replaced `#[deriving_eq]` with `#[deriving(Eq)]`, etc.
3845 * `Clone` implementations can be automatically generated with
3846 `#[deriving(Clone)]`
3847 * Casts to traits must use a pointer sigil, e.g. `@foo as @Bar`
3848 instead of `foo as Bar`.
3849 * Fixed length vector types are now written as `[int, .. 3]`
3850 instead of `[int * 3]`.
3851 * Fixed length vector types can express the length as a constant
3852 expression. (ex: `[int, .. GL_BUFFER_SIZE - 2]`)
3855 * Types with owned pointers or custom destructors move by default,
3856 eliminating the `move` keyword
3857 * All foreign functions are considered unsafe
3858 * &mut is now unaliasable
3859 * Writes to borrowed @mut pointers are prevented dynamically
3861 * The name of the main function can be customized using #[main]
3862 * The default type of an inferred closure is &fn instead of @fn
3863 * `use` statements may no longer be "chained" - they cannot import
3864 identifiers imported by previous `use` statements
3865 * `use` statements are crate relative, importing from the "top"
3866 of the crate by default. Paths may be prefixed with `super::`
3867 or `self::` to change the search behavior.
3868 * Method visibility is inherited from the implementation declaration
3869 * Structural records have been removed
3870 * Many more types can be used in static items, including enums
3871 'static-lifetime pointers and vectors
3872 * Pattern matching over vectors improved and expanded
3873 * Typechecking of closure types has been overhauled to
3874 improve inference and eliminate unsoundness
3875 * Macros leave scope at the end of modules, unless that module is
3876 tagged with #[macro_escape]
3879 * Added big integers to `std::bigint`
3880 * Removed `core::oldcomm` module
3881 * Added pipe-based `core::comm` module
3882 * Numeric traits have been reorganized under `core::num`
3883 * `vec::slice` finally returns a slice
3884 * `debug!` and friends don't require a format string, e.g. `debug!(Foo)`
3885 * Containers reorganized around traits in `core::container`
3886 * `core::dvec` removed, `~[T]` is a drop-in replacement
3887 * `core::send_map` renamed to `core::hashmap`
3888 * `std::map` removed; replaced with `core::hashmap`
3889 * `std::treemap` reimplemented as an owned balanced tree
3890 * `std::deque` and `std::smallintmap` reimplemented as owned containers
3891 * `core::trie` added as a fast ordered map for integer keys
3892 * Set types added to `core::hashmap`, `core::trie` and `std::treemap`
3893 * `Ord` split into `Ord` and `TotalOrd`. `Ord` is still used to
3894 overload the comparison operators, whereas `TotalOrd` is used
3895 by certain container types
3898 * Replaced the 'cargo' package manager with 'rustpkg'
3899 * Added all-purpose 'rust' tool
3900 * `rustc --test` now supports benchmarks with the `#[bench]` attribute
3901 * rustc now *attempts* to offer spelling suggestions
3902 * Improved support for ARM and Android
3903 * Preliminary MIPS backend
3904 * Improved foreign function ABI implementation for x86, x86_64
3905 * Various memory usage improvements
3906 * Rust code may be embedded in foreign code under limited circumstances
3907 * Inline assembler supported by new asm!() syntax extension.
3910 Version 0.5 (2012-12-21)
3911 ===========================
3913 * ~900 changes, numerous bugfixes
3916 * Removed `<-` move operator
3917 * Completed the transition from the `#fmt` extension syntax to `fmt!`
3918 * Removed old fixed length vector syntax - `[T]/N`
3919 * New token-based quasi-quoters, `quote_tokens!`, `quote_expr!`, etc.
3920 * Macros may now expand to items and statements
3921 * `a.b()` is always parsed as a method call, never as a field projection
3922 * `Eq` and `IterBytes` implementations can be automatically generated
3923 with `#[deriving_eq]` and `#[deriving_iter_bytes]` respectively
3924 * Removed the special crate language for `.rc` files
3925 * Function arguments may consist of any irrefutable pattern
3928 * `&` and `~` pointers may point to objects
3929 * Tuple structs - `struct Foo(Bar, Baz)`. Will replace newtype enums.
3930 * Enum variants may be structs
3931 * Destructors can be added to all nominal types with the Drop trait
3932 * Structs and nullary enum variants may be constants
3933 * Values that cannot be implicitly copied are now automatically moved
3934 without writing `move` explicitly
3935 * `&T` may now be coerced to `*T`
3936 * Coercions happen in `let` statements as well as function calls
3937 * `use` statements now take crate-relative paths
3938 * The module and type namespaces have been merged so that static
3939 method names can be resolved under the trait in which they are
3942 * Improved support for language features
3943 * Trait inheritance works in many scenarios
3944 * More support for explicit self arguments in methods - `self`, `&self`
3945 `@self`, and `~self` all generally work as expected
3946 * Static methods work in more situations
3947 * Experimental: Traits may declare default methods for the implementations
3951 * New condition handling system in `core::condition`
3952 * Timsort added to `std::sort`
3953 * New priority queue, `std::priority_queue`
3954 * Pipes for serializable types, `std::flatpipes'
3955 * Serialization overhauled to be trait-based
3956 * Expanded `getopts` definitions
3957 * Moved futures to `std`
3958 * More functions are pure now
3959 * `core::comm` renamed to `oldcomm`. Still deprecated
3960 * `rustdoc` and `cargo` are libraries now
3963 * Added a preliminary REPL, `rusti`
3964 * License changed from MIT to dual MIT/APL2
3967 Version 0.4 (2012-10-15)
3968 ==========================
3970 * ~2000 changes, numerous bugfixes
3973 * All keywords are now strict and may not be used as identifiers anywhere
3974 * Keyword removal: 'again', 'import', 'check', 'new', 'owned', 'send',
3975 'of', 'with', 'to', 'class'.
3976 * Classes are replaced with simpler structs
3977 * Explicit method self types
3978 * `ret` became `return` and `alt` became `match`
3979 * `import` is now `use`; `use is now `extern mod`
3980 * `extern mod { ... }` is now `extern { ... }`
3981 * `use mod` is the recommended way to import modules
3982 * `pub` and `priv` replace deprecated export lists
3983 * The syntax of `match` pattern arms now uses fat arrow (=>)
3984 * `main` no longer accepts an args vector; use `os::args` instead
3987 * Trait implementations are now coherent, ala Haskell typeclasses
3988 * Trait methods may be static
3989 * Argument modes are deprecated
3990 * Borrowed pointers are much more mature and recommended for use
3991 * Strings and vectors in the static region are stored in constant memory
3992 * Typestate was removed
3993 * Resolution rewritten to be more reliable
3994 * Support for 'dual-mode' data structures (freezing and thawing)
3997 * Most binary operators can now be overloaded via the traits in
3999 * `std::net::url` for representing URLs
4000 * Sendable hash maps in `core::send_map`
4001 * `core::task' gained a (currently unsafe) task-local storage API
4004 * An efficient new intertask communication primitive called the pipe,
4005 along with a number of higher-level channel types, in `core::pipes`
4006 * `std::arc`, an atomically reference counted, immutable, shared memory
4008 * `std::sync`, various exotic synchronization tools based on arcs and pipes
4009 * Futures are now based on pipes and sendable
4010 * More robust linked task failure
4011 * Improved task builder API
4014 * Improved error reporting
4015 * Preliminary JIT support
4016 * Preliminary work on precise GC
4017 * Extensive architectural improvements to rustc
4018 * Begun a transition away from buggy C++-based reflection (shape) code to
4019 Rust-based (visitor) code
4020 * All hash functions and tables converted to secure, randomized SipHash
4023 Version 0.3 (2012-07-12)
4024 ========================
4026 * ~1900 changes, numerous bugfixes
4028 * New coding conveniences
4029 * Integer-literal suffix inference
4030 * Per-item control over warnings, errors
4031 * #[cfg(windows)] and #[cfg(unix)] attributes
4032 * Documentation comments
4033 * More compact closure syntax
4034 * 'do' expressions for treating higher-order functions as
4036 * *-patterns (wildcard extended to all constructor fields)
4039 * Name resolution pass and exhaustiveness checker rewritten
4040 * Region pointers and borrow checking supersede alias
4042 * Init-ness checking is now provided by a region-based liveness
4043 pass instead of the typestate pass; same for last-use analysis
4044 * Extensive work on region pointers
4046 * Experimental new language features
4047 * Slices and fixed-size, interior-allocated vectors
4048 * #!-comments for lang versioning, shell execution
4049 * Destructors and iface implementation for classes;
4050 type-parameterized classes and class methods
4051 * 'const' type kind for types that can be used to implement
4052 shared-memory concurrency patterns
4056 * Removal of various obsolete features
4057 * Keywords: 'be', 'prove', 'syntax', 'note', 'mutable', 'bind',
4058 'crust', 'native' (now 'extern'), 'cont' (now 'again')
4060 * Constructs: do-while loops ('do' repurposed), fn binding,
4061 resources (replaced by destructors)
4063 * Compiler reorganization
4064 * Syntax-layer of compiler split into separate crate
4065 * Clang (from LLVM project) integrated into build
4066 * Typechecker split into sub-modules
4069 * New time functions
4070 * Extension methods for many built-in types
4071 * Arc: atomic-refcount read-only / exclusive-use shared cells
4072 * Par: parallel map and search routines
4073 * Extensive work on libuv interface
4074 * Much vector code moved to libraries
4075 * Syntax extensions: #line, #col, #file, #mod, #stringify,
4076 #include, #include_str, #include_bin
4079 * Cargo automatically resolves dependencies
4082 Version 0.2 (2012-03-29)
4083 =========================
4085 * >1500 changes, numerous bugfixes
4087 * New docs and doc tooling
4089 * New port: FreeBSD x86_64
4091 * Compilation model enhancements
4092 * Generics now specialized, multiply instantiated
4093 * Functions now inlined across separate crates
4095 * Scheduling, stack and threading fixes
4096 * Noticeably improved message-passing performance
4097 * Explicit schedulers
4101 * Experimental new language features
4102 * Operator overloading
4106 * Various language extensions
4107 * C-callback function types: 'crust fn ...'
4108 * Infinite-loop construct: 'loop { ... }'
4109 * Shorten 'mutable' to 'mut'
4110 * Required mutable-local qualifier: 'let mut ...'
4111 * Basic glob-exporting: 'export foo::*;'
4112 * Alt now exhaustive, 'alt check' for runtime-checked
4113 * Block-function form of 'for' loop, with 'break' and 'ret'.
4116 * AST quasi-quote syntax extension
4117 * Revived libuv interface
4118 * New modules: core::{future, iter}, std::arena
4119 * Merged per-platform std::{os*, fs*} to core::{libc, os}
4120 * Extensive cleanup, regularization in libstd, libcore
4123 Version 0.1 (2012-01-20)
4124 ===============================
4126 * Most language features work, including:
4127 * Unique pointers, unique closures, move semantics
4128 * Interface-constrained generics
4129 * Static interface dispatch
4131 * Multithread task scheduling
4132 * Typestate predicates
4133 * Failure unwinding, destructors
4134 * Pattern matching and destructuring assignment
4135 * Lightweight block-lambda syntax
4136 * Preliminary macro-by-example
4138 * Compiler works with the following configurations:
4139 * Linux: x86 and x86_64 hosts and targets
4140 * MacOS: x86 and x86_64 hosts and targets
4141 * Windows: x86 hosts and targets
4143 * Cross compilation / multi-target configuration supported.
4145 * Preliminary API-documentation and package-management tools included.
4149 * Documentation is incomplete.
4151 * Performance is below intended target.
4153 * Standard library APIs are subject to extensive change, reorganization.
4155 * Language-level versioning is not yet operational - future code will