- 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 각각의 변경 로그에서 확인할 수 있음