The Rust Team has unveiled Rust 1.83, the latest update to the memory-safe and thread-safe programming language, which introduces significant enhancements for code running in const contexts. These updates, announced on November 28, expand the capabilities of Rust’s const evaluation, allowing developers more flexibility in what they can express at compile time. Additionally, the Rust Team revealed that the upcoming Rust 2024 edition will bring backwards-incompatible features, such as gen blocks, signaling further evolution in the language.
For those already using a previous edition of Rust, the update to version 1.83 can be easily applied through rustup by running the command rustup update stable
. This ensures that developers can quickly take advantage of the new features without needing to manually manage their Rust installation.
Rust 1.83 introduces notable extensions to const contexts, which refer to sections of code that the compiler evaluates at compile time. These contexts include the initialization of const
and static
items, array lengths, enum discriminant values, const generic arguments, and functions that can be called within const contexts (known as const fn
). One of the major changes in this update is the lifting of the restriction that previously prevented static items from being referenced within const contexts, except for the initializer expression of a static item.
While the new updates significantly broaden what can be done within const contexts, the Rust Team has clarified that there are still some limitations to ensure that constants remain truly constant. For instance, it remains prohibited to read the value of a mutable or interior mutable static in const contexts, and a constant cannot reference mutable or interior mutable statics in its final value. However, the update allows for greater flexibility, including the ability for constants to evaluate to raw pointers pointing to mutable or interior mutable statics. Additionally, mutable references and mutable raw pointers are now supported within const contexts, opening up new possibilities for developers working with Rust’s powerful compile-time capabilities.