|
| 1 | +--- |
| 2 | +layout: post |
| 3 | +title: "Announcing Rust 1.6" |
| 4 | +author: The Rust Core Team |
| 5 | +--- |
| 6 | + |
| 7 | +Hello 2016! We’re happy to announce the first Rust release of the year, 1.6. |
| 8 | +Rust is a systems programming language focused on safety, speed, and |
| 9 | +concurrency. |
| 10 | + |
| 11 | +As always, you can [install Rust 1.6][install] from the appropriate page on our |
| 12 | +website, and check out the [detailed release notes for 1.6][notes] on GitHub. |
| 13 | +About 1100 patches were landed in this release. |
| 14 | + |
| 15 | +[install]: http://www.rust-lang.org/install.html |
| 16 | +[notes]: https://github.com/rust-lang/rust/blob/stable/RELEASES.md#version-160-2016-01-21 |
| 17 | + |
| 18 | +### What's in 1.6 stable |
| 19 | + |
| 20 | +This release contains a number of small refinements, one major feature, and |
| 21 | +a change to [Crates.io](https://crates.io). |
| 22 | + |
| 23 | +#### libcore stabilization |
| 24 | + |
| 25 | +The largest new feature in 1.6 is that [`libcore`] is now stable! Rust’s standard |
| 26 | +library is two-tiered: `libcore` contains a lot of functionality, but more important |
| 27 | +is what it does _not_ contain: significant dependencies. `libcore` is completely |
| 28 | +platform agnostic, and requires only a handful of external symbols to be defined. |
| 29 | +Rust’s `libstd` builds on top of `libcore`, adding support for memory allocation, |
| 30 | +I/O, and concurrency. Applications using Rust in the embedded space, as well as |
| 31 | +those writing operating systems, often eschew `libstd`, using only `libcore`. |
| 32 | + |
| 33 | +[`libcore`]: http://doc.rust-lang.org/nightly/core/ |
| 34 | + |
| 35 | +`libcore` being stabilized is a major step towards being able to write the lowest |
| 36 | +levels of software using stable Rust. There’s still future work to be done, however, |
| 37 | +so expect to hear more about this in future release notes. |
| 38 | + |
| 39 | +#### Library stabilizations |
| 40 | + |
| 41 | +About 30 library functions and methods are now stable in 1.6. Notable |
| 42 | +improvements include: |
| 43 | + |
| 44 | +The `drain()` family of functions on collections. These methods let you move |
| 45 | +elements out of a collection while allowing them to retain their backing |
| 46 | +memory, reducing allocation in certain situations. |
| 47 | + |
| 48 | +A number of implementations of `From` for converting between standard library |
| 49 | +types, mainly between various integral and floating-point types. |
| 50 | + |
| 51 | +Finally, `Vec::extend_from_slice()`, which was previously known as |
| 52 | +`push_all()`. This method has a significantly faster implementation than the |
| 53 | +more general `extend()`. |
| 54 | + |
| 55 | +See the detailed release notes linked above for more. |
| 56 | + |
| 57 | +#### Crates.io disallows wildcards |
| 58 | + |
| 59 | +If you maintain a crate on [Crates.io](https://crates.io), you might have seen |
| 60 | +a warning: newly uploaded crates are no longer allowed to use a wildcard when |
| 61 | +describing their dependencies. In other words, this is not allowed: |
| 62 | + |
| 63 | +```toml |
| 64 | +[dependencies] |
| 65 | +regex = "*" |
| 66 | +``` |
| 67 | + |
| 68 | +Instead, you must actually specify a specific version or range of versions, |
| 69 | +using one of the `semver` crate’s various options: `^`, `~`, or `=`. |
| 70 | + |
| 71 | +A wildcard dependency means that you work with any possible version of your |
| 72 | +dependency. This is highly unlikely to be true, and causes unnecessary breakage |
| 73 | +in the ecosystem. We’ve been advertising this change as a warning for some time; |
| 74 | +now it’s time to turn it into an error. |
| 75 | + |
| 76 | +### Contributors to 1.6 |
| 77 | + |
| 78 | +TODO |
0 commit comments