Description
Periodic sweep of stable Rust APIs released after the current MSRV (1.96.0), run against the current stable toolchain (1.98.0), per the rust-modern-apis reference (covers 1.89-1.98).
No dependency in the workspace forces a bump: the highest rust-version among resolved dependencies is sevenz-rust2 at 1.93, well below the current 1.96 MSRV.
Findings
A full scan of crates/*/src (~60k lines) against the modern-APIs trigger list (Duration minute/hour math, with_extension used as suffix-append, file_stem on compound extensions, Ipv4Addr::new/Ipv6Addr::new, checked_*().unwrap(), retain, LazyLock/LazyCell, compare_exchange loops, cfg_if, manual UTF-16 decoding, itoa, atomic transmute, raw Box pointer extraction, try_into().unwrap() for fixed arrays, etc.) turned up exactly one actionable pattern:
path.as_os_str().is_empty() -> path.is_empty() (Path::is_empty(), stabilized in Rust 1.98) at 13 call sites:
crates/exarch-cli/src/commands/extract.rs:556
crates/exarch-core/src/formats/common.rs:203,206,251,294
crates/exarch-core/src/security/hardlink.rs:128
crates/exarch-core/src/creation/zip.rs:195
crates/exarch-core/src/creation/tar.rs:307
crates/exarch-core/src/types/safe_path.rs:149,228
crates/exarch-core/src/types/safe_symlink.rs:126
crates/exarch-core/src/inspection/list.rs:602,1586
This is a behavior-identical, purely cosmetic simplification. It requires raising MSRV from 1.96.0 to 1.98.0.
Why not act now
The previous MSRV bump (1.93 -> 1.96, #401) was justified by bundling multiple substantive wins together: migrating 151 assert!(matches!(...)) sites to assert_matches! (real diagnostic improvement on test failure) plus applying core::hint::cold_path() to hot/cold branches in QuotaTracker. A single 13-site cosmetic cleanup with no diagnostic, performance, or safety benefit does not clear that bar on its own — bumping MSRV is a breaking change for downstream consumers pinned to older toolchains.
Recommendation
Keep this open as a backlog item. Revisit at the next rust-modern-apis sweep (or whenever another stable-API motivated need for 1.97/1.98 shows up, e.g. a dependency bump or a new pattern in newly added code) and bundle this Path::is_empty() cleanup into that bump instead of raising MSRV for it alone.
Environment
- Version: exarch 0.6.0 (workspace)
- Current MSRV: 1.96.0
- Stable toolchain checked against: 1.98.0
Description
Periodic sweep of stable Rust APIs released after the current MSRV (1.96.0), run against the current stable toolchain (1.98.0), per the
rust-modern-apisreference (covers 1.89-1.98).No dependency in the workspace forces a bump: the highest
rust-versionamong resolved dependencies issevenz-rust2at 1.93, well below the current 1.96 MSRV.Findings
A full scan of
crates/*/src(~60k lines) against the modern-APIs trigger list (Durationminute/hour math,with_extensionused as suffix-append,file_stemon compound extensions,Ipv4Addr::new/Ipv6Addr::new,checked_*().unwrap(),retain,LazyLock/LazyCell,compare_exchangeloops,cfg_if, manual UTF-16 decoding,itoa, atomictransmute, rawBoxpointer extraction,try_into().unwrap()for fixed arrays, etc.) turned up exactly one actionable pattern:path.as_os_str().is_empty()->path.is_empty()(Path::is_empty(), stabilized in Rust 1.98) at 13 call sites:crates/exarch-cli/src/commands/extract.rs:556crates/exarch-core/src/formats/common.rs:203,206,251,294crates/exarch-core/src/security/hardlink.rs:128crates/exarch-core/src/creation/zip.rs:195crates/exarch-core/src/creation/tar.rs:307crates/exarch-core/src/types/safe_path.rs:149,228crates/exarch-core/src/types/safe_symlink.rs:126crates/exarch-core/src/inspection/list.rs:602,1586This is a behavior-identical, purely cosmetic simplification. It requires raising MSRV from 1.96.0 to 1.98.0.
Why not act now
The previous MSRV bump (1.93 -> 1.96, #401) was justified by bundling multiple substantive wins together: migrating 151
assert!(matches!(...))sites toassert_matches!(real diagnostic improvement on test failure) plus applyingcore::hint::cold_path()to hot/cold branches inQuotaTracker. A single 13-site cosmetic cleanup with no diagnostic, performance, or safety benefit does not clear that bar on its own — bumping MSRV is a breaking change for downstream consumers pinned to older toolchains.Recommendation
Keep this open as a backlog item. Revisit at the next
rust-modern-apissweep (or whenever another stable-API motivated need for 1.97/1.98 shows up, e.g. a dependency bump or a new pattern in newly added code) and bundle thisPath::is_empty()cleanup into that bump instead of raising MSRV for it alone.Environment