[Rust] 1.54.0 업데이트 발표 (번역)
https://blog.rust-lang.org/2021/07/29/Rust-1.54.0.html
우리 러스트 팀은 새 버전 [1.54.0]을 발표하게 돼서 정말 기쁩니다!
러스트는 누구든 믿음직하고 효과적인 소프트웨어를 만들 수 있게 도와주는 끝내주는 언어입니다.
만약 rustup을 통해서 Rust의 이전버전을 설치해놓은 상대라면, 업데이트는 아주 쉽습니다. 그냥 이렇게 치면 돼요.
rustup update stable
rustup을 설치한 적이 없다면, 우리 웹사이트의 설치 페이지에서 받을 수 있습니다. 그리고 깃허브에서 이번 버전에 대한 릴리즈 노트를 참조해보세요.
1.54.0엔 무엇이 있나요?
(공란)
Attributes에서 function-like macros 호출
Rust 1.54는 속성 내에서 함수형 매크로를 호출하는 기능을 지원합니다.
함수형 매크로는 macro!(...)와 같이 호출할 수 있는 macro_rules! 베이스나 절차적 매크로 중 하나입니다.
여기에 대한 한 가지 주목할만한 사용 사례는 다른 파일의 문서를 Rust 문서 주석으로 포함하는 것입니다.
예를 들어 프로젝트의 README가 좋은 문서 주석을 표현할 경우 include_str!을 사용해서 내용을 직접 통합할 수 있습니다.
이전에는 다양한 방법을 통해 유사한 기능을 사용할 수 있었지만 1.54부터는 훨씬 더 인체공학적으로 개선되었습니다.
**#![doc = include_str!("README.md")] **
매크로는 속성 내부에도 중첩될 수 있습니다. 예를 들어 빌드 스크립트에서 생성한 콘텐츠를 포함할 수 있습니다.
**#[path = concat!(env!("OUT_DIR"), "/generated.rs")] **
**mod generated; **
여기에서 더 자세한 정보를 확인할 수 있어요.
wasm32 intrinsics의 stable화
wasm32 플랫폼의 여러 instrinsic이 안정화되어 웹어셈블리의 SIMD 명령에 액세스할 수 있습니다.
특히 이전에 안정화된 x86 및 x86_64 instrinsic과 달리 적절한 타겟 기능이 활성화된 경우에만 호출되어야 하는 안전 요구사항이 없습니다.
이건 웹어셈블리가 처음부터 코드를 실행하기 전에 안전성을 검증하도록 작성되었기 때문에, 명령이 올바르게 디코딩되거나 전혀 디코딩되지 않을 것을 보장합니다.
즉, 일부 intrinsic을 완전히 안전한 함수로 노출할 수 있습니다. (예: v128_bitselect).
그러나 v128_load와 같은 unsafe한 intrinsic들도 여전히 있습니다. raw 포인터를 사용하거든요.
증분 컴파일이 기본으로 활성화
증분 컴파일은 1.52.1에서 기본 비활성화되었다가 이 릴리스에서 다시 활성화되었습니다.
Rust 1.52에서는 디스크 상의 캐시에서 증분 컴파일 데이터를 로드할 때 추가 유효성 검사가 추가되었습니다. 그 결과 검증을 통해 조용한(soundness) 버그가 내부 컴파일러 오류(ICE)로 변경됨에 따라 기존에 존재하던 잠재적인 건전성 문제가 다수 발견되었습니다.
이에 대한 응답으로 컴파일러 팀은 1.52.1 패치에서 증분 컴파일을 비활성화하기로 결정하여 사용자가 컴파일 시간이 길어지는 대신 ICE와 기본 불건전함을 피할 수 있도록 했습니다.
그 이후로 우리는 일련의 회고를 실시했으며 기여자들은 보고된 문제를 해결하기 위해 열심히 노력했습니다. 일부 수정 사항은 1.53에 적용되었고 대부분은 이번 릴리스에 적용됩니다.
현재 ICE를 유발할 수 있는 두 가지 알려진 문제가 있습니다. 자동화된 충돌 보고가 없기 때문에 미해결 문제가 미치는 영향의 전체 범위를 확신할 수 없습니다.
그러나 1.52 릴리스의 영향을 받는 사용자로부터 받은 피드백에 따르면 나머지 문제는 실제로 드물다고 생각합니다.
따라서 이 릴리스에서 증분 컴파일이 다시 활성화되었습니다!
Stable이 된 API들
다음 메서드와 트레잇 구현들이 stable이 되었습니다.
BTreeMap::into_keys
BTreeMap::into_values
HashMap::into_keys
HashMap::into_values
arch::wasm32
VecDeque::binary_search
VecDeque::binary_search_by
VecDeque::binary_search_by_key
VecDeque::partition_point
기타 변경점
1.54 릴리즈에는 이외의 기타 변경점들도 있습니다. Rust, Cargo, Clippy에서 무엇이 바뀌었는지 확인해보세요.
또한 Rustfmt는 1.54.0 릴리즈에서 중첩된 out-of-line 모듈의 형식을 올바르게 지정하도록 수정되었습니다. 이로 인해 1.53.0 rustfmt에서 무시되었던 파일 형식이 변경될 수 있습니다. 여기에서 세부정보를 확인하세요.
1.54.0의 컨트리뷰터들
1.54의 완성엔 수많은 사람들이 함께했습니다. 전부 여러분이 없었다면 불가능했을 거에요.
고마워요!