Mozilla ํ๋ก์ ํธ์ ์ํด ์ค๋ฆฝ๋์์ง๋ง ํ์ฌ๋ ๋ ๋ฆฝ์ ์ธ ๋น์๋ฆฌ ์กฐ์ง์ธ Rust Foundation์ ํ์์ผ๋ก ๊ฐ๋ฐ๋ Rust 1.74 ๋ฒ์ฉ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ์ถ์๊ฐ ๋ฐํ๋์์ต๋๋ค. ์ด ์ธ์ด๋ ๋ฉ๋ชจ๋ฆฌ ์์ ์ ์ค์ ์ ๋๊ณ ๊ฐ๋น์ง ์์ง๊ธฐ ๋ฐ ๋ฐํ์(๋ฐํ์์ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ธฐ๋ณธ ์ด๊ธฐํ ๋ฐ ์ ์ง ๊ด๋ฆฌ๋ก ์ถ์๋จ)์ ์ฌ์ฉ์ ํผํ๋ฉด์ ๋์ ์์ ๋ณ๋ ฌ์ฑ์ ๋ฌ์ฑํ ์ ์๋ ์๋จ์ ์ ๊ณตํฉ๋๋ค.
Rust์ ๋ฉ๋ชจ๋ฆฌ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ์ ํฌ์ธํฐ๋ฅผ ์กฐ์ํ ๋ ๊ฐ๋ฐ์๋ฅผ ์ค๋ฅ๋ก๋ถํฐ ๋ณดํธํ๊ณ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ด ํด์ ๋ ํ ์ก์ธ์ค, null ํฌ์ธํฐ ์ญ์ฐธ์กฐ, ๋ฒํผ ์ค๋ฒ๋ฐ ๋ฑ๊ณผ ๊ฐ์ ์ ์์ค ๋ฉ๋ชจ๋ฆฌ ์ฒ๋ฆฌ๋ก ์ธํด ๋ฐ์ํ๋ ๋ฌธ์ ๋ก๋ถํฐ ๋ณดํธํฉ๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐฐํฌ, ๋น๋ ์ ๊ณต ๋ฐ ์ข ์์ฑ ๊ด๋ฆฌ๋ฅผ ์ํด ํ๋ก์ ํธ๋ Cargo ํจํค์ง ๊ด๋ฆฌ์๋ฅผ ๊ฐ๋ฐํฉ๋๋ค. crates.io ์ ์ฅ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํธ์คํ ์ ์ํด ์ง์๋ฉ๋๋ค.
๋ฉ๋ชจ๋ฆฌ ์์ ์ ์ปดํ์ผ ์๊ฐ์ ์ฐธ์กฐ ํ์ธ, ๊ฐ์ฒด ์์ ๊ถ ์ถ์ , ๊ฐ์ฒด ์๋ช (๋ฒ์) ์ถ์ ๋ฐ ์ฝ๋ ์คํ ์ค ๋ฉ๋ชจ๋ฆฌ ์ก์ธ์ค์ ์ ํ์ฑ ํ๊ฐ๋ฅผ ํตํด Rust์์ ์ ๊ณต๋ฉ๋๋ค. Rust๋ ๋ํ ์ ์ ์ค๋ฒํ๋ก์ ๋ํ ๋ณดํธ ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ณ , ์ฌ์ฉํ๊ธฐ ์ ์ ๋ณ์ ๊ฐ์ ํ์ ์ด๊ธฐํ๊ฐ ํ์ํ๋ฉฐ, ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ค๋ฅ๋ฅผ ๋ ์ ์ฒ๋ฆฌํ๊ณ , ๊ธฐ๋ณธ์ ์ผ๋ก ๋ถ๋ณ ์ฐธ์กฐ ๋ฐ ๋ณ์ ๊ฐ๋ ์ ์ ์ฉํ๊ณ , ๊ฐ๋ ฅํ ์ ์ ์ ํ ์ง์ ์ ์ ๊ณตํ์ฌ ๋ ผ๋ฆฌ์ ์ค๋ฅ๋ฅผ ์ต์ํํฉ๋๋ค.
์ฃผ์ ํ์ :
- ํจํค์ง ๊ด๋ฆฌ์ ๋งค๋ํ์คํธ์ ํจ๊ป Cargo.toml ํ์ผ์ ํตํด Lint ๊ฒ์ฌ๋ฅผ ๊ตฌ์ฑํ๋ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋์์ต๋๋ค. ์๋ต ์์ค(๊ธ์ง, ๊ฑฐ๋ถ, ๊ฒฝ๊ณ , ํ์ฉ)๊ณผ ๊ฐ์ ๋ฆฐํธ ์ค์ ์ ์ ์ํ๊ธฐ ์ํด ์๋ก์ด ์น์ โ[lints]โ ๋ฐ โ[workspace.lints]โ๊ฐ ์ ์๋๋ฉฐ, ์ด์ ๋ํ ๊ฒฐ์ ์ ๋ด๋ฆด ๋ ๋ณ๊ฒฝ ์ฌํญ์ด ๊ณ ๋ ค๋ฉ๋๋ค. ์ฌ๊ฑด์ถ. ์๋ฅผ ๋ค์ด "#![forbid(unsafe_code)]" ๋ฐ "#![deny(clippy)๋ฅผ ์กฐ๋ฆฝํ๊ฑฐ๋ ์ถ๊ฐํ ๋ "-F", "-D", "-W" ๋ฐ "-A" ํ๋๊ทธ๋ฅผ ์ง์ ํ๋ ๋์ :โ ์์ฑ์ ์ฝ๋์ ์ถ๊ฐ) :enum_glob_use)]"๋ ์ด์ Cargo ๋งค๋ํ์คํธ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค: [lints.rust] unsafe_code = "forbid" [lints.clippy] enum_glob_use = "deny"
- Crate ํจํค์ง ๊ด๋ฆฌ์์ ์ ์ฅ์์ ์ฐ๊ฒฐํ ๋ ์ธ์ฆํ๋ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋์์ต๋๋ค. ๊ธฐ๋ณธ ๋ฐฐํฌ์๋ Linux ์๊ฒฉ ์ฆ๋ช ์ ์ฅ์(libsecret ๊ธฐ๋ฐ), macOS(ํค์ฒด์ธ) ๋ฐ Windows(Windows ์๊ฒฉ ์ฆ๋ช ๊ด๋ฆฌ์)์ ์ธ์ฆ ๋งค๊ฐ ๋ณ์๋ฅผ ๋ฐฐ์นํ๋ ์ง์์ด ํฌํจ๋์ด ์์ง๋ง ์์คํ ์ ์ฒ์์ ๋ชจ๋์์ผ๋ก ๋ง๋ค์ด์ก์ผ๋ฉฐ ์ ์ฅ ๋ฐ ์ ์ฅ์ ์ํด ๋ค์ํ ๊ณต๊ธ์์ ์์ ์ ๊ตฌ์ฑํ ์ ์์ต๋๋ค. ํ ํฐ ์์ฑ(์: 1Password ๋น๋ฐ๋ฒํธ ๊ด๋ฆฌ์ ์ฌ์ฉ์ ์ํ ํ๋ฌ๊ทธ์ธ์ด ์ค๋น๋์์ต๋๋ค. ํจํค์ง๊ฐ ๊ฒ์๋์๋์ง ํ์ธํ๋ ๊ฒ๋ฟ๋ง ์๋๋ผ ๋ชจ๋ ์์ ์ ๋ํด ์ ์ฅ์์์ ์ธ์ฆ์ด ํ์ํ ์ ์์ต๋๋ค. ~/.cargo/config.toml [registry] global-credential-providers = ["cargo:token", "cargo:libsecret"]
- ๋ฐํ ์ ํ ํ๋ก์ ์ (impl_trait_projections)์ ๋ํ ์ง์์ด ์์ ํ๋์ด "async fn" ๋ฐ "->impl Trait"์ ๊ฐ์ ๋ฐํ ์ ํ์์ Self ๋ฐ T::Assoc๋ฅผ ์ธ๊ธํ ์ ์์ต๋๋ค. struct Wrapper<'a, T>(&'a T); // `Self`๋ฅผ ์ธ๊ธํ๋ ๋ถํฌ๋ช ํ ๋ฐํ ์ ํ: impl Wrapper<'_, ()> { async fn async_fn() -> Self { /* โฆ */ } fn impl_trait() -> impl Iterator { /* โฆ */ } } ํน์ฑ Trait<'a> { type Assoc; fn new() -> ์์ฒด::Assoc; } impl Trait<'_> for () { type Assoc = (); fn new() {} } // ์ฐ๊ด๋ ์ ํ์ ์ธ๊ธํ๋ ๋ถํฌ๋ช ํ ๋ฐํ ์ ํ: impl<'a, T: Trait<'a>> Wrapper<'a, T> { async fn mk_assoc() -> T::Assoc { /* โฆ */ } fn a_few_assocs() -> impl ๋ฐ๋ณต์ { /* โฆ */ } }
- API์ ์๋ก์ด ๋ถ๋ถ์ด ์์ ํ๋ ํน์ฑ์ ๋ฉ์๋ ๋ฐ ๊ตฌํ์ ํฌํจํ์ฌ ์์ ์ ์ธ ๋ฒ์ฃผ๋ก ์ด๋๋์์ต๋๋ค.
- ์์ ๋์ ๋ชจ๋ ์ปจํ
์คํธ์์ ์ฌ์ฉํ ๊ฐ๋ฅ์ฑ์ ๊ฒฐ์ ํ๋ "const" ์์ฑ์ ํจ์์์ ์ฌ์ฉ๋ฉ๋๋ค.
- ์ฝ์ด::mem::transmute_copy
- str::is_ascii
- [u8]::is_ascii
- ์ฝ์ด::๋ฒํธ::ํฌํ
- impl From std::process::Stdio
- impl From std::process::Stdio
- impl From std::process::Child{Stdin, Stdout, Stderr}
- impl From std::process::Child{Stdin, Stdout, Stderr}
- std::ffi::OsString::from_encoded_bytes_unchecked
- std::ffi::OsString::into_encoded_bytes
- std::ffi::OsStr::from_encoded_bytes_unchecked
- std::ffi::OsStr::as_encoded_bytes
- ํ์ค::io::์ค๋ฅ::๊ธฐํ
- impl TryFrom u16์ ์ํด
- ์์ <&[T; N]>Vec์ ๊ฒฝ์ฐ
- ์์ <&mut [T; N]>Vec์ ๊ฒฝ์ฐ
- ์์ <[T; N]> ํธ์ ๊ฒฝ์ฐ<[T]>
- ์์ <[T; Rc์ ๊ฒฝ์ฐ N]><[T]>
- ์ปดํ์ผ๋ฌ, ํดํท, ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ ์์ฑ๋ ์ ํ๋ฆฌ์ผ์ด์ ์คํ ํ์ผ์ Apple ํ๋ซํผ์ ๋ํ ์๊ตฌ ์ฌํญ์ด ์ฆ๊ฐํ์ฌ ์ด์ ์คํํ๋ ค๋ฉด 10.12๋ ์ ์ถ์๋ macOS 10 Sierra, iOS 10 ๋ฐ tvOS 2016 ์ด์์ด ํ์ํฉ๋๋ค.
- i686-pc-windows-gnullvm ํ๋ซํผ์ ๋ํ ์ธ ๋ฒ์งธ ์์ค์ ์ง์์ด ๊ตฌํ๋์์ต๋๋ค. ์ธ ๋ฒ์งธ ์์ค์๋ ๊ธฐ๋ณธ ์ง์์ด ํฌํจ๋์ง๋ง ์๋ํ๋ ํ ์คํธ, ๊ณต์ ๋น๋ ๊ฒ์ ๋๋ ์ฝ๋ ๋น๋ ๊ฐ๋ฅ ์ฌ๋ถ ํ์ธ์ ํฌํจ๋์ง ์์ต๋๋ค.
- loongarch64-unknown-none ๋์ ํ๋ซํผ์ ๋ํ ๋ ๋ฒ์งธ ์์ค์ ์ง์์ด ๊ตฌํ๋์์ต๋๋ค. ๋ ๋ฒ์งธ ์์ค์ ์ง์์๋ ์กฐ๋ฆฝ ๋ณด์ฆ์ด ํฌํจ๋ฉ๋๋ค.
๋ํ Rust ์ธ์ด์ ๊ด๋ จ๋ ๋ ๊ฐ์ง ์ด๋ฒคํธ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
- ์คํ์์ค ํ๋ก์ ํธ์ ๋ณด์์ ๊ฐํํ๊ธฐ ์ํด ๋ง๋ค์ด์ง OSTIF(์คํ์์ค ๊ธฐ์ ๊ฐ์ ๊ธฐ๊ธ)๊ฐ ์์ ๋ณ ํ์ดํผ๋ฐ์ด์ ๋ฐ ๊ฐ์ ๋จธ์ ๋ชจ๋ํฐ(VMM) ์์ฑ์ ์ํ ๊ตฌ์ฑ ์์๋ฅผ ์ ๊ณตํ๋ RustVMM ํ๋ก์ ํธ์ ๋ํ ๊ฐ์ฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ์ต๋๋ค. Intel, Alibaba, Amazon, Google, Linaro ๋ฐ Red Hat๊ณผ ๊ฐ์ ํ์ฌ๊ฐ ํ๋ก์ ํธ ๊ฐ๋ฐ์ ์ฐธ์ฌํ๊ณ ์์ต๋๋ค. Intel Cloud Hypervisor์ Dragonball ํ์ดํผ๋ฐ์ด์ ๋ RustVMM์ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ๋ฐ๋๊ณ ์์ต๋๋ค. ๊ฐ์ฌ๋ฅผ ํตํด ์ฝ๋ ๋ฒ ์ด์ค์ ๋์ ํ์ง๊ณผ ์ต๋ ๋ณด์ ๋ฌ์ฑ์ ๋ชฉํ๋ก ํ๋ ์ํคํ ์ฒ ๋ฐ ๊ตฌํ ๊ธฐ์ ์ ์ฌ์ฉ์ด ํ์ธ๋์์ต๋๋ค. ๊ฐ์ฌ ๊ณผ์ ์์ ์์ ์ ์ง์ ์ ์ธ ์ํฅ์ ๋ฏธ์น์ง ์๋ 6๊ฐ์ง ๋ฌธ์ ๊ฐ ํ์ธ๋์์ต๋๋ค.
- Google์ Rust ์ธ์ด๋ก ๋ค์ ์์ฑ๋ Binder ํ๋ก์ธ์ค ๊ฐ ํต์ ๋ฉ์ปค๋์ฆ์ ์๋ก์ด ๊ตฌํ์ Linux ์ปค๋ ๊ฐ๋ฐ์ ๋ฉ์ผ๋ง ๋ฆฌ์คํธ์ ๋์ ํ์ต๋๋ค. ์ฌ์์ ์ Android์์ ๋ฉ๋ชจ๋ฆฌ ์์ ์ ๋ณด์์ ๊ฐํํ๊ณ ์์ ํ ํ๋ก๊ทธ๋๋ฐ ๊ธฐ์ ์ ์ฅ๋ คํ๋ฉฐ ๋ฌธ์ ์๋ณ์ ํจ์จ์ฑ์ ๋์ด๊ธฐ ์ํ ํ๋ก์ ํธ์ ์ผํ์ผ๋ก ์ํ๋์์ต๋๋ค(Android์์ ์๋ณ๋ ๋ชจ๋ ์ํํ ์ทจ์ฝ์ ์ ์ฝ 70%๋ ๋ฉ๋ชจ๋ฆฌ ์์ ์ ์ค๋ฅ๋ก ์ธํด ๋ฐ์ํจ). ). Rust์์ Binder๋ฅผ ๊ตฌํํ๋ฉด C ์ธ์ด์ ์๋ ๋ฒ์ ๊ณผ ๊ธฐ๋ฅ ๋ฉด์์ ํจ๋ฆฌํฐ๊ฐ ๋ฌ์ฑ๋์์ผ๋ฉฐ ๋ชจ๋ AOSP(Android ์คํ ์์ค ํ๋ก์ ํธ) ํ ์คํธ๋ฅผ ํต๊ณผํ์ผ๋ฉฐ ํ์จ์ด์ ์์ ๋ฒ์ ์ ๋ง๋๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ ๊ตฌํ์ ์ฑ๋ฅ์ ๊ฑฐ์ ๋์ผํ ์์ค์ ๋๋ค(ํธ์ฐจ -1.96% ๋ฐ +1.38% ์ด๋ด).
์ถ์ฒ : opennet.ru