[Rust] 1.57.0 업데이트 발표 (번역)
https://blog.rust-lang.org/2021/12/02/Rust-1.57.0.html
우리 러스트 팀은 새 버전 [1.57.0]을 발표하게 돼서 정말 기쁩니다!
러스트는 누구든 믿음직하고 효과적인 소프트웨어를 만들 수 있게 도와주는 끝내주는 언어입니다.
만약 rustup을 통해서 Rust의 이전버전을 설치해놓은 상대라면, 업데이트는 아주 쉽습니다. 그냥 이렇게 치면 돼요.
rustup update stable
rustup을 설치한 적이 없다면, 우리 웹사이트의 설치 페이지에서 받을 수 있습니다. 그리고 깃허브에서 이번 버전에 대한 릴리즈 노트를 참조해보세요.
1.57.0엔 무엇이 있나요?
Rust 1.57은 panic!을 const 컨텍스트로 가져왔고, Cargo에 대한 사용자 정의 프로필 지원을 추가했으며, 오류가 있던 예약된 API들을 stable화했습니다.
const 컨텍스트에서의 panic!
이전 버전에서 panic! 매크로는 const fn 및 기타 컴파일 타임 컨텍스트에서 사용할 수 없었습니다. 하지만 이제 안정화되었어요!
panic!의 안정화와 함께 이제 assert!와 같은 몇 가지 다른 표준 라이브러리 API를 const에서 사용할 수 있게 되었습니다.
이번 안정화는 아직 전체 formatting 인프라를 포함하지 않으므로 panic! 매크로는 정적 문자열(panic!("...")) 또는 보간된 값("panic!"("{}", a))으로 호출되어야만 합니다. 포맷지정자나 다른 트레잇도 없어야 하고요.
앞으로 이 지원은 확장될 것으로 예상하지만 이번의 작은 안정화는 이미 타입의 크기를 확인하는 것과 같이 간단한 컴파일 타임 assert를 가능하게 합니다.
const _: () = assert!(std::mem::size_of::
**const _: () = assert!(std::mem::size_of::
사용자 정의 프로필에 대한 cargo 지원
Cargo는 오랫동안 dev, release, test, bench의 네 가지 프로필을 지원해왔습니다.
Rust 1.57에서는 임의로 명명한 프로필에 대한 지원이 추가되었어요.
예를 들어 최종 프로덕션 빌드를 만들 때만 링크 시간 최적화(LTO)를 활성화하려는 경우 Cargo.toml에 다음 스니펫을 추가하면 이 프로필이 선택될 때 lto 플래그가 활성화되지만, 일반 릴리스 빌드에는 활성화되지 않습니다.
**[profile.production] **
**inherits = "release" **
**lto = true **
사용자 지정 프로필은 기본 설정을 상속하는 프로필을 지정해야 합니다.
프로필이 정의되면 코드를 빌드하는 Cargo 명령이 --profile production를 함께 사용하도록 요청할 수 있습니다.
현재 이것은 별도의 디렉터리(이 경우 target/production)에 아티팩트를 빌드합니다.
즉, 아티팩트가 디렉터리 간에 공유되지 않습니다.
실패 가능한 할당
Rust 1.57은 Vec, String, HashMap, HashSet, VecDeque에 대한 try_reserve를 안정화했습니다. 이 API를 사용하면 호출자가 이러한 타입에 대한 백업 스토리지를 잘못 할당할 수 있습니다.
Rust는 일반적으로 전역 allocator가 실패하면 프로세스를 중단하지만, 그게 항상 바람직한 것은 아닙니다.
이 API는 표준 라이브러리 컬렉션으로 작업할 때 중단을 방지하는 방법을 제공합니다.
하지만 Rust는 반환된 메모리가 실제로 커널에 의해 할당되는 것을 보장하지 않습니다.
예를 들어 Linux에서 overcommit이 활성화된 경우 사용을 시도할 때 메모리를 사용할 수 없을 수 있습니다.
Stable이 된 API들
다음의 메서드와 트레잇 구현들이 stable이 되었습니다.
[T; N]::as_mut_slice
[T; N]::as_slice
collections::TryReserveError
HashMap::try_reserve
HashSet::try_reserve
String::try_reserve
String::try_reserve_exact
Vec::try_reserve
Vec::try_reserve_exact
VecDeque::try_reserve
VecDeque::try_reserve_exact
Iterator::map_while
iter::MapWhile
proc_macro::is_available
Command::get_program
Command::get_args
Command::get_envs
Command::get_current_dir
CommandArgs
CommandEnvs
다음의 기존 stable 함수는 이제 const입니다.
hint::unreachable_unchecked
기타 변경점
1.57 릴리즈에는 이외의 기타 변경점들도 있습니다. Rust, Cargo, Clippy에서 무엇이 바뀌었는지 확인해보세요.
1.57.0의 컨트리뷰터들
1.57의 완성엔 수많은 사람들이 함께했습니다. 전부 여러분이 없었다면 불가능했을 거에요.
고마워요!