|
| 1 | +Version 1.5.0 (2015-12-10) |
| 2 | +========================== |
| 3 | + |
| 4 | +* ~700 changes, numerous bugfixes |
| 5 | + |
| 6 | +Highlights |
| 7 | +---------- |
| 8 | + |
| 9 | +* Stabilized APIs: |
| 10 | + [`BinaryHeap::from`], [`BinaryHeap::into_sorted_vec`], |
| 11 | + [`BinaryHeap::into_vec`], [`Condvar::wait_timeout`], |
| 12 | + [`FileTypeExt::is_block_device`], [`FileTypeExt::is_char_device`], |
| 13 | + [`FileTypeExt::is_fifo`], [`FileTypeExt::is_socket`], |
| 14 | + [`FileTypeExt`], [`Formatter::alternate`], [`Formatter::fill`], |
| 15 | + [`Formatter::precision`], [`Formatter::sign_aware_zero_pad`], |
| 16 | + [`Formatter::sign_minus`], [`Formatter::sign_plus`], |
| 17 | + [`Formatter::width`], [`Iterator::cmp`], [`Iterator::eq`], |
| 18 | + [`Iterator::ge`], [`Iterator::gt`], [`Iterator::le`], |
| 19 | + [`Iterator::lt`], [`Iterator::ne`], [`Iterator::partial_cmp`], |
| 20 | + [`Path::canonicalize`], [`Path::exists`], [`Path::is_dir`], |
| 21 | + [`Path::is_file`], [`Path::metadata`], [`Path::read_dir`], |
| 22 | + [`Path::read_link`], [`Path::symlink_metadata`], |
| 23 | + [`Utf8Error::valid_up_to`], [`Vec::resize`], |
| 24 | + [`VecDeque::as_mut_slices`], [`VecDeque::as_slices`], |
| 25 | + [`VecDeque::insert`], [`VecDeque::shrink_to_fit`], |
| 26 | + [`VecDeque::swap_remove_back`], [`VecDeque::swap_remove_front`], |
| 27 | + [`slice::split_first_mut`], [`slice::split_first`], |
| 28 | + [`slice::split_last_mut`], [`slice::split_last`], |
| 29 | + [`char::from_u32_unchecked`], [`fs::canonicalize`], |
| 30 | + [`str::MatchIndices`], [`str::RMatchIndices`], |
| 31 | + [`str::match_indices`], [`str::rmatch_indices`], |
| 32 | + [`str::slice_mut_unchecked`], [`string::ParseError`]. |
| 33 | +* Rust applications hosted on crates.io can be installed locally to |
| 34 | + `~/.cargo/bin` with the [`cargo install`] command. Among other |
| 35 | + things this makes it easier to augment Cargo with new subcommands: |
| 36 | + when a binary named e.g. `cargo-foo` is found in `$PATH` it can be |
| 37 | + invoked as `cargo foo`. |
| 38 | +* Crates with wildcard (`*`) dependencies will [emit warnings when |
| 39 | + published][1.5w]. In 1.6 it will no longer be possible to publish |
| 40 | + crates with wildcard dependencies. |
| 41 | + |
| 42 | +Breaking Changes |
| 43 | +---------------- |
| 44 | + |
| 45 | +* The rules determining when a particular lifetime must outlive |
| 46 | + a particular value (known as '[dropck]') have been [modified |
| 47 | + to not rely on parametricity][1.5p]. |
| 48 | +* [Implementations of `AsRef` and `AsMut` were added to `Box`, `Rc`, |
| 49 | + and `Arc`][1.5a]. Because these smart pointer types implement |
| 50 | + `Deref`, this causes breakage in cases where the interior type |
| 51 | + contains methods of the same name. |
| 52 | +* [Correct a bug in Rc/Arc][1.5c] that caused [dropck] to be unaware |
| 53 | + that they could drop their content. Soundness fix. |
| 54 | +* All method invocations are [properly checked][1.5wf1] for |
| 55 | + [well-formedness][1.5wf2]. Soundness fix. |
| 56 | +* Traits whose supertraits contain `Self` are [not object |
| 57 | + safe][1.5o]. Soundness fix. |
| 58 | +* Target specifications support a [`no_default_libraries`][1.5nd] |
| 59 | + setting that controls whether `-nodefaultlibs` is passed to the |
| 60 | + linker, and in turn the `is_like_windows` setting no longer affects |
| 61 | + the `-nodefaultlibs` flag. |
| 62 | +* `#[derive(Show)]`, long-deprecated, [has been removed][1.5ds]. |
| 63 | +* The `#[inline]` and `#[repr]` attributes [can only appear |
| 64 | + in valid locations][1.5at]. |
| 65 | +* Native libraries linked from the local crate are [passed to |
| 66 | + the linker before native libraries from upstream crates][1.5nl]. |
| 67 | +* Two rarely-used attributes, `#[no_debug]` and |
| 68 | + `#[omit_gdb_pretty_printer_section]` [are feature gated][1.5fg]. |
| 69 | +* Negation of unsigned integers, which has been a warning for |
| 70 | + several releases, [is now behind a feature gate and will |
| 71 | + generate errors][1.5nu]. |
| 72 | +* The parser accidentally accepted visibility modifiers on |
| 73 | + enum variants, a bug [which has been fixed][1.5ev]. |
| 74 | +* [A bug was fixed that allowed `use` statements to import unstable |
| 75 | + features][1.5use]. |
| 76 | + |
| 77 | +Language |
| 78 | +-------- |
| 79 | + |
| 80 | +* When evaluating expressions at compile-time that are not |
| 81 | + compile-time constants (const-evaluating expressions in non-const |
| 82 | + contexts), incorrect code such as overlong bitshifts and arithmetic |
| 83 | + overflow will [generate a warning instead of an error][1.5ce], |
| 84 | + delaying the error until runtime. This will allow the |
| 85 | + const-evaluator to be expanded in the future backwards-compatibly. |
| 86 | +* The `improper_ctypes` lint [no longer warns about using `isize` and |
| 87 | + `usize` in FFI][1.5ict]. |
| 88 | + |
| 89 | +Libraries |
| 90 | +--------- |
| 91 | + |
| 92 | +* `Arc<T>` and `Rc<T>` are [covariant with respect to `T` instead of |
| 93 | + invariant][1.5c]. |
| 94 | +* `Default` is [implemented for mutable slices][1.5d]. |
| 95 | +* `FromStr` is [implemented for `SockAddrV4` and `SockAddrV6`][1.5s]. |
| 96 | +* There are now `From` conversions [between floating point |
| 97 | + types][1.5f] where the conversions are lossless. |
| 98 | +* Thera are now `From` conversions [between integer types][1.5i] where |
| 99 | + the conversions are lossless. |
| 100 | +* [`fs::Metadata` implements `Clone`][1.5fs]. |
| 101 | +* The `parse` method [accepts a leading "+" when parsing |
| 102 | + integers][1.5pi]. |
| 103 | +* [`AsMut` is implemented for `Vec`][1.5am]. |
| 104 | +* The `clone_from` implementations for `String` and `BinaryHeap` [have |
| 105 | + been optimized][1.5cf] and no longer rely on the default impl. |
| 106 | +* The `extern "Rust"`, `extern "C"`, `unsafe extern "Rust"` and |
| 107 | + `unsafe extern "C"` function types now [implement `Clone`, |
| 108 | + `PartialEq`, `Eq`, `PartialOrd`, `Ord`, `Hash`, `fmt::Pointer`, and |
| 109 | + `fmt::Debug` for up to 12 arguments][1.5fp]. |
| 110 | +* [Dropping `Vec`s is much faster in unoptimized builds when the |
| 111 | + element types don't implement `Drop`][1.5dv]. |
| 112 | +* A bug that caused in incorrect behavior when [combining `VecDeque` |
| 113 | + with zero-sized types][1.5vdz] was resolved. |
| 114 | +* [`PartialOrd` for slices is faster][1.5po]. |
| 115 | + |
| 116 | +Miscellaneous |
| 117 | +------------- |
| 118 | + |
| 119 | +* [Crate metadata size was reduced by 20%][1.5md]. |
| 120 | +* [Improvements to code generation reduced the size of libcore by 3.3 |
| 121 | + MB and rustc's memory usage by 18MB][1.5m]. |
| 122 | +* [Improvements to deref translation increased performance in |
| 123 | + unoptimized builds][1.5dr]. |
| 124 | +* Various errors in trait resolution [are deduplicated to only be |
| 125 | + reported once][1.5te]. |
| 126 | +* Rust has preliminary [support for rumprun kernels][1.5rr]. |
| 127 | +* Rust has preliminary [support for NetBSD on amd64][1.5na]. |
| 128 | + |
| 129 | +[1.5use]: https://github.com/rust-lang/rust/pull/28364 |
| 130 | +[1.5po]: https://github.com/rust-lang/rust/pull/28436 |
| 131 | +[1.5ev]: https://github.com/rust-lang/rust/pull/28442 |
| 132 | +[1.5nu]: https://github.com/rust-lang/rust/pull/28468 |
| 133 | +[1.5dr]: https://github.com/rust-lang/rust/pull/28491 |
| 134 | +[1.5vdz]: https://github.com/rust-lang/rust/pull/28494 |
| 135 | +[1.5md]: https://github.com/rust-lang/rust/pull/28521 |
| 136 | +[1.5fg]: https://github.com/rust-lang/rust/pull/28522 |
| 137 | +[1.5dv]: https://github.com/rust-lang/rust/pull/28531 |
| 138 | +[1.5na]: https://github.com/rust-lang/rust/pull/28543 |
| 139 | +[1.5fp]: https://github.com/rust-lang/rust/pull/28560 |
| 140 | +[1.5rr]: https://github.com/rust-lang/rust/pull/28593 |
| 141 | +[1.5cf]: https://github.com/rust-lang/rust/pull/28602 |
| 142 | +[1.5nl]: https://github.com/rust-lang/rust/pull/28605 |
| 143 | +[1.5te]: https://github.com/rust-lang/rust/pull/28645 |
| 144 | +[1.5at]: https://github.com/rust-lang/rust/pull/28650 |
| 145 | +[1.5am]: https://github.com/rust-lang/rust/pull/28663 |
| 146 | +[1.5m]: https://github.com/rust-lang/rust/pull/28778 |
| 147 | +[1.5ict]: https://github.com/rust-lang/rust/pull/28779 |
| 148 | +[1.5a]: https://github.com/rust-lang/rust/pull/28811 |
| 149 | +[1.5pi]: https://github.com/rust-lang/rust/pull/28826 |
| 150 | +[1.5ce]: https://github.com/rust-lang/rfcs/blob/master/text/1229-compile-time-asserts.md |
| 151 | +[1.5p]: https://github.com/rust-lang/rfcs/blob/master/text/1238-nonparametric-dropck.md |
| 152 | +[1.5i]: https://github.com/rust-lang/rust/pull/28921 |
| 153 | +[1.5fs]: https://github.com/rust-lang/rust/pull/29021 |
| 154 | +[1.5f]: https://github.com/rust-lang/rust/pull/29129 |
| 155 | +[1.5ds]: https://github.com/rust-lang/rust/pull/29148 |
| 156 | +[1.5s]: https://github.com/rust-lang/rust/pull/29190 |
| 157 | +[1.5d]: https://github.com/rust-lang/rust/pull/29245 |
| 158 | +[1.5o]: https://github.com/rust-lang/rust/pull/29259 |
| 159 | +[1.5nd]: https://github.com/rust-lang/rust/pull/28578 |
| 160 | +[1.5wf2]: https://github.com/rust-lang/rfcs/blob/master/text/1214-projections-lifetimes-and-wf.md |
| 161 | +[1.5wf1]: https://github.com/rust-lang/rust/pull/28669 |
| 162 | +[dropck]: https://doc.rust-lang.org/nightly/nomicon/dropck.html |
| 163 | +[1.5c]: https://github.com/rust-lang/rust/pull/29110 |
| 164 | +[1.5w]: https://github.com/rust-lang/rfcs/blob/master/text/1241-no-wildcard-deps.md |
| 165 | +[`cargo install`]: https://github.com/rust-lang/rfcs/blob/master/text/1200-cargo-install.md |
| 166 | +[`BinaryHeap::from`]: http://doc.rust-lang.org/nightly/std/convert/trait.From.html#method.from |
| 167 | +[`BinaryHeap::into_sorted_vec`]: http://doc.rust-lang.org/nightly/std/collections/struct.BinaryHeap.html#method.into_sorted_vec |
| 168 | +[`BinaryHeap::into_vec`]: http://doc.rust-lang.org/nightly/std/collections/struct.BinaryHeap.html#method.into_vec |
| 169 | +[`Condvar::wait_timeout`]: http://doc.rust-lang.org/nightly/std/sync/struct.Condvar.html#method.wait_timeout |
| 170 | +[`FileTypeExt::is_block_device`]: http://doc.rust-lang.org/nightly/std/os/unix/fs/trait.FileTypeExt.html#tymethod.is_block_device |
| 171 | +[`FileTypeExt::is_char_device`]: http://doc.rust-lang.org/nightly/std/os/unix/fs/trait.FileTypeExt.html#tymethod.is_char_device |
| 172 | +[`FileTypeExt::is_fifo`]: http://doc.rust-lang.org/nightly/std/os/unix/fs/trait.FileTypeExt.html#tymethod.is_fifo |
| 173 | +[`FileTypeExt::is_socket`]: http://doc.rust-lang.org/nightly/std/os/unix/fs/trait.FileTypeExt.html#tymethod.is_socket |
| 174 | +[`FileTypeExt`]: http://doc.rust-lang.org/nightly/std/os/unix/fs/trait.FileTypeExt.html |
| 175 | +[`Formatter::alternate`]: http://doc.rust-lang.org/nightly/core/fmt/struct.Formatter.html#method.alternate |
| 176 | +[`Formatter::fill`]: http://doc.rust-lang.org/nightly/core/fmt/struct.Formatter.html#method.fill |
| 177 | +[`Formatter::precision`]: http://doc.rust-lang.org/nightly/core/fmt/struct.Formatter.html#method.precision |
| 178 | +[`Formatter::sign_aware_zero_pad`]: http://doc.rust-lang.org/nightly/core/fmt/struct.Formatter.html#method.sign_aware_zero_pad |
| 179 | +[`Formatter::sign_minus`]: http://doc.rust-lang.org/nightly/core/fmt/struct.Formatter.html#method.sign_minus |
| 180 | +[`Formatter::sign_plus`]: http://doc.rust-lang.org/nightly/core/fmt/struct.Formatter.html#method.sign_plus |
| 181 | +[`Formatter::width`]: http://doc.rust-lang.org/nightly/core/fmt/struct.Formatter.html#method.width |
| 182 | +[`Iterator::cmp`]: http://doc.rust-lang.org/nightly/core/iter/trait.Iterator.html#method.cmp |
| 183 | +[`Iterator::eq`]: http://doc.rust-lang.org/nightly/core/iter/trait.Iterator.html#method.eq |
| 184 | +[`Iterator::ge`]: http://doc.rust-lang.org/nightly/core/iter/trait.Iterator.html#method.ge |
| 185 | +[`Iterator::gt`]: http://doc.rust-lang.org/nightly/core/iter/trait.Iterator.html#method.gt |
| 186 | +[`Iterator::le`]: http://doc.rust-lang.org/nightly/core/iter/trait.Iterator.html#method.le |
| 187 | +[`Iterator::lt`]: http://doc.rust-lang.org/nightly/core/iter/trait.Iterator.html#method.lt |
| 188 | +[`Iterator::ne`]: http://doc.rust-lang.org/nightly/core/iter/trait.Iterator.html#method.ne |
| 189 | +[`Iterator::partial_cmp`]: http://doc.rust-lang.org/nightly/core/iter/trait.Iterator.html#method.partial_cmp |
| 190 | +[`Path::canonicalize`]: http://doc.rust-lang.org/nightly/std/path/struct.Path.html#method.canonicalize |
| 191 | +[`Path::exists`]: http://doc.rust-lang.org/nightly/std/path/struct.Path.html#method.exists |
| 192 | +[`Path::is_dir`]: http://doc.rust-lang.org/nightly/std/path/struct.Path.html#method.is_dir |
| 193 | +[`Path::is_file`]: http://doc.rust-lang.org/nightly/std/path/struct.Path.html#method.is_file |
| 194 | +[`Path::metadata`]: http://doc.rust-lang.org/nightly/std/path/struct.Path.html#method.metadata |
| 195 | +[`Path::read_dir`]: http://doc.rust-lang.org/nightly/std/path/struct.Path.html#method.read_dir |
| 196 | +[`Path::read_link`]: http://doc.rust-lang.org/nightly/std/path/struct.Path.html#method.read_link |
| 197 | +[`Path::symlink_metadata`]: http://doc.rust-lang.org/nightly/std/path/struct.Path.html#method.symlink_metadata |
| 198 | +[`Utf8Error::valid_up_to`]: http://doc.rust-lang.org/nightly/core/str/struct.Utf8Error.html#method.valid_up_to |
| 199 | +[`Vec::resize`]: http://doc.rust-lang.org/nightly/std/vec/struct.Vec.html#method.resize |
| 200 | +[`VecDeque::as_mut_slices`]: http://doc.rust-lang.org/nightly/std/collections/struct.VecDeque.html#method.as_mut_slices |
| 201 | +[`VecDeque::as_slices`]: http://doc.rust-lang.org/nightly/std/collections/struct.VecDeque.html#method.as_slices |
| 202 | +[`VecDeque::insert`]: http://doc.rust-lang.org/nightly/std/collections/struct.VecDeque.html#method.insert |
| 203 | +[`VecDeque::shrink_to_fit`]: http://doc.rust-lang.org/nightly/std/collections/struct.VecDeque.html#method.shrink_to_fit |
| 204 | +[`VecDeque::swap_remove_back`]: http://doc.rust-lang.org/nightly/std/collections/struct.VecDeque.html#method.swap_remove_back |
| 205 | +[`VecDeque::swap_remove_front`]: http://doc.rust-lang.org/nightly/std/collections/struct.VecDeque.html#method.swap_remove_front |
| 206 | +[`slice::split_first_mut`]: http://doc.rust-lang.org/nightly/std/primitive.slice.html#method.split_first_mut |
| 207 | +[`slice::split_first`]: http://doc.rust-lang.org/nightly/std/primitive.slice.html#method.split_first |
| 208 | +[`slice::split_last_mut`]: http://doc.rust-lang.org/nightly/std/primitive.slice.html#method.split_last_mut |
| 209 | +[`slice::split_last`]: http://doc.rust-lang.org/nightly/std/primitive.slice.html#method.split_last |
| 210 | +[`char::from_u32_unchecked`]: http://doc.rust-lang.org/nightly/std/char/fn.from_u32_unchecked.html |
| 211 | +[`fs::canonicalize`]: http://doc.rust-lang.org/nightly/std/fs/fn.canonicalize.html |
| 212 | +[`str::MatchIndices`]: http://doc.rust-lang.org/nightly/std/str/struct.MatchIndices.html |
| 213 | +[`str::RMatchIndices`]: http://doc.rust-lang.org/nightly/std/str/struct.RMatchIndices.html |
| 214 | +[`str::match_indices`]: http://doc.rust-lang.org/nightly/std/primitive.str.html#method.match_indices |
| 215 | +[`str::rmatch_indices`]: http://doc.rust-lang.org/nightly/std/primitive.str.html#method.rmatch_indices |
| 216 | +[`str::slice_mut_unchecked`]: http://doc.rust-lang.org/nightly/std/primitive.str.html#method.slice_mut_unchecked |
| 217 | +[`string::ParseError`]: http://doc.rust-lang.org/nightly/std/string/enum.ParseError.html |
| 218 | + |
1 | 219 | Version 1.4.0 (2015-10-29)
|
2 |
| -============================ |
| 220 | +========================== |
3 | 221 |
|
4 | 222 | * ~1200 changes, numerous bugfixes
|
5 | 223 |
|
|
0 commit comments