[Rust] 1.73.0 업데이트 발표 (번역)
https://blog.rust-lang.org/2023/10/05/Rust-1.73.0.html
러스트는 누구든 믿음직하고 효과적인 소프트웨어를 만들 수 있게 도와주는 끝내주는 언어입니다.
만약 rustup을 통해서 Rust의 이전버전을 설치해놓은 상대라면, 업데이트는 아주 쉽습니다. 그냥 이렇게 치면 돼요.
rustup update stable
rustup을 설치한 적이 없다면, 우리 웹사이트의 설치 페이지에서 받을 수 있습니다. 그리고 깃허브에서 이번 버전에 대한 릴리즈 노트를 참조해보세요.
미래의 릴리즈를 테스트해서 러스트 팀을 돕고 싶다면, 로컬에서 베타 채널(rustup default beta) 또는 nightly 채널(rustup default nightly)로 업데이트하는 것을 고려할 수 있습니다.
버그를 발견했다면 리포트해주세요!
1.73.0 stable에는 무엇이 있나요?
더 깔끔해진 panic 메세지
기본 패닉 핸들러에서 생성된 출력이 패닉 메시지를 따옴표로 묶는 대신, 자체 라인에 넣도록 변경되었습니다.
이렇게 하면 다음 예제와 같이 패닉 메시지를 더 쉽게 읽을 수 있습니다.
fn main() {
** let file = "ferris.txt";**
** panic!("oh no! {file:?} not found!");**
}
Rust 1.73 이전의 출력
thread 'main' panicked at 'oh no! "ferris.txt" not found!', src/main.rs:3:5
Rust 1.73 부터의 출력
thread 'main' panicked at src/main.rs:3:5:
oh no! "ferris.txt" not found!
이는 메시지가 길거나, 중첩된 따옴표를 포함하거나, 여러 줄에 걸쳐 있을 때 특히 유용합니다.
또한, 아래와 같이 assert_eq 및 assert_ne에 의해 생성된 패닉 메시지가 수정되어서, 사용자 정의 메시지(세 번째 인자)가 이동되고 일부 불필요한 구두점이 제거되었습니다.
fn main() {
** assert_eq!("🦀", "🐟", "ferris is not a fish");**
}
1.73 이전의 출력
thread 'main' panicked at 'assertion failed: (left == right)
** left: "🦀",**
right: "🐟": ferris is not a fish', src/main.rs:2:5
Rust 1.73의 출력
thread 'main' panicked at src/main.rs:2:5:
assertion left == right failed: ferris is not a fish
** left: "🦀"**
right: "🐟"
Thread local initialization
RFC 3184에서 제안된 대로 LocalKey<Cell
LocalKey
이 새로운 메서드는 common 코드를 더욱 간결하게 만들고, 새로운 스레드의 경우에는 thread_local!에 지정된 디폴트값에 대해 추가적인 초기화 코드를 실행하지 않도록 해줍니다.
thread_local! {
** static THINGS: Cell<Vec
}
fn f() {
** **** // before:******
** THINGS.with(|i| i.set(vec![1, 2, 3]));**
** // now:**
** THINGS.set(vec![1, 2, 3]);**
** **** // ...******
** // before:**
** let v = THINGS.with(|i| i.take());**
** **** // now:******
** let v: Vec
}
Stable이 된 API
Unsigned {integer}::div_ceil
Unsigned {integer}::next_multiple_of
Unsigned {integer}::checked_next_multiple_of
std::ffi::FromBytesUntilNulError
std::os::unix::fs::chown
std::os::unix::fs::fchown
std::os::unix::fs::lchown
LocalKey::<Cell
LocalKey::<Cell
LocalKey::<Cell
LocalKey::<Cell
LocalKey::<RefCell
LocalKey::<RefCell
LocalKey::<RefCell
LocalKey::<RefCell
LocalKey::<RefCell
아래 API들은 이제 const context에서도 stable입니다.
rc::Weak::new
sync::Weak::new
NonNull::as_ref
기타 변경점
이외의 모든 변경사항은 각각 Rust, Cargo, Clippy에서 확인하세요.
1.73.0의 컨트리뷰터들에게
1.73.0의 완성엔 수많은 사람들이 함께했습니다. 전부 여러분이 없었다면 불가능했을 거에요.