Rust 1.96.0 릴리스, 새로운 Range 타입 도입 및 WebAssembly 타겟 관련 변경 사항 포함
Range 타입(Range Types)을 `Copy` 가능하도록 개선하여 개발 편의성 증대
`assert_matches!` 매크로 추가로 테스트 코드(Test Code) 작성 편의성 향상
WebAssembly 타겟에서 링커(Linker) 동작 변경으로 빌드 안정성 강화
Rust 1.96.0에서는 `core::range` 패키지를 통해 새로운 Range 타입을 도입하여 Copy trait을 구현할 수 있도록 변경했다. 이는 기존 Range 타입이 `Iterator`를 직접 구현하여 `Copy`를 지원하지 못했던 문제를 해결한 것이다. Range 타입의 복사(Copying)가 가능해짐으로써, 슬라이스 접근자를 복사 가능한 타입에 저장하는 등, 개발 편의성을 높였다.
새롭게 추가된 `assert_matches!` 및 `debug_assert_matches!` 매크로는 값과 패턴의 일치를 검사하는 매크로이다. 이는 기존 `assert!(matches!(..))`를 대체하며, 실패 시 디버깅 정보를 개선하여 테스트 코드(Test Code)의 가독성을 높인다. 다만, 기존 서드파티 크레이트와의 충돌을 방지하기 위해 표준 프리루드(Standard Prelude)에 포함되지 않아 수동으로 import해야 한다.
Rust 1.96.0에서는 WebAssembly 타겟에서 링커가 `--allow-undefined` 옵션을 더 이상 사용하지 않도록 변경되었다. 이는 링킹 시 정의되지 않은 심볼(Symbol)이 발생할 경우 링커 에러를 발생시켜, 빌드 시점(Build Time)에 오류를 조기에 감지하고, 잠재적인 문제를 예방하기 위함이다. 이전 동작을 원할 경우 `RUSTFLAGS=-Clink-arg=--allow-undefined`를 사용해야 한다.
Rust 1.96.0은 서드파티 레지스트리 사용자를 위한 두 가지 보안 취약점(CVE-2026-5223, CVE-2026-5222)에 대한 수정 사항을 포함한다. CVE-2026-5223은 심볼릭 링크(Symlink)를 포함하는 크레이트(Crate) tarball 추출과 관련된 중간 심각도 취약점이며, CVE-2026-5222는 정규화된 URL을 사용한 인증과 관련된 낮은 심각도 취약점이다. Crates.io 사용자는 해당 취약점의 영향을 받지 않는다.