Rust 1.100, Cargo 의존성 갱신에 공개 후 대기 기간 설정 추가
Rust Release Team이 2026년 11월 12일 Rust 1.100.0을 공개했습니다. Cargo는 설정에 따라 새 의존성 버전을 정해진 기간 후보에서 제외하며, `!` 타입은 `Result<T, !>`처럼 다른 타입 안에도 쓸 수 있게 됐습니다. `Vec`·`Box`에 사용자 지정 할당기를 연결하는 API 핵심부와 오류 때 변경을 되돌리는 `DropGuard`도 안정화됐습니다.

Rust Release Team은 2026년 11월 12일 Rust 1.100.0을 공개했습니다. 이번 버전에서는 Cargo가 의존성 버전을 다시 고를 때 새로 공개된 패키지 버전을 일정 기간 후보에서 제외하도록 설정할 수 있습니다. Rust에서는 ! 타입을 다른 타입 안에도 쓸 수 있게 됐고, Vec와 Box에 사용자 지정 할당기를 연결하는 API의 핵심부와 DropGuard도 안정화됐습니다.
Cargo 의존성 갱신에 공개 후 대기 기간 설정
악성 패키지 버전은 공개된 뒤 자동 탐지기나 커뮤니티가 발견하기까지 몇 시간에서 며칠이 걸리기도 합니다. Rust 1.100에서 안정화된 Cargo의 최소 공개 경과기간 설정은 의존성을 갱신할 때 새 버전의 공개 직후 이를 선택하지 않고 대기 기간을 두는 기능입니다.
프로젝트의 .cargo/config.toml에 [registry] global-min-publish-age = "3 days"처럼 지정하면 Cargo는 공개된 지 3일이 지나지 않은 버전을 후보에서 제외합니다. Cargo는 제외한 버전을 알리고, 대기 기간이 지난 호환 버전 가운데 가장 높은 버전을 선택합니다. 이 설정은 모든 프로젝트에 기본 적용되지 않으며 사용자가 선택해 켭니다.
최신 버전이 급히 필요하면 CARGO_RESOLVER_INCOMPATIBLE_PUBLISH_AGE=allow 환경 변수와 --precise 옵션을 사용해 한 번의 갱신에서 대기 기간 조건을 예외 처리할 수 있습니다. 선택한 버전은 Cargo.lock에 기록돼 Cargo가 다음에 의존성을 다시 풀 때까지 유지됩니다.
대기 기간은 패키지 레지스트리 인덱스에 공개 시각이 기록된 버전에만 적용됩니다. 공개 시각 정보가 없는 버전은 제외되지 않습니다. cargo install은 설치 대상 패키지와 그 의존성 모두에 이 설정을 적용하지 않습니다. Rust 팀은 대기 기간이 일부 공급망 공격의 위험을 줄이는 데 도움이 되며, 의존성 업데이트도 평소처럼 검토하라고 권했습니다.
`!` 타입을 다른 타입 안에 표기
!는 값이 존재할 수 없는 never type입니다. return처럼 실행 흐름을 끝내는 표현이 이 타입을 가집니다. 이전에도 함수 반환형 -> ! 등 일부 위치에서 쓸 수 있었지만, Rust 1.100부터는 Result<T, !>처럼 다른 타입의 구성요소로 표기할 수 있습니다. 오류 쪽에 값이 존재할 수 없으므로 이런 Result는 성공값만 가질 수 있고, 오류 분기 없이 다루는 코드로 표현할 수 있습니다.
표준 라이브러리의 Infallible도 이제 !의 별칭입니다. 이 변경에 맞춰 2015·2018·2021 에디션의 never type fallback은 ()에서 !로 바뀌었습니다. 대부분의 코드에서는 변화가 드러나지 않지만, 함수가 제네릭 매개변수형 값을 반환할 때 그 결과를 무시하는 코드처럼 드문 경우에는 영향을 받을 수 있습니다. 컴파일러가 도달할 수 없는 코드로 판단하는 범위도 달라질 수 있습니다. Rust 팀은 호환성 경고를 미리 제공하고, 영향을 받은 공개 크레이트의 수정판을 냈다고 밝혔습니다.
사용자 지정 메모리 할당과 오류 복구
표준 라이브러리의 Allocator API 핵심부가 안정화됐습니다. 이 API를 이용하면 라이브러리 작성자가 직접 정의한 메모리 할당 방식을 Vec와 Box에 연결할 수 있습니다. 메모리 할당기는 자료구조가 저장 공간을 확보하고 돌려줄 때 이용하는 방식을 정합니다. 이번 안정화는 기반을 마련한 단계로, 사용자 지정 할당기를 쓸 수 있는 컬렉션과 포인터 유형을 더 늘리는 작업은 남아 있습니다.
core::mem::DropGuard는 값과 정리 함수를 함께 감싸는 도구입니다. 감싼 값은 평소처럼 읽고 수정할 수 있으며, guard가 해제될 때 정리 함수가 실행됩니다. 함수가 정상적으로 반환되거나 ?로 오류를 전파하거나 패닉으로 빠져나오는 경로에서도 같은 정리가 이뤄집니다.
Rust 팀이 든 파서 예에서는 문자열을 숫자로 바꾸면서 벡터에 값을 추가합니다. 파싱에 실패하면 guard가 벡터를 작업 전 길이로 되돌립니다. 모든 문자열을 성공적으로 읽으면 dismiss로 감싼 값을 꺼내 정리 함수를 실행하지 않고 변경을 유지합니다. 이 방식은 실패한 경우의 되돌리기 동작을 guard에 맡겨 오류 처리 경로마다 반복하지 않도록 합니다.