Email me

Rust versions / 1.28

Rust release · Aug 2, 2018

Rust 1.28: what's new, what was stabilized

Short answerRust 1.28 was released on Aug 2, 2018: 29 newly stable APIs (Iterator::step_by, Path::ancestors, SystemTime::UNIX_EPOCH, alloc::GlobalAlloc, ...); 1 compatibility note that can affect existing code.

Aug 2, 2018release date
0language stabilizations
29APIs stabilized
-new edition

← Rust 1.27All versionsRust 1.29 →

29 APIs stabilized

Iterator::step_by, Path::ancestors, SystemTime::UNIX_EPOCH, alloc::GlobalAlloc, alloc::Layout, alloc::LayoutErr, alloc::System, alloc::alloc, alloc::alloc_zeroed, alloc::dealloc, alloc::realloc, alloc::handle_alloc_error, btree_map::Entry::or_default, fmt::Alignment, hash_map::Entry::or_default, iter::repeat_with, num::NonZeroUsize, num::NonZeroU128, num::NonZeroU16, num::NonZeroU32, num::NonZeroU64, num::NonZeroU8, ops::RangeBounds, slice::SliceIndex, slice::from_mut, slice::from_ref, {Any + Send + Sync}::downcast_mut, {Any + Send + Sync}::downcast_ref, {Any + Send + Sync}::is

Can it break my build?

The release lists these compatibility notes. Most only affect rare code, but read them before you raise your toolchain in CI:

  • [Rust will consider trait objects with duplicated constraints to be the same

Use it

rustup update stable        # get the newest release
rustup install 1.28          # or exactly this one
rustup override set 1.28     # pin a project to it

To require at least this version from users of your crate, set rust-version = "1.28" under [package] in Cargo.toml. Cargo then refuses to build it on older compilers with a clear message, and with resolver 3 (the default on the 2024 edition, Rust 1.85+) it also prefers dependency versions that support it.

Full release notes

Language

  • [The #[repr(transparent)] attribute is now stable.][51562] This attribute allows a Rust newtype wrapper (struct NewType<T>(T);) to be represented as the inner type across Foreign Function Interface (FFI) boundaries.
  • [The keywords pure, sizeof, alignof, and offsetof have been unreserved and can now be used as identifiers.][51196]
  • [The GlobalAlloc trait and #[global_allocator] attribute are now stable.][51241] This will allow users to specify a global allocator for their program.
  • [Unit test functions marked with the #[test] attribute can now return Result<(), E: Debug> in addition to ().][51298]
  • [The lifetime specifier for macro_rules! is now stable.][50385] This allows macros to easily target lifetimes.

Compiler

  • [The s and z optimisation levels are now stable.][50265] These optimisations prioritise making smaller binary sizes. z is the same as s with the exception that it does not vectorise loops, which typically results in an even smaller binary.
  • [The short error format is now stable.][49546] Specified with --error-format=short this option will provide a more compressed output of rust error messages.
  • [Added a lint warning when you have duplicated macro_exports.][50143]
  • [Reduced the number of allocations in the macro parser.][50855] This can improve compile times of macro heavy crates on average by 5%.

Libraries

  • [Implemented Default for &mut str.][51306]
  • [Implemented From<bool> for all integer and unsigned number types.][50554]
  • [Implemented Extend for ().][50234]
  • [The Debug implementation of time::Duration should now be more easily human readable.][50364] Previously a Duration of one second would printed as Duration { secs: 1, nanos: 0 } and will now be printed as 1s.
  • [Implemented From<&String> for Cow<str>, From<&Vec<T>> for Cow<[T]>, From<Cow<CStr>> for CString, From<CString>, From<CStr>, From<&CString> for Cow<CStr>, From<OsString>, From<OsStr>, From<&OsString> for Cow<OsStr>, From<&PathBuf> for Cow<Path>, and From<Cow<Path>> for PathBuf.][50170]
  • [Implemented Shl and Shr for Wrapping<u128> and Wrapping<i128>.][50465]
  • [DirEntry::metadata now uses fstatat instead of lstat when possible.][51050] This can provide up to a 40% speed increase.
  • [Improved error messages when using format!.][50610]

Stabilized APIs

  • [Iterator::step_by]
  • [Path::ancestors]
  • [SystemTime::UNIX_EPOCH]
  • [alloc::GlobalAlloc]
  • [alloc::Layout]
  • [alloc::LayoutErr]
  • [alloc::System]
  • [alloc::alloc]
  • [alloc::alloc_zeroed]
  • [alloc::dealloc]
  • [alloc::realloc]
  • [alloc::handle_alloc_error]
  • [btree_map::Entry::or_default]
  • [fmt::Alignment]
  • [hash_map::Entry::or_default]
  • [iter::repeat_with]
  • [num::NonZeroUsize]
  • [num::NonZeroU128]
  • [num::NonZeroU16]
  • [num::NonZeroU32]
  • [num::NonZeroU64]
  • [num::NonZeroU8]
  • [ops::RangeBounds]
  • [slice::SliceIndex]
  • [slice::from_mut]
  • [slice::from_ref]
  • [{Any + Send + Sync}::downcast_mut]
  • [{Any + Send + Sync}::downcast_ref]
  • [{Any + Send + Sync}::is]

Cargo

  • [Cargo will now no longer allow you to publish crates with build scripts that modify the src directory.][cargo/5584] The src directory in a crate should be considered to be immutable.

Misc

  • [The suggestion_applicability field in rustc's json output is now stable.][50486] This will allow dev tools to check whether a code suggestion would apply to them.

Compatibility Notes

impl Trait + Send { fn test(&self) { println!("one"); } //~ ERROR duplicate definitions with name test }

impl Trait + Send + Send { fn test(&self) { println!("two"); } } ```

Release notes from the Rust project's RELEASES.md (MIT or Apache-2.0); summaries above are ours.

← Rust 1.27All versionsRust 1.29 →

Up next

Next releaseRust 1.29Released Sep 13, 2018.Read it next →

Did this answer your question?

Get the receipts by email.

What my AI agents tried this week, with the real numbers: what worked, what flopped, what made money. One email when there is something worth reading.

No spam, never sold. Every email has a one-click unsubscribe.

Popular in the shop

All 124 tools →

Browse: Bundles and kitsHome, family and schoolMoney and businessAI toolsSports and fitnessMaking and hobbiesFood and drinkIndie dev and launchTrading and quant

Free: Landing page teardown iPhone app cost calculator LLM API cost calculator Paid online: $49 Launch Check App builds Articles FAQ