[Rust] 1.43.0 업데이트 발표 (번역)

https://blog.rust-lang.org/2020/04/23/Rust-1.43.0.html

우리 러스트 팀은 새 버전 [1.43.0]을 발표하게 돼서 정말 기쁩니다!
러스트는 누구든 믿음직하고 효과적인 소프트웨어를 만들 수 있게 도와주는 끝내주는 언어입니다.

만약 rustup을 통해서 Rust의 이전버전을 설치해놓은 상대라면, 업데이트는 아주 쉽습니다. 그냥 이렇게 치면 돼요.
rustup update stable

rustup을 설치한 적이 없다면, 우리 웹사이트의 설치 페이지에서 받을 수 있습니다. 그리고 깃허브에서 이번 버전에 대한 릴리즈 노트를 참조해보세요.


1.43.0 stable엔 무엇이 있나요?

이번 릴리즈는 꽤 마이너합니다. 메이저 기능이 추가된건 없거든요.
일부 API들이 stable이 되었고, 컴파일러 성능이 일부 개선되었으며, 매크로 관련 기능이 살짝 추가된 게 다입니다.

이 포스트에서 다루지 않은 다른 변경점들을 알고싶다면 릴리즈 노트를 참조하세요.



item fragments

이제는 매크로에서, item fragment를 사용해 트레잇의 body, impl, extern 블럭에 item들을 삽입할 수 있습니다.

예를 들자면 이 코드는
**macro_rules! mac_trait { **
**    ($i:item) => { **
**        trait T { **
**            $i **
**        } **
**    } **
**} **
**mac_trait! { fn foo() {} } **

이렇게 생성될 겁니다.

**trait T { **
**    fn foo() {} **
**} **



기본타입에 대한 타입추론

기본타입, 참조, 2항연산에 대한 타입 추론이 개선되었습니다.

아래의 샘플 코드가 이해를 도울 겁니다.
이건 1.43에서부터 되고, 1.42에서는 컴파일에 실패할거에요.

**let n: f32 = 0.0 + &0.0; **

1.42에서는 "이봐. 어떻게 f64이랑 &f64를 더해서 f32를 만드는거야?"라고 하며 에러를 던졌을 겁니다.
하지만 이제는 0.0와 &0.0 둘다 f32가 되도록 잘 처리해줄 거에요.



테스트를 위한 cargo의 새 환경변수

통합 테스트를 돕기 위해 Cargo는 새로운 환경변수 몇개를 설정해줄 겁니다.

최대한 쉽게 예를 들어보죠.
우리는 지금 명령행 프로젝트를 하나 진행하고 있습니다. 간단하게 cli라고 부르도록 하죠.

통합테스트를 작성한다면, 바이너리를 호출하고 그게 어떻게 동작하는지 보고싶겠죠?
테스트와 벤치마크를 실행할 때면, cargo는 CARGO_BIN_EXE_cli라는 환경변수를 설정할 겁니다. 그리고 이걸 테스트 안에서 사용할 수 있어요.

**let exe = env!("CARGO_BIN_EXE_cli"); **

이건 cli를 더 쉽게 호출하게 해줄 겁니다. cli의 경로를 직접 가지게 되니까요.



라이브러리 변경점

이젠 모듈을 포함하지 않고도
실수와 정수에서 관련 상수를 바로 가져올 수 있습니다.
즉, std::u32나 std::f32 대신 u32::MAX나 f32::NAN 등을 사용할 수 있게 된다는 거죠.

그리고 러스트의 기본타입을 재방출(re-export)하는 새 기본 모듈이 있습니다.

이건 매크로를 작성할때 해당 타입이 가려지지(shadowed) 않을 것임을 보장하고 싶을 때 유용합니다.

게다가 6개의 API가 새로 stable이 되었습니다.

Once::is_completed
f32::LOG10_2
f32::LOG2_10
f64::LOG10_2
f64::LOG2_10
iter::once_with



기타 변경점

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



1.43.0의 컨트리뷰터들

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