[Rust] 1.46.0 업데이트 발표 (번역)
원문
https://blog.rust-lang.org/2020/08/27/Rust-1.46.0.html
우리 러스트 팀은 새 버전 [1.46.0]을 발표하게 돼서 정말 기쁩니다!
러스트는 누구든 믿음직하고 효과적인 소프트웨어를 만들 수 있게 도와주는 끝내주는 언어입니다.
만약 rustup을 통해서 Rust의 이전버전을 설치해놓은 상대라면, 업데이트는 아주 쉽습니다. 그냥 이렇게 치면 돼요.
rustup update stable
rustup을 설치한 적이 없다면, 우리 웹사이트의 설치 페이지에서 받을 수 있습니다. 그리고 깃허브에서 이번 버전에 대한 릴리즈 노트를 참조해보세요.
1.46.0엔 무엇이 있나요?
이번 릴리즈에서는 const fn의 새로운 부분들, 2개의 새 표준 API들, 라이브러리 작성자를 위한 쓸만한 기능 하나가 추가되었습니다.
이 포스트에서 다루지 않은 기타 변경점들은 릴리즈 노트에서 확인하세요.
const fn 개선
const fn에서 당장 사용할 수 있는 여러개의 핵심 언어 기능들이 추가되었습니다.
이런것들 말이죠.
if, if let, match
while, while let, loop
&&와 || 연산자
그리고 이제 슬라이스로 캐스팅도 가능해요.
**const fn foo() **
**{ **
** let x = [1, 2, 3, 4, 5]; **
** **// 배열을 슬라이스로 캐스팅
** let y: &[_] = &x; **
**} **
이 기능들은 새롭게 느껴지지 않을 수도 있어요. const fn 밖에서는 당연히 쓸수 있던 것들이니까요.
하지만 이제 컴파일타임 계산이 가능하다는 것이 대단한 겁니다!
가령, const-sha1 크레이트는 이제 SHA-1 해싱을 컴파일타임에 계산할 수 있어요.
때문에 Rust의 MS WinRT 바인딩에서 40배의 성능 향상이 나타났습니다.
#[track_caller]
5월로 돌아가보면, Rust 1.42의 릴리즈에서 unwrap 등의 함수에서 panic을 던질 때, 그 에러메시지가 개선되었다고 소개한 적이 있습니다.
그때, 우리는 이 구현이 아직 stable은 아니라고 언급했어요.
그리고 마침내 Rust 1.46에서 이 기능들은 stable이 되었습니다!
이 속성은 #[track_caller]로 호출이 가능한데요. 이건 원래 2017년 7월에 RFC 2091로 제안이 올라왔습니다.
만약 unwrap처럼 panic을 던지는 함수를 작성한다면, 그 함수에 이 어노테이션을 추가할 수 있습니다.
그리고 디폴트 panic formatter는 그 호출자를 그 에러메세지이 위치로 사용할 거에요.
예를 들어, 여기에 이전의 unwrap이 있습니다.
**pub fn unwrap(self) -> T **
**{ **
** match self **
** { **
** Some(val) => val, **
** None => panic!("called Option::unwrap() on a None value"), **
** } **
**} **
이건 이제 이렇게 될겁니다.
**#[track_caller] **
**pub fn unwrap(self) -> T **
**{ **
** match self **
** { **
** Some(val) => val, **
** None => panic!("called Option::unwrap() on a None value"), **
** } **
**} **
그게 다에요!
만약 panic hook을 직접 구현한다면, std::panic::Location에 대한 caller 메서드를 사용해서 이 정보에 접근을 할 수 있습니다.
라이브러리 변경점
const fn 개선으로 인한 변경이 있습니다. std::mem::forget은 이제 const fn에요!
게다가 2개의 새 API가 이번 릴리즈에서 stable이 되었습니다.
더 자세한 것은 릴리즈 노트를 참고하세요.
기타 변경점
1.46 릴리즈에는 이외의 기타 변경점들도 있습니다.
Rust, Cargo, Clippy에서 무엇이 바뀌었는지 확인해보세요.
1.46.0의 컨트리뷰터들
1.46의 완성엔 수많은 사람들이 함께했습니다. 전부 여러분이 없었다면 불가능했을 거에요.
고마워요!