[Rust] 1.49.0 업데이트 발표 (번역)
https://blog.rust-lang.org/2020/12/31/Rust-1.49.0.html
우리 러스트 팀은 새 버전 [1.49.0]을 발표하게 돼서 정말 기쁩니다!
러스트는 누구든 믿음직하고 효과적인 소프트웨어를 만들 수 있게 도와주는 끝내주는 언어입니다.
만약 rustup을 통해서 Rust의 이전버전을 설치해놓은 상대라면, 업데이트는 아주 쉽습니다. 그냥 이렇게 치면 돼요.
rustup update stable
rustup을 설치한 적이 없다면, 우리 웹사이트의 설치 페이지에서 받을 수 있습니다. 그리고 깃허브에서 이번 버전에 대한 릴리즈 노트를 참조해보세요.
1.49.0엔 무엇이 있나요?
이번 릴리즈엔 새 타겟들의 추가와 테스트 프레임워크의 개선점이 돋보입니다.
본 포스트에서 다루지 않은 기타 변경점들은 상세 릴리즈 노트를 참고하세요.
64비트 ARM 리눅스가 Tier 1에 도달
Rust 컴파일러는 아주 폭넓은 타겟들을 지원합니다. 하지만 Rust 팀이 그것들에 모두 동일한 수준의 지원을 제공해줄 수는 없어요.
그래서 각각의 타겟들이 얼마나 지원되는지를 명확히 표시하기 위해 tier 시스템을 사용합니다.
Tier 3 타겟들은 컴파일러가 기술적으로 지원이 되긴 됩니다. 하지만 그 코드가 테스트를 통과했는지 여부를 확인하지 않으며, 릴리즈 시에 사전빌드된 바이너리를 제공하지 않습니다.
Tier 2 타겟들은 빌드를 보장하고, 사전빌드된 바이너리도 제공됩니다.
하지만 각 플랫폼에서 test suite를 실행하지 않습니다. 그래서 생성된 바이너리가 작동하지 않거나 버그가 있을 수 있죠.
Tier 1 타겟들은 최고의 지원을 보장합니다.
컴파일러가 변경될때마다 각각의 플랫폼에서 test suite를 전부 실행해보죠.
사전빌드된 바이너리도 유효합니다.
Rust 1.49.0은 이제 aarch64-unknown-linux-gnu 타겟을 Tier 1 지원으로 승격해, 해당 사용자들에게 최고의 보장을 제공합니다.
이 변경사항은 임베디드에서 데스크탑 및 서버에 이르는 워크로드에 도움이 될 것으로 기대됩니다.
x86이 아닌 타겟이 tier 1 지원에 도달한 것은 이번이 처음이기 때문에, 앞으로의 중요한 이정표가 될 겁니다.
이 한 걸음이, 앞으로 더 많은 타겟들을 최고 tire로 올릴 수 있는 밑거름이 되길 고대합니다.
참고로 Android는 다른 Tier 2 타겟을 사용하므로, 이 변경사항의 영향을 받지 않습니다.
64비트 ARM macOS와 Windows가 Tier 2에 도달
Rust 1.49.0은 또한 2개의 타겟을 Tier 2로 지원합니다.
The aarch64-apple-darwin 타겟은 애플 M1 시스템에서 Rust에 대한 지원을 제공합니다.
The aarch64-pc-windows-msvc 타겟은 ARM에서 Windows를 실행하는 ARM 디바이스들에서 Rust에 대한 지원을 제공합니다.
개발자들은 이제 이 2개 타겟에서 rustup을 통해 사전빌드된 바이너리를 받아쓸 수 있을 겁니다!
Rust 팀은 이 플랫폼들에서 test suite들을 실행하진 않습니다. 그래서 버그나 불안정한 부분이 있을 수 있어요.
테스트 프레임워크가 스레드들의 출력을 캡쳐
Rust의 내장 테스트 프레임워크에는 많은 기능이 있진 않습니다. 하지만 개선점이 없다는 뜻은 아니에요!
다음과 같은 테스트를 고려해보죠.
**#[test] **
**fn thready_pass() **
**{ **
** println!("fee"); **
** std:🧵:spawn(|| { **
** println!("fie"); **
** println!("foe"); **
** }) **
** .join() **
** .unwrap(); **
** println!("fum"); **
**} **
1.49 이전에 이 테스트를 실행했다면 이런식으로만 뜰 겁니다.
❯ cargo +1.48.0 test Compiling threadtest v0.1.0 (C:\threadtest) Finished test [unoptimized + debuginfo] target(s) in 0.38s
Running target\debug\deps\threadtest-02f42ffd9836cae5.exe** **
**running 1 test **
**fie **
**foe **
**test thready_pass ... ok **
**test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out **
**Doc-tests threadtest **
**running 0 tests **
**test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out **
스레드의 출력이 프린트돼서 테스트 프레임워크 자체의 출력과 혼합되는 것을 볼 수 있습니다.
모든 println!들이 println!("fum")처럼 작동하는게 좋지 않을까요?
❯ cargo test Compiling threadtest v0.1.0 (C:\threadtest) Finished test [unoptimized + debuginfo] target(s) in 0.52s Running target\debug\deps\threadtest-40aabfaa345584be.exe** **
running 1 test
**test thready_pass ... ok **
**test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Doc-tests threadtest **
**running 0 tests **
**test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s **
음.. 이제 아무것도 안 보이네요.
그래도 걱정하지 마세요.
테스트가 실패한 경우에도 모든 출력이 표시됩니다. 패닉을 추가해서! 테스트가 끝날 때까지 그 실패가 어떻게 생겨먹었는지 확인할 수 있습니다.
❯ cargo test Compiling threadtest v0.1.0 (C:\threadtest) Finished test [unoptimized + debuginfo] target(s) in 0.52s Running target\debug\deps\threadtest-40aabfaa345584be.exe** **
**running 1 test **
**test thready_pass ... FAILED **
**failures: **
**---- thready_pass stdout ---- **
**fee **
**fie **
**foe **
**fum **
thread 'thready_pass' panicked at 'explicit panic', src**lib.rs:11:5 **
특히, 테스트 실행기는 출력을 캡처하고 테스트가 실패 할 경우 그걸 저장합니다.
라이브러리 변경점
Rust 1.49에서는 다음 3개의 stable 함수가 새로 추가되었습니다.
slice::select_nth_unstable
slice::select_nth_unstable_by
slice::select_nth_unstable_by_key
그리고 2개의 함수가 const가 되었습니다.
Poll::is_ready
Poll::is_pending
다른 변경점들에 대해서는 상세 릴리즈 노트를 참조하세요.
기타 변경점
1.49 릴리즈에는 이외의 기타 변경점들도 있습니다. Rust, Cargo, Clippy에서 무엇이 바뀌었는지 확인해보세요.
1.49.0의 컨트리뷰터들
1.49의 완성엔 수많은 사람들이 함께했습니다. 전부 여러분이 없었다면 불가능했을 거에요.
고마워요!
