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

https://blog.rust-lang.org/2022/06/30/Rust-1.62.0.html

우리 러스트 팀은 새 버전 [1.62.0]을 발표하게 돼서 정말 기쁩니다!

러스트는 누구든 믿음직하고 효과적인 소프트웨어를 만들 수 있게 도와주는 끝내주는 언어입니다.

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

rustup update stable

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

미래의 릴리즈를 테스트해서 러스트 팀을 돕고 싶다면, 로컬에서 베타 채널(rustup default beta) 또는 nightly 채널(rustup default nightly)로 업데이트하는 것을 고려할 수 있습니다.

버그를 발견했다면 리포트해주세요!




1.62.0 stable에는 무엇이 있나요?


cargo add

이제는 cargo add를 사용하여 명령줄에서 직접 새 종속성을 추가할 수 있습니다.
이 명령은 features와 버전 지정을 지원합니다.
그리고 기존 종속성을 수정하는데 사용할 수도 있어요.

이런 식으로 쓸수 있죠.
**cargo add log ******
**cargo add serde --features derive ******
**cargo add nom@5 **

더 자세한건 cargo 문서를 참조해주세요.




#[default] enum variants

이제 default variant를 지정할 경우 enum에 #[derive(Default)]를 사용할 수 있습니다.
예를 들어, 지금까지는 enum에 대해 Default impl을 수동으로 작성해야 했습니다.

**#[derive(Default)] **
**enum Maybe { **
** #[default] **
** Nothing, **
** Something(T), **
**} **

그리고 현재로서는 'unit' variants(필드가 없는 variants)만 #[default]으로 표시할 수 있습니다.

이에 대한 더 많은 정보는 이 기능에 대한 RFC를 참고해주세요.




Linux에서의 더 얇고 빠른 뮤텍스

이전에는 Mutex, Condvar, RwLock이 Linux의 pthreads 라이브러리에서 지원되었습니다.

pthreads lock은 런타임 구성을 포함해 Rust API 자체보다 더 많은 기능을 지원하며, Rust가 제공하는 것보다 정적인 보장이(static guarantees) 적은 언어에서 사용하도록 설계되었습니다.
C/C++ 같은 것 말이죠.

예를 들어, 뮤텍스 구현은 40바이트이며 이동할 수가 없습니다.
이로 인해 표준 라이브러리는 pthread를 사용하는 플랫폼의 각 새 뮤텍스마다 Box를 뒷단에서 할당해야 했습니다.

Rust의 표준 라이브러리는 이제 Linux에서 이러한 lock의 raw futex 기반 구현과 함께 제공됩니다. 매우 가볍고 추가 할당이 필요하지 않죠.

1.62.0에서 Mutex는 Linux의 내부 상태에 대해 5바이트만 사용하지만, 향후 버전에서는 변경될 수도 있습니다.

이것은 Rust의 lock 타입의 효율성을 개선하기 위한 오랜 노력의 일부입니다.
여기에는 primitives를 언박싱하는 것과 같은 Windows의 이전 개선 사항이 포함됩니다.

tracking issue에서 이러한 노력에 대해 자세히 알아볼 수 있습니다.




Bare metal x86_64 타겟

이제는 예를 들어, 커널을 작성할 때 x86_64용 OS-less 바이너리를 더 쉽게 빌드할 수 있습니다. x86_64-unknown-none 타겟은 Tier 2로 승격되었으며 Rustup과 함께 설치할 수 있습니다.

**rustup target add x86_64-unknown-none ******
**rustc --target x86_64-unknown-none my_no_std_program.rs **

Embedded Rust book에서 no_std를 사용한 개발에 대해 자세히 알아볼 수 있습니다.




Stable이 된 API

다음 메서드와 트레잇 구현은 이제 stable입니다.

bool::then_some
f32::total_cmp
f64::total_cmp
Stdin::lines
windows::CommandExt::raw_arg
impl<T: Default> Default for AssertUnwindSafe
From<Rc> for Rc<[u8]>
From<Arc> for Arc<[u8]>
FusedIterator for EncodeWide
aarch64의 RDM intrinsics




기타 변경점

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




1.62.0의 컨트리뷰터들

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

고마워요!​