rust-core-language-versions
Ecosystem identity skill for Rust : editions, channels, MSRV, version matrix. This is the conceptual map. For toolchain mechanics (rustup, cargo, rustc flags) see [[rust-core-toolchain]]. For edition-2024 syntactic changes see [[rust-syntax-edition-2024]]. For Cargo.toml details including [lints] and rust-version mechanics see [[rust-impl-cargo-project]].
Quick Reference
Identity in one paragraph
Rust is a statically-typed, ahead-of-time-compiled systems language. No garbage collector. Memory safety enforced by ownership at compile time. Zero-cost abstractions via monomorphization. Six-week release cadence on the stable channel. Editions (2015, 2018, 2021, 2024) gate opt-in language evolution without breaking older crates. Current stable target for this skill package : Rust 1.85+, edition 2024.
Channel matrix
| Channel |
Cadence |
Purpose |
Use when |
| stable |
6 weeks |
Production |
ALWAYS for shipping code |
| beta |
6 weeks |
Last-mile stabilization candidate |
Verifying your crate before a Rust release |
| nightly |
Daily |
New unstable features |
A required feature is #![feature(...)]-gated |
Edition matrix
| Edition |
Year |
Required Rust |
Notable shifts |
Default for cargo new |
| 2015 |
2015 |
1.0.0 |
Original |
never (legacy only) |
| 2018 |
Dec 2018 |
1.31.0 |
use paths, NLL, async/await reserved |
no |
| 2021 |
Oct 2021 |
1.56.0 |
Disjoint closure capture, IntoIterator for arrays, panic macro consistency |
no |
| 2024 |
Feb 2025 |
1.85.0 |
RPIT lifetime capture, unsafe extern, unsafe(no_mangle), never-type fallback !, expr matcher includes const{} + _, resolver 3 default |
YES (since 1.85) |
Version matrix 1.65 to 1.87 (one row per release, condensed)
| Version |
Release |
Stabilizations of note |
| 1.65 |
Nov 2022 |
GATs (generic associated types), let else, generic associated lifetimes |
| 1.66 |
Dec 2022 |
Explicit discriminants on enums with fields, core::hint::black_box |
| 1.67 |
Jan 2023 |
{integer}::ilog, MutexGuard is Sync when T: Sync |
| 1.68 |
Mar 2023 |
Cargo sparse registry stable |
| 1.69 |
Apr 2023 |
Cargo --keep-going, debug-assert improvements |
| 1.70 |
Jun 2023 |
OnceCell/OnceLock, IsTerminal, sparse registry default |
| 1.71 |
Jul 2023 |
C-unwind ABI, Cell::swap cross-type |
| 1.72 |
Aug 2023 |
target-applies-to-host cargo, OnceCell::wait reservation |
| 1.73 |
Oct 2023 |
LocalKey::cell for Cell/RefCell, better panic output |
| 1.74 |
Nov 2023 |
[lints] table in Cargo.toml, Option::as_slice |
| 1.75 |
Dec 2023 |
AFIT (async-fn-in-trait), RPITIT (return-position impl Trait in trait) |
| 1.76 |
Feb 2024 |
Arc<T>::unwrap_or_clone, Vec::as_chunks |
| 1.77 |
Mar 2024 |
C-string literals c"...", offset-of macro |
| 1.78 |
May 2024 |
#[diagnostic::on_unimplemented], deterministic realignment for pointer::is_aligned |
| 1.79 |
Jun 2024 |
Inline const blocks const { ... }, bounds in associated type position |
| 1.80 |
Jul 2024 |
LazyCell, LazyLock, exclusive range patterns, --check-cfg |
| 1.81 |
Sep 2024 |
core::error::Error in no_std, #[expect(lint)], lint reasons, fs::exists |
| 1.82 |
Oct 2024 |
Precise capturing + use<..>, native &raw const/&raw mut, #[unsafe(no_mangle)] syntax, safe items in unsafe extern |
| 1.83 |
Nov 2024 |
References to statics in const contexts, Option::get_or_insert_default, Waker::new |
| 1.84 |
Jan 2025 |
MSRV-aware Cargo resolver (opt-in via resolver.incompatible-rust-versions), new trait solver for coherence, strict-provenance APIs (with_addr, map_addr, expose_provenance, with_exposed_provenance), isqrt, Pin::as_deref_mut |
| 1.85 |
Feb 2025 |
Edition 2024 stable, async closures (async || { ... }), #[diagnostic::do_not_recommend], FromIterator/Extend up to 12-tuples |
| 1.86 |
Apr 2025 |
Trait upcasting (dyn Sub to dyn Super), #[target_feature] on safe fns, get_disjoint_mut for slices and HashMap, Vec::pop_if |
| 1.87 |
May 2025 |
asm! label operands (jumps to Rust code), anonymous pipes std::io::pipe(), precise capturing in trait definitions, Vec::extract_if, OsStr::display |
Decision Trees
"Which edition should I use?"
Is this a new crate?
├── YES → ALWAYS edition 2024 (default since cargo 1.85). Set rust-version = "1.85".
└── NO → Existing crate?
├── On 2015/2018/2021 with no migration cost → keep until you need a 2024 feature.
├── Want async closures, never-fallback `!`, `unsafe extern` ergonomics → migrate.
└── Migration command : `cargo fix --edition` then bump `edition = "2024"` in Cargo.toml.
NEVER edit edition = "..." manually before running cargo fix --edition. The fix command rewrites code to be valid in both old and new editions, then the manual edit is just the field bump. Manual bump without cargo fix produces compile errors that look like language bugs but are migration debt.
"What channel should I use?"
Is feature stable on current stable?
├── YES → ALWAYS stable.
└── NO → Is the feature gated behind a `#![feature(...)]` attribute?
├── YES, and the crate is yours alone → nightly is acceptable, document the dependency.
└── YES, and the crate is published → NEVER nightly. Wait for stabilization or design around.
NEVER publish to crates.io a crate that requires nightly. Consumers cannot use it on their stable toolchain without breaking their build.
"How do I set MSRV?"
Are you a library author?
├── YES → Pick a target MSRV behind current stable (typically N-6 weeks to N-12 months).
│ Set rust-version = "1.<N>" in [package]. Test in CI with that toolchain.
│ Bumping MSRV is a minor-version bump under semver convention (NOT major).
└── NO (binary or internal app) → Set rust-version to the toolchain you actually use.
ALWAYS pin via rust-toolchain.toml as well so contributors match.
ALWAYS set rust-version when publishing. Without it, dependency resolution may pick crate versions that require a newer Rust than your stated MSRV, and the failure surfaces at someone else's cargo build.
"Do I need the MSRV-aware resolver?"
Cargo version >= 1.84 AND `rust-version` is set?
├── YES → Opt in by setting `resolver.incompatible-rust-versions = "fallback"`
│ in .cargo/config.toml. Cargo then prefers older crate versions that satisfy MSRV
│ over newer versions that require a higher Rust.
└── NO → Default resolver picks newest semver-compatible crate, may break your MSRV silently.
The MSRV-aware resolver is OPT-IN in 1.84. NEVER assume it is on by default. For published libraries with a stated MSRV, ALWAYS enable it.
"Which version stabilized feature X?"
Use the version matrix above. If the feature is not listed there, consult the release blog index : https://blog.rust-lang.org/ and search by version. ALWAYS cite the release date when recommending a feature : "available since 1.75 (Dec 2023)" not just "recent Rust".
Patterns
Stability commitment in practice
The stable channel guarantees that code compiling on Rust 1.N continues to compile on Rust 1.N+M for any M >= 0, within the same edition. The escape hatch is the edition mechanism : opting into a new edition is the only way to receive breaking changes, and that opt-in is per-crate via edition = "2024" in Cargo.toml. Editions never break dependency interop : a 2024-edition crate can depend on a 2015-edition crate and vice versa.
Soundness fixes are the documented exception. If a previously-compiling program was unsound, the compiler may begin to reject it in a future stable release. This is rare and announced.
rust-version field semantics
[package]
name = "my-crate"
version = "0.1.0"
edition = "2024"
rust-version = "1.85"
rust-version declares the minimum Rust the crate is guaranteed to compile on. Three effects :
cargo build and cargo publish reject the crate if the active toolchain is below the declared MSRV.
- With the MSRV-aware resolver enabled (1.84+), dependency selection respects this floor.
- crates.io shows the MSRV badge on the crate page.
ALWAYS bump rust-version in lockstep with using a newer-Rust-only feature in your code. NEVER ship code that uses 1.86 features with rust-version = "1.85".
Channel switching
# Install and use stable (default)
rustup default stable
# Install and use a specific stable version
rustup toolchain install 1.85.0
rustup default 1.85.0
# Temporarily use nightly for one invocation
rustup run nightly cargo build
# Pin per-project via rust-toolchain.toml at repo root
# [toolchain]
# channel = "1.85.0"
# components = ["rustfmt", "clippy", "rust-src"]
rust-toolchain.toml overrides rustup default for any cargo invocation under the project tree. ALWAYS commit rust-toolchain.toml for reproducible builds across contributors.
Edition migration workflow
# 1. Ensure the crate compiles cleanly on its current edition
cargo build --all-targets
cargo test
# 2. Run the automated edition migration
cargo fix --edition
# 3. Manually bump the edition in Cargo.toml
# edition = "2021" -> edition = "2024"
# 4. Verify
cargo build --all-targets
cargo test
# 5. Apply edition-aware idiom fixes (optional)
cargo fix --edition-idioms
cargo fix --edition only rewrites code to remain valid across the edition boundary. The manual bump is the second step. NEVER bump first and rely on the compiler to surface migration errors : the error messages are not designed as a migration guide.
Identifying "what version added X?"
ALWAYS use the release blog as primary source : https://blog.rust-lang.org/ and the version-specific URL pattern https://blog.rust-lang.org/<YEAR>/<MM>/<DD>/Rust-1.<N>.0/. The "Stable features" section lists every API and language stabilization in that release. The RELEASES.md file in the rust-lang/rust repository is the authoritative changelog.
NEVER guess a stabilization version from memory. Always verify against the release blog before recommending a feature with a version annotation.
Telling stable from nightly features
// Stable feature : compiles on stable Rust.
let x: u32 = 0;
let _y = x.isqrt(); // stable since 1.84
// Nightly-only feature : would require `#![feature(...)]`.
// #![feature(generic_const_exprs)] // still nightly at 1.87
If a code example needs #![feature(...)] at the crate root, it is nightly-only. ALWAYS warn the user that the example does not compile on stable.
Reference Links
references/methods.md : full edition mechanics, MSRV resolver flags, channel commands, complete cargo fix --edition workflow, RELEASES.md pointer.
references/examples.md : worked Cargo.toml examples per edition, rust-toolchain.toml examples, MSRV-aware resolver config, edition migration log.
references/anti-patterns.md : real failure modes (manual edition bump without cargo fix, mixing stable and nightly in one project, MSRV without rust-version, version-claim without source).
Cross-skill references
[[rust-syntax-edition-2024]] : the 13 language changes in edition 2024 with code examples.
[[rust-core-toolchain]] : rustup, cargo, rustc, clippy, rustfmt mechanics.
[[rust-impl-cargo-project]] : Cargo.toml complete reference including [lints] and workspace inheritance.
Source URLs (verified 2026-05-19)
1---2name: rust-core-language-versions3description: Use when the user asks about Rust editions (2015/2018/2021/2024), MSRV, the version matrix, channels (stable/beta/nightly), what stabilized in which release, or how Rust evolves. Prevents writing pre-2024 idioms in edition-2024 code, recommending unstabilised features, or mismatching `rust-version` with required features. Covers: edition system, stability commitment, MSRV-aware resolver (1.84), channel model, Rust 1.65 to 1.87 stabilizations (GATs, AFIT/RPITIT, LazyLock, precise capturing, edition 2024 stable, trait upcasting, asm! jumps), `cargo fix --edition` migration. Keywords: edition 2024, MSRV, rust-version, version matrix, what version added X, when did Y stabilize, cargo fix edition, channel stable beta nightly, rustup toolchain, "which Rust version", "what's new", semver, no-breakage guarantee, GATs 1.65, AFIT 1.75, RPITIT, async closures, trait upcasting 1.86, precise capturing 1.87, strict provenance 1.84, MSRV resolver, "how do I upgrade", "should I bump edition", "what changed".4license: MIT5---67# rust-core-language-versions89Ecosystem identity skill for Rust : editions, channels, MSRV, version matrix. This is the conceptual map. For toolchain mechanics (rustup, cargo, rustc flags) see `[[rust-core-toolchain]]`. For edition-2024 syntactic changes see `[[rust-syntax-edition-2024]]`. For Cargo.toml details including `[lints]` and `rust-version` mechanics see `[[rust-impl-cargo-project]]`.1011## Quick Reference1213### Identity in one paragraph1415Rust is a statically-typed, ahead-of-time-compiled systems language. No garbage collector. Memory safety enforced by ownership at compile time. Zero-cost abstractions via monomorphization. Six-week release cadence on the stable channel. Editions (2015, 2018, 2021, 2024) gate opt-in language evolution without breaking older crates. Current stable target for this skill package : Rust 1.85+, edition 2024.1617### Channel matrix1819| Channel | Cadence | Purpose | Use when |20|---|---|---|---|21| stable | 6 weeks | Production | ALWAYS for shipping code |22| beta | 6 weeks | Last-mile stabilization candidate | Verifying your crate before a Rust release |23| nightly | Daily | New unstable features | A required feature is `#![feature(...)]`-gated |2425### Edition matrix2627| Edition | Year | Required Rust | Notable shifts | Default for `cargo new` |28|---|---|---|---|---|29| 2015 | 2015 | 1.0.0 | Original | never (legacy only) |30| 2018 | Dec 2018 | 1.31.0 | `use` paths, NLL, `async`/`await` reserved | no |31| 2021 | Oct 2021 | 1.56.0 | Disjoint closure capture, `IntoIterator` for arrays, panic macro consistency | no |32| 2024 | Feb 2025 | 1.85.0 | RPIT lifetime capture, `unsafe extern`, `unsafe(no_mangle)`, never-type fallback `!`, `expr` matcher includes `const{}` + `_`, resolver 3 default | YES (since 1.85) |3334### Version matrix 1.65 to 1.87 (one row per release, condensed)3536| Version | Release | Stabilizations of note |37|---|---|---|38| 1.65 | Nov 2022 | GATs (generic associated types), `let else`, generic associated lifetimes |39| 1.66 | Dec 2022 | Explicit discriminants on enums with fields, `core::hint::black_box` |40| 1.67 | Jan 2023 | `{integer}::ilog`, `MutexGuard` is `Sync` when `T: Sync` |41| 1.68 | Mar 2023 | `Cargo` sparse registry stable |42| 1.69 | Apr 2023 | Cargo `--keep-going`, debug-assert improvements |43| 1.70 | Jun 2023 | `OnceCell`/`OnceLock`, `IsTerminal`, sparse registry default |44| 1.71 | Jul 2023 | C-unwind ABI, `Cell::swap` cross-type |45| 1.72 | Aug 2023 | `target-applies-to-host` cargo, `OnceCell::wait` reservation |46| 1.73 | Oct 2023 | `LocalKey::cell` for `Cell`/`RefCell`, better panic output |47| 1.74 | Nov 2023 | `[lints]` table in `Cargo.toml`, `Option::as_slice` |48| 1.75 | Dec 2023 | **AFIT** (async-fn-in-trait), **RPITIT** (return-position impl Trait in trait) |49| 1.76 | Feb 2024 | `Arc<T>::unwrap_or_clone`, `Vec::as_chunks` |50| 1.77 | Mar 2024 | C-string literals `c"..."`, offset-of macro |51| 1.78 | May 2024 | `#[diagnostic::on_unimplemented]`, deterministic realignment for `pointer::is_aligned` |52| 1.79 | Jun 2024 | Inline const blocks `const { ... }`, bounds in associated type position |53| 1.80 | Jul 2024 | `LazyCell`, **`LazyLock`**, exclusive range patterns, `--check-cfg` |54| 1.81 | Sep 2024 | `core::error::Error` in `no_std`, `#[expect(lint)]`, lint reasons, `fs::exists` |55| 1.82 | Oct 2024 | Precise capturing `+ use<..>`, native `&raw const`/`&raw mut`, `#[unsafe(no_mangle)]` syntax, safe items in `unsafe extern` |56| 1.83 | Nov 2024 | References to statics in const contexts, `Option::get_or_insert_default`, `Waker::new` |57| 1.84 | Jan 2025 | **MSRV-aware Cargo resolver** (opt-in via `resolver.incompatible-rust-versions`), new trait solver for coherence, strict-provenance APIs (`with_addr`, `map_addr`, `expose_provenance`, `with_exposed_provenance`), `isqrt`, `Pin::as_deref_mut` |58| 1.85 | Feb 2025 | **Edition 2024 stable**, async closures (`async \|\| { ... }`), `#[diagnostic::do_not_recommend]`, `FromIterator`/`Extend` up to 12-tuples |59| 1.86 | Apr 2025 | **Trait upcasting** (`dyn Sub` to `dyn Super`), `#[target_feature]` on safe fns, `get_disjoint_mut` for slices and `HashMap`, `Vec::pop_if` |60| 1.87 | May 2025 | `asm!` label operands (jumps to Rust code), anonymous pipes `std::io::pipe()`, precise capturing in trait definitions, `Vec::extract_if`, `OsStr::display` |6162## Decision Trees6364### "Which edition should I use?"6566```67Is this a new crate?68├── YES → ALWAYS edition 2024 (default since cargo 1.85). Set rust-version = "1.85".69└── NO → Existing crate?70 ├── On 2015/2018/2021 with no migration cost → keep until you need a 2024 feature.71 ├── Want async closures, never-fallback `!`, `unsafe extern` ergonomics → migrate.72 └── Migration command : `cargo fix --edition` then bump `edition = "2024"` in Cargo.toml.73```7475NEVER edit `edition = "..."` manually before running `cargo fix --edition`. The fix command rewrites code to be valid in both old and new editions, then the manual edit is just the field bump. Manual bump without `cargo fix` produces compile errors that look like language bugs but are migration debt.7677### "What channel should I use?"7879```80Is feature stable on current stable?81├── YES → ALWAYS stable.82└── NO → Is the feature gated behind a `#![feature(...)]` attribute?83 ├── YES, and the crate is yours alone → nightly is acceptable, document the dependency.84 └── YES, and the crate is published → NEVER nightly. Wait for stabilization or design around.85```8687NEVER publish to crates.io a crate that requires nightly. Consumers cannot use it on their stable toolchain without breaking their build.8889### "How do I set MSRV?"9091```92Are you a library author?93├── YES → Pick a target MSRV behind current stable (typically N-6 weeks to N-12 months).94│ Set rust-version = "1.<N>" in [package]. Test in CI with that toolchain.95│ Bumping MSRV is a minor-version bump under semver convention (NOT major).96└── NO (binary or internal app) → Set rust-version to the toolchain you actually use.97 ALWAYS pin via rust-toolchain.toml as well so contributors match.98```99100ALWAYS set `rust-version` when publishing. Without it, dependency resolution may pick crate versions that require a newer Rust than your stated MSRV, and the failure surfaces at someone else's `cargo build`.101102### "Do I need the MSRV-aware resolver?"103104```105Cargo version >= 1.84 AND `rust-version` is set?106├── YES → Opt in by setting `resolver.incompatible-rust-versions = "fallback"`107│ in .cargo/config.toml. Cargo then prefers older crate versions that satisfy MSRV108│ over newer versions that require a higher Rust.109└── NO → Default resolver picks newest semver-compatible crate, may break your MSRV silently.110```111112The MSRV-aware resolver is OPT-IN in 1.84. NEVER assume it is on by default. For published libraries with a stated MSRV, ALWAYS enable it.113114### "Which version stabilized feature X?"115116Use the version matrix above. If the feature is not listed there, consult the release blog index : https://blog.rust-lang.org/ and search by version. ALWAYS cite the release date when recommending a feature : "available since 1.75 (Dec 2023)" not just "recent Rust".117118## Patterns119120### Stability commitment in practice121122The stable channel guarantees that code compiling on Rust 1.N continues to compile on Rust 1.N+M for any M >= 0, within the same edition. The escape hatch is the edition mechanism : opting into a new edition is the only way to receive breaking changes, and that opt-in is per-crate via `edition = "2024"` in `Cargo.toml`. Editions never break dependency interop : a 2024-edition crate can depend on a 2015-edition crate and vice versa.123124Soundness fixes are the documented exception. If a previously-compiling program was unsound, the compiler may begin to reject it in a future stable release. This is rare and announced.125126### `rust-version` field semantics127128```toml129[package]130name = "my-crate"131version = "0.1.0"132edition = "2024"133rust-version = "1.85"134```135136`rust-version` declares the minimum Rust the crate is guaranteed to compile on. Three effects :1371381. `cargo build` and `cargo publish` reject the crate if the active toolchain is below the declared MSRV.1392. With the MSRV-aware resolver enabled (1.84+), dependency selection respects this floor.1403. crates.io shows the MSRV badge on the crate page.141142ALWAYS bump `rust-version` in lockstep with using a newer-Rust-only feature in your code. NEVER ship code that uses 1.86 features with `rust-version = "1.85"`.143144### Channel switching145146```bash147# Install and use stable (default)148rustup default stable149150# Install and use a specific stable version151rustup toolchain install 1.85.0152rustup default 1.85.0153154# Temporarily use nightly for one invocation155rustup run nightly cargo build156157# Pin per-project via rust-toolchain.toml at repo root158# [toolchain]159# channel = "1.85.0"160# components = ["rustfmt", "clippy", "rust-src"]161```162163`rust-toolchain.toml` overrides `rustup default` for any cargo invocation under the project tree. ALWAYS commit `rust-toolchain.toml` for reproducible builds across contributors.164165### Edition migration workflow166167```bash168# 1. Ensure the crate compiles cleanly on its current edition169cargo build --all-targets170cargo test171172# 2. Run the automated edition migration173cargo fix --edition174175# 3. Manually bump the edition in Cargo.toml176# edition = "2021" -> edition = "2024"177178# 4. Verify179cargo build --all-targets180cargo test181182# 5. Apply edition-aware idiom fixes (optional)183cargo fix --edition-idioms184```185186`cargo fix --edition` only rewrites code to remain valid across the edition boundary. The manual bump is the second step. NEVER bump first and rely on the compiler to surface migration errors : the error messages are not designed as a migration guide.187188### Identifying "what version added X?"189190ALWAYS use the release blog as primary source : https://blog.rust-lang.org/ and the version-specific URL pattern `https://blog.rust-lang.org/<YEAR>/<MM>/<DD>/Rust-1.<N>.0/`. The "Stable features" section lists every API and language stabilization in that release. The `RELEASES.md` file in the rust-lang/rust repository is the authoritative changelog.191192NEVER guess a stabilization version from memory. Always verify against the release blog before recommending a feature with a version annotation.193194### Telling stable from nightly features195196```rust197// Stable feature : compiles on stable Rust.198let x: u32 = 0;199let _y = x.isqrt(); // stable since 1.84200201// Nightly-only feature : would require `#![feature(...)]`.202// #![feature(generic_const_exprs)] // still nightly at 1.87203```204205If a code example needs `#![feature(...)]` at the crate root, it is nightly-only. ALWAYS warn the user that the example does not compile on stable.206207## Reference Links208209- `references/methods.md` : full edition mechanics, MSRV resolver flags, channel commands, complete `cargo fix --edition` workflow, RELEASES.md pointer.210- `references/examples.md` : worked `Cargo.toml` examples per edition, `rust-toolchain.toml` examples, MSRV-aware resolver config, edition migration log.211- `references/anti-patterns.md` : real failure modes (manual edition bump without `cargo fix`, mixing stable and nightly in one project, MSRV without `rust-version`, version-claim without source).212213### Cross-skill references214215- `[[rust-syntax-edition-2024]]` : the 13 language changes in edition 2024 with code examples.216- `[[rust-core-toolchain]]` : rustup, cargo, rustc, clippy, rustfmt mechanics.217- `[[rust-impl-cargo-project]]` : `Cargo.toml` complete reference including `[lints]` and workspace inheritance.218219### Source URLs (verified 2026-05-19)220221- Edition Guide : https://doc.rust-lang.org/edition-guide/222- Rust 1.65.0 release (GATs) : https://blog.rust-lang.org/2022/11/03/Rust-1.65.0/223- Rust 1.75.0 release (AFIT/RPITIT) : https://blog.rust-lang.org/2023/12/28/Rust-1.75.0/224- Rust 1.80.0 release (LazyLock) : https://blog.rust-lang.org/2024/07/25/Rust-1.80.0/225- Rust 1.81.0 release : https://blog.rust-lang.org/2024/09/05/Rust-1.81.0/226- Rust 1.82.0 release (precise capturing) : https://blog.rust-lang.org/2024/10/17/Rust-1.82.0/227- Rust 1.83.0 release : https://blog.rust-lang.org/2024/11/28/Rust-1.83.0/228- Rust 1.84.0 release (MSRV resolver) : https://blog.rust-lang.org/2025/01/09/Rust-1.84.0/229- Rust 1.85.0 release (edition 2024 stable) : https://blog.rust-lang.org/2025/02/20/Rust-1.85.0/230- Rust 1.86.0 release (trait upcasting) : https://blog.rust-lang.org/2025/04/03/Rust-1.86.0/231- Rust 1.87.0 release (asm! jumps) : https://blog.rust-lang.org/2025/05/15/Rust-1.87.0/232- Cargo manifest (`rust-version` field) : https://doc.rust-lang.org/cargo/reference/manifest.html233- Edition 2024 RPIT lifetime capture : https://doc.rust-lang.org/edition-guide/rust-2024/rpit-lifetime-capture.html234- Edition 2024 never-type fallback : https://doc.rust-lang.org/edition-guide/rust-2024/never-type-fallback.html