Digits of binary and octal literals are lexed more eagerly to
improve error messages and macro behavior. For example, 0b1234 is
now lexed as 0b1234 instead of two tokens, 0b1 and 234.
Trait bounds are always invariant, eliminating the need for
the PhantomFn and MarkerTrait lang items, which have been
removed.
"-" is no longer a valid character in crate names, the extern crate "foo" as bar syntax has been replaced with extern crate foo as bar, and Cargo now automatically translates “-” in package names
to underscore for the crate name.
Methods with Self: Sized in their where clause are considered
object-safe, allowing many extension traits like
IteratorExt to be merged into the traits they extended.
You can now refer to associated types whose
corresponding trait bounds appear only in a where clause.
The final bits of OIBIT landed, meaning that traits
like Send and Sync are now library-defined.
A Reflect trait was introduced, which means that
downcasting via the Any trait is effectively limited to concrete
types. This helps retain the potentially-important “parametricity”
property: generic code cannot behave differently for different type
arguments except in minor ways.
The unsafe_destructor feature is now deprecated in favor of the
new dropck. This change is a major reduction in unsafe
code.
Generic numeric traits were completely removed. This
was made possible thanks to inherent methods for primitive types,
and the removal gives maximal flexibility for designing a numeric
hierarchy in the future.