[Rust] 1.76.0 업데이트 발표 (번역)
https://blog.rust-lang.org/2024/02/08/Rust-1.76.0.html
러스트는 누구든 믿음직하고 효과적인 소프트웨어를 만들 수 있게 도와주는 끝내주는 언어입니다.
만약 rustup을 통해서 Rust의 이전버전을 설치해놓은 상대라면, 업데이트는 아주 쉽습니다. 그냥 이렇게 치면 돼요.
rustup update stable
rustup을 설치한 적이 없다면, 우리 웹사이트의 설치 페이지에서 받을 수 있습니다. 그리고 깃허브에서 이번 버전에 대한 릴리즈 노트를 참조해보세요.
미래의 릴리즈를 테스트해서 러스트 팀을 돕고 싶다면, 로컬에서 베타 채널(rustup default beta) 또는 nightly 채널(rustup default nightly)로 업데이트하는 것을 고려할 수 있습니다.
버그를 발견했다면 리포트해주세요!
1.76.0 stable에는 무엇이 있나요?
이번 릴리즈는 상대적으로 마이너한 편입니다.
하지만 언제나 그렇듯 점진적인 개선이 큰 전체로 이어집니다.
이 포스트에서는 변경 사항 중 일부를 강조하고 있으며, 다른 것들은 더 많은 틈새 요구 사항(niche needs)을 충족할 수 있을 겁니다.
ABI 호환성 업데이트
함수 포인터 문서의 새로운 ABI 호환성 섹션에서는 함수 시그너처가 ABI 호환이 된다는 것이 무엇을 의미하는지 설명합니다.
이 중 큰 부분은 현재 Rust에서 호환 가능한 것으로 간주되는 목록의 argument 타입과 return 타입의 호환성입니다.
대부분의 경우 이 문서에서는 새로운 보장을 추가하지는 않고, 기존 호환성 상태만 설명합니다.
한 가지 새로 추가된 점은 이제 char와 u32가 ABI에서 호환된다는 것이 보장된다는 것입니다. 이것들은 항상 동일한 크기와 alignment를 가지고 있었지만, 이제는 함수 호출 ABI에서도 동등한 것으로 간주됩니다.
Type names from references
디버깅 목적으로, Rust 1.38부터 any::type_name::
특히 클로저와 같이 이름을 지정할 수 없는 타입이나 불투명한(opaque) 반환 타입의 경우 해당 타입을 지정하는 것이 매우 어려웠습니다.
이제는 any::type_name_of_val(&T)를 사용해서 모든 참조값에 대해 설명적인(descriptive) 이름을 가져올 수 있습니다.
fn get_iter() -> impl Iterator<Item = i32> {
** [1, 2, 3].into_iter()**
}
fn main() {
** let iter = get_iter();**
** let iter_name = std::any::type_name_of_val(&iter);**
** let sum: i32 = iter.sum();**
** println!("The sum of the {iter_name} is {sum}.");**
}
이건 현재 이렇게 출력을 할겁니다.
The sum of the core::array::iter::IntoIter<i32, 3> is 6.
안정화된 API들
Arc::unwrap_or_clone
Rc::unwrap_or_clone
Result::inspect
Result::inspect_err
Option::inspect
type_name_of_val
std:#️⃣:{DefaultHasher, RandomState} These were previously available only through std::collections::hash_map.
ptr::{from_ref, from_mut}
ptr::addr_eq
기타 변경점
이외의 모든 변경사항은 각각 Rust, Cargo, Clippy에서 확인하세요.
1.76.0의 컨트리뷰터들에게
1.76.0의 완성엔 수많은 사람들이 함께했습니다. 전부 여러분이 없었다면 불가능했을 거에요.