← Back to all releases

Rust 1.37.0

Released on August 15, 2019

What's Changed

  • #[must_use] will now warn if the type is contained in a [tuple][61100],
  • [You can now use the cfg and cfg_attr attributes on
  • [You can now use enum variants through type alias.][61682] e.g. You can
  • [You can now use _ as an identifier for consts.][61347] e.g. You can write
  • [You can now use #[repr(align(X)] on enums.][61229]
  • [The ? Kleene macro operator is now available in the

  • [You can now enable Profile-Guided Optimization with the -C profile-generate
  • [The rust-lldb wrapper script should now work again.][61827]

  • [mem::MaybeUninit is now ABI-compatible with T.][61802]
  • [BufReader::buffer]
  • [BufWriter::buffer]
  • [Cell::from_mut]
  • [Cell<[T]>::as_slice_of_cells][Cell::as_slice_of_cells]
  • [DoubleEndedIterator::nth_back]
  • [Option::xor]
  • [Wrapping::reverse_bits]
  • [i128::reverse_bits]
  • [i16::reverse_bits]
  • [i32::reverse_bits]
  • [i64::reverse_bits]
  • [i8::reverse_bits]
  • [isize::reverse_bits]
  • [slice::copy_within]
  • [u128::reverse_bits]
  • [u16::reverse_bits]
  • [u32::reverse_bits]
  • [u64::reverse_bits]
  • [u8::reverse_bits]
  • [usize::reverse_bits]

  • [Cargo.lock files are now included by default when publishing executable crates
  • [You can now specify default-run="foo" in [package] to specify the

  • [Using ... for inclusive range patterns will now warn by default.][61342]
  • [Using a trait object without the dyn will now warn by default.][61203]
Full Changelog

Language

--------

- #[must_use] will now warn if the type is contained in a [tuple][61100],

[Box][62228], or an [array][62235] and unused.

- [You can now use the cfg and cfg_attr attributes on

generic parameters.][61547]

- [You can now use enum variants through type alias.][61682] e.g. You can

write the following:

  type MyOption = Option;

fn increment_or_zero(x: MyOption) -> u8 {

match x {

MyOption::Some(y) => y + 1,

MyOption::None => 0,

}

}

- [You can now use _ as an identifier for consts.][61347] e.g. You can write

const _: u32 = 5;.

- [You can now use #[repr(align(X)] on enums.][61229]

- [The ? Kleene macro operator is now available in the

2015 edition.][60932]

Compiler

--------

- [You can now enable Profile-Guided Optimization with the -C profile-generate

and -C profile-use flags.][61268] For more information on how to use profile

guided optimization, please refer to the [rustc book][rustc-book-pgo].

- [The rust-lldb wrapper script should now work again.][61827]

Libraries

---------

- [mem::MaybeUninit is now ABI-compatible with T.][61802]

Stabilized APIs

---------------

- [BufReader::buffer]

- [BufWriter::buffer]

- [Cell::from_mut]

- [Cell<[T]>::as_slice_of_cells][Cell::as_slice_of_cells]

- [DoubleEndedIterator::nth_back]

- [Option::xor]

- [Wrapping::reverse_bits]

- [i128::reverse_bits]

- [i16::reverse_bits]

- [i32::reverse_bits]

- [i64::reverse_bits]

- [i8::reverse_bits]

- [isize::reverse_bits]

- [slice::copy_within]

- [u128::reverse_bits]

- [u16::reverse_bits]

- [u32::reverse_bits]

- [u64::reverse_bits]

- [u8::reverse_bits]

- [usize::reverse_bits]

Cargo

-----

- [Cargo.lock files are now included by default when publishing executable crates

with executables.][cargo/7026]

- [You can now specify default-run="foo" in [package] to specify the

default executable to use for cargo run.][cargo/7056]

Misc

----

Compatibility Notes

-------------------

- [Using ... for inclusive range patterns will now warn by default.][61342]

Please transition your code to using the ..= syntax for inclusive

ranges instead.

- [Using a trait object without the dyn will now warn by default.][61203]

Please transition your code to use dyn Trait for trait objects instead.

[62228]: https://github.com/rust-lang/rust/pull/62228/

[62235]: https://github.com/rust-lang/rust/pull/62235/

[61802]: https://github.com/rust-lang/rust/pull/61802/

[61827]: https://github.com/rust-lang/rust/pull/61827/

[61547]: https://github.com/rust-lang/rust/pull/61547/

[61682]: https://github.com/rust-lang/rust/pull/61682/

[61268]: https://github.com/rust-lang/rust/pull/61268/

[61342]: https://github.com/rust-lang/rust/pull/61342/

[61347]: https://github.com/rust-lang/rust/pull/61347/

[61100]: https://github.com/rust-lang/rust/pull/61100/

[61203]: https://github.com/rust-lang/rust/pull/61203/

[61229]: https://github.com/rust-lang/rust/pull/61229/

[60932]: https://github.com/rust-lang/rust/pull/60932/

[cargo/7026]: https://github.com/rust-lang/cargo/pull/7026/

[cargo/7056]: https://github.com/rust-lang/cargo/pull/7056/

[BufReader::buffer]: https://doc.rust-lang.org/std/io/struct.BufReader.html#method.buffer

[BufWriter::buffer]: https://doc.rust-lang.org/std/io/struct.BufWriter.html#method.buffer

[Cell::from_mut]: https://doc.rust-lang.org/std/cell/struct.Cell.html#method.from_mut

[Cell::as_slice_of_cells]: https://doc.rust-lang.org/std/cell/struct.Cell.html#method.as_slice_of_cells

[DoubleEndedIterator::nth_back]: https://doc.rust-lang.org/std/iter/trait.DoubleEndedIterator.html#method.nth_back

[Option::xor]: https://doc.rust-lang.org/std/option/enum.Option.html#method.xor

[Wrapping::reverse_bits]: https://doc.rust-lang.org/std/num/struct.Wrapping.html#method.reverse_bits

[i128::reverse_bits]: https://doc.rust-lang.org/std/primitive.i128.html#method.reverse_bits

[i16::reverse_bits]: https://doc.rust-lang.org/std/primitive.i16.html#method.reverse_bits

[i32::reverse_bits]: https://doc.rust-lang.org/std/primitive.i32.html#method.reverse_bits

[i64::reverse_bits]: https://doc.rust-lang.org/std/primitive.i64.html#method.reverse_bits

[i8::reverse_bits]: https://doc.rust-lang.org/std/primitive.i8.html#method.reverse_bits

[isize::reverse_bits]: https://doc.rust-lang.org/std/primitive.isize.html#method.reverse_bits

[slice::copy_within]: https://doc.rust-lang.org/std/primitive.slice.html#method.copy_within

[u128::reverse_bits]: https://doc.rust-lang.org/std/primitive.u128.html#method.reverse_bits

[u16::reverse_bits]: https://doc.rust-lang.org/std/primitive.u16.html#method.reverse_bits

[u32::reverse_bits]: https://doc.rust-lang.org/std/primitive.u32.html#method.reverse_bits

[u64::reverse_bits]: https://doc.rust-lang.org/std/primitive.u64.html#method.reverse_bits

[u8::reverse_bits]: https://doc.rust-lang.org/std/primitive.u8.html#method.reverse_bits

[usize::reverse_bits]: https://doc.rust-lang.org/std/primitive.usize.html#method.reverse_bits

[rustc-book-pgo]: https://doc.rust-lang.org/rustc/profile-guided-optimization.html