[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이 되었습니다.

Option::zip

vec::Drain::as_slice

더 자세한 것은 릴리즈 노트를 참고하세요.



기타 변경점

1.46 릴리즈에는 이외의 기타 변경점들도 있습니다.
RustCargoClippy에서 무엇이 바뀌었는지 확인해보세요.



1.46.0의 컨트리뷰터들

1.46의 완성엔 수많은 사람들이 함께했습니다. 전부 여러분이 없었다면 불가능했을 거에요.
고마워요!