Rust 1.96.0 발표

발행: (2026년 5월 28일 AM 09:00 GMT+9)
6 분 소요
원문: Rust Blog

출처: Rust Blog

Rust 1.96.0 – 릴리스 발표

Rust 팀은 새로운 Rust 버전 1.96.0을 발표하게 되어 기쁩니다.
Rust는 모두가 신뢰할 수 있고 효율적인 소프트웨어를 만들 수 있게 해주는 프로그래밍 언어입니다.


설치

이미 rustup으로 Rust 툴체인을 설치했 있다면, 최신 안정 버전으로 업그레이드하세요:

$ rustup update stable

아직 rustup이 없으시다면 여기서 받으세요.
전체 변경 사항은 **1.96.0 상세 릴리스 노트**를 참고하세요.

향후 릴리스 체험하기

다음 릴리스를 테스트하고 싶으신가요? 베타 또는 나이틀리 채널로 전환하세요:

$ rustup default beta     # 베타 채널 사용
$ rustup default nightly  # 나이틀리 채널 사용

버그를 발견하시면 보고해 주세요!


1.96.0 (stable)에서 새로 나온 내용

새로운 Range* 타입

역사적으로 Range와 관련 core::ops 타입들은 Iterator를 직접 구현하기 때문에 Copy아닙니다. IteratorCopy를 동시에 구현하는 것은 함정이 될 수 있습니다(Clippy 린트를 확인하세요).

RFC 3550은 IntoIterator를 구현하도록 대체 범위 타입들을 도입했으며, 이를 통해 Copy가 가능해졌습니다. 해당 RFC의 표준 라이브러리 부분이 이제 안정화되어 다음 타입들을 추가했습니다:

  • core::range::Range
  • core::range::RangeFrom
  • core::range::RangeInclusive
  • 연관된 iterator 타입들

향후 Rust 버전에서는 다음도 추가될 예정입니다:

  • core::range::RangeFull
  • core::range::RangeTo (재수출은 core::ops에서; 두 타입 모두 Copy)
  • core::range::legacy::* (현재 레거시 범위들의 새로운 위치)

참고: 현재 0..1 구문은 여전히 레거시 타입을 생성합니다. 추후 에디션에서 새로운 core::range 타입으로 업데이트될 예정입니다.

예시: Copy 타입에 슬라이스 접근자를 저장하기

use core::range::Range;

#[derive(Clone, Copy)]
pub struct Span(Range);

impl Span {
    pub fn of(self, s: &str) -> &str {
        &s[self.0]
    }
}

RangeInclusive는 이제 필드를 pub으로 공개합니다. 레거시 버전과 달리, 새로운 타입은 사용 전에 iterator 로 변환되어야 합니다.

API 팁: 공개 시그니처에서는 impl RangeBounds를 선호하세요. 이는 레거시와 새로운 범위 타입 모두를 받아들입니다. 구체적인 타입이 필요할 때는 새로운 범위를 사용하세요—곧 기본값이 될 것입니다.


assert_matches! 매크로

새로운 매크로 assert_matches!debug_assert_matches!는 값이 패턴과 일치하는지 확인하고, 일치하지 않을 경우 Debug 표현과 함께 panic(또는 debug‑panic)합니다.

assert!(matches!(…))debug_assert!(matches!(…))와 동일하지만, 출력되는 값 덕분에 실패 원인 파악이 쉬워집니다.

이 매크로들은 프리루드에 포함되지 않아, 같은 이름을 가진 서드파티 매크로와 충돌을 방지합니다. 직접 import해서 사용하세요:

use core::assert_matches;

/// [Random Number](https://xkcd.com/221/)
fn get_random_number() -> u32 {
    // 공정한 주사위 굴림에 의해 선택되었습니다.
    // 무작위임이 보장됩니다.
    4
}

fn main() {
    assert_matches!(get_random_number(), 1..=6);
}

WebAssembly 타깃 변경 사항

WebAssembly 타깃이 이제 링커에 --allow-undefined 옵션을 전달하지 않습니다. 따라서 정의되지 않은 심볼이 있으면 링커 오류가 발생하며, 이전처럼 "env" 모듈에서 자동으로 임포트되지 않습니다. 이는 버그를 조기에 잡아내고 실수로 심볼 이름이 충돌하는 상황을 방지합니다.

예전 동작이 필요하다면 다음과 같이 다시 활성화할 수 있습니다:

RUSTFLAGS="-Clink-arg=--allow-undefined"

또는 해당 블록에 #[link(wasm_import_module = "env")]를 추가하세요.

이 변경은 이전에 발표된 바와 같이 Rust 1.96부터 적용됩니다.


안정화된 API

범위 타입 및 iterator


보안 권고 사항

Rust 1.96은 서드파티 레지스트리를 이용하는 사용자에게 영향을 주는 두 가지 취약점을 수정했습니다.

CVE심각도설명
CVE‑2026‑5223중간크레이트 tarball 추출 과정에서 발생하는 문제. 자세히 보기:
CVE‑2026‑5271높음(설명 및 링크는 추후 제공)

Rust 1.96.0으로 업그레이드하여 패치를 적용하세요.


새 릴리스를 즐기세요! 🚀

보안 수정

  • CVE‑2026‑5221 – 심볼릭 링크 처리와 관련
0 조회
Back to Blog

관련 글

더 보기 »

Rust 1.96 발표

Rust 1.96.0 Release The Rust team is happy to announce a new version of Rust, 1.96.0. Rust is a programming language empowering everyone to build reliable and...

첫 포스트: 짧은 전기

Introduction Hello, my name is Jay. Growing up, I wanted to follow in my dad's footsteps and become an engineer—and I did, just not in the way I originally exp...

Zig Days에서 LLM에 대해

Zig Days are full‑day collaborative programming events that usually take place on a Saturday. People meet in the morning, introduce themselves, and mention what...

마이크로소프트, C# 메모리 안전성을 러스트 수준으로 높인다

마이크로소프트의 C 메모리 안전성 강화 계획 마이크로소프트는 C 언어의 메모리 안전성을 러스트 수준으로 끌어올리겠다는 계획을 발표했습니다. 닷넷 제품 관리자 리처드 랜더는 21일 개발자 블로그에서 “C의 메모리 안전성을 대폭 개선하는 작업을 진행 중”이라며, unsafe 키워드를 재설...