Rust 1.97.0 발표
요약
Rust 1.97.0 stable 버전이 출시되었으며, 주요 변경 사항은 컴파일 산출물의 심볼 생성 방식과 빌드 경고 처리 흐름의 개선입니다. 특히 기본 심볼 맹글링 방식이 v0으로 전환되어 Rust 전용 체계가 표준화되고, Cargo를 통해 경고 제어가 더욱 세밀해져 CI/CD 환경에 적합합니다.
핵심 포인트
- 심볼 맹글링 기본값이 v0으로 변경되어 Rust 전용 심볼 이름 체계를 사용합니다.
- Cargo는 `CARGO_BUILD_WARNINGS` 환경 변수를 통해 경고를 allow, warn, deny로 세밀하게 제어할 수 있습니다.
- 성공적인 링크 과정에서도 링커 출력을 경고 메시지로 확인할 수 있게 되었습니다.
- Rust 1.97.0 stable 릴리스는 컴파일 산출물의 심볼 생성 방식과 빌드 경고 처리 흐름을 바꾸며,
rustup update stable
로 업데이트할 수 있음
symbol mangling v0가 stable 기본값이 되어 Rust 전용 심볼 이름 체계로 전환되고, 기존 Itanium ABI 기반 방식은 제거 방향으로 이동함
- Cargo는
RUSTFLAGS=-Dwarnings
대신 CARGO_BUILD_WARNINGS
로 경고를 allow
, warn
, deny
로 제어해 CI와 로컬 빌드 정책을 나누기 쉬워짐
- rustc는 성공한 링크에서도 링커 출력을
linker_messages
경고로 보여주며, 이 lint는 현재 warnings
lint group의 영향을 받지 않음
- 표준 라이브러리에는
RepeatN
의 Default
, UEFI의 std::fs::File
에 대한 Send
, 정수·NonZero
비트 메서드, const context의 char::is_control
안정화가 포함됨
Rust 1.97.0 업데이트
- Rust 1.97.0은 stable 릴리스이며, 기존에
rustup
으로 Rust를 설치한 사용자는 다음 명령으로 업데이트할 수 있음
rustup update stable
stable에서 달라진 컴파일·빌드 동작
symbol mangling v0 기본 활성화
- Rust가 오브젝트 파일이나 바이너리로 컴파일될 때 함수, static 등 각 항목은 전역에서 고유한
symbol을 가져야 함 - 서로 다른 Rust 프로그램을 함께 링크할 때 충돌을 피하려고, Rust는 원래 항목 이름에 모듈 경로, 정의 crate, 제네릭 같은 문맥을 포함해 이름을 맹글링함
- 기존 맹글링은 C++에서도 쓰이는 경우가 있는
Itanium ABI에 기반했음 - 새 방식은 제네릭 매개변수 인스턴스화 값을 보존하고, 일부만 Itanium ABI를 쓰던 불일치 때문에 커스텀 디맹글링이 여전히 필요했던 문제를 줄임
- Rust 1.59부터
-Csymbol-mangling-version=v0
로 Rust 전용 맹글링 방식을 선택할 수 있었고, 2025년 11월부터 nightly 기본값으로 적용됨
-
Rust 1.97에서는 이 방식이 stable Rust의 기본값이 되며, legacy 맹글링은 nightly에서만 활성화할 수 있음
-
현재 계획은 legacy 맹글링을 완전히 제거하는 것임
-
자세한 내용은 이전 글 switching to v0 mangling on nightly에서 확인할 수 있음
Cargo의 경고 제어
- CI에서 경고를 빌드 실패로 처리하는 것은 일반적인 관행이며, 기존에는 보통
RUSTFLAGS=-Dwarnings
를 사용했음
- Rust 1.97부터 Cargo가 경고와 빌드 성공의 관계를 직접 제어함
allow
: 경고를 숨김
warn
: 실패시키지 않고 표시하는 기본값
deny
: 경고를 거부해 빌드 실패로 처리함
- 이 기능은 Cargo 설정으로 동작이 결정되므로
기본 빌드 캐시를 무효화하지 않음 - 리팩터링 후 오류를 고치는 동안 경고 노이즈를 임시로 줄이고 싶다면 다음처럼 실행할 수 있음
CARGO_BUILD_WARNINGS=allow cargo check
- CI에서는
CARGO_BUILD_WARNINGS=deny
를 설정해 경고를 거부할 수 있음
--keep-going
과 함께 쓰면 첫 번째 실패 package에서 멈추지 않고 모든 오류와 경고를 수집할 수 있음
- 자세한 설정은 Cargo의
build.warnings
documentation에 있음
링커 출력 기본 표시
- rustc는 사용자를 대신해
linker를 호출하며, 기존에는 link가 성공하면 linker 출력을 기본적으로 숨겼음 - Rust 1.97부터 linker message가 기본 표시되고, 다음과 같은 warning lint로 출력됨
warning: linker stderr: ignoring deprecated linker optimization setting '1'
|
= note: `#[warn(linker_messages)]` on by default
- rustc는 false positive나 의도된 동작으로 진단된 일반적인 linker message를 필터링함
- nightly에서 이 출력을 숨기지 않게 된 뒤 여러 결함이 수정됨
- 현재
linker_messages
는 특수 lint이며, warnings
lint group의 영향을 받지 않음
- rustc가 linker 출력을 정밀하게 제어하지 못하는 경우가 일반적이고, 출력이 일부 platform에서만 나타날 수도 있음
- linker의 false positive 출력으로 보이면 issue를 제출할 수 있음
- 경고를 숨기려면 lint level을
allow
로 설정할 수 있으며, Cargo.toml
에 다음 lints section을 추가할 수 있음
[lints.rust]
linker_messages = "allow"
안정화된 API
- Rust 1.97에서 다음 API가 stable로 안정화됨
- 기존에 stable이던
char::is_control
은 이제 const context에서도 stable임
관련 변경 로그
- 전체 변경 사항은 Rust, Cargo, Clippy 각각의 변경 로그에서 확인할 수 있음
AI 자동 생성 콘텐츠
본 콘텐츠는 GeekNews의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기