요약
Rust 1.66.0 버전이 출시되었습니다. 이번 업데이트에서는 enum 타입에서 explicit discriminants를 지원합니다. 또한 core::hint::black_box 함수를 이용하여 컴파일러의 최적화를 막을 수 있으며, cargo remove 명령어를 사용하여 프로젝트에서 불필요한 의존성을 제거할 수 있습니다. 이 외에도 여러 가지 기능 개선 및 안정화가 이루어졌으며, 자세한 변경 사항은 GitHub에서 확인할 수 있습니다.
본문
만약 이미 rustup으로 이전 버전의 Rust를 설치한 경우, 다음과 같이 1.66.0 버전을 얻을 수 있습니다.
rustup update stable
Shell
복사
만약 rustup을 사용하지 않은 경우, Rust 웹사이트의 적절한 페이지에서 rustup을 다운로드하고, GitHub의 상세 릴리스 노트를 확인하세요.
앞으로 출시될 버전을 테스트하고 싶다면, beta 채널(rustup default beta)이나 nightly 채널(rustup default nightly)로 업데이트하는 것을 고려해보세요. 발견한 버그를 보고해주세요!
Rust 1.66.0에 포함된 내용
필드가 있는 열거형에서 명시적인 판별자 사용
정수 표현을 가진 열거형에서는 이제 필드가 있는 경우에도 명시적인 판별자를 사용할 수 있습니다.
#[repr(u8)]
enum Foo {
A(u8),
B(i8),
C(bool) = 42,
}
Rust
복사
이전에는 필드가 없는 경우에만 명시적 판별자를 사용할 수 있었습니다. 명시적 판별자는 열거형의 표현이 다른 언어에 전달될 때 두 언어 간의 일치해야 할 때 유용합니다.
core::hint::black_box
컴파일러에서 최적화가 일어나지 않도록 하는 것은 코드를 벤치마크하거나 기계어 코드를 검토할 때 유용합니다. black_box 함수를 사용하여 이를 구현할 수 있습니다. 이 함수는 전달된 값을 그대로 반환하지만, 컴파일러는 이 함수를 값을 임의로 변환할 수 있고 임의의 값을 반환할 수 있는 함수로 취급합니다.
use std::hint::black_box;
fn push_cap(v: &mut Vec<i32>) {
for i in 0..4 {
v.push(i);
black_box(v.as_ptr());
}
}
Rust
복사
cargo remove
이전 릴리스에서는 cargo add를 이용하여 프로젝트에 의존성을 추가할 수 있었습니다. 이번 릴리스에서는 cargo remove를 이용하여 의존성을 제거할 수 있습니다.
안정화된 API들
다음은 Rust 1.66 릴리즈에서 안정화된 API들입니다.
기타 변경 사항
Rust 1.66 릴리즈에는 아래와 같은 기타 변경 사항도 있습니다.
•
패턴에서 ..=X 범위 사용 가능
•
Linux 빌드에서 rustc frontend와 LLVM backend에 LTO 및 BOLT를 최적화하여 런타임 성능과 메모리 사용량이 개선됨
Rust, Cargo, Clippy에서 모두 변경된 내용을 확인할 수 있습니다.