Rust 1.74 ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ์ถœ์‹œ. RustVMM ๊ฐ์‚ฌ. Rust์—์„œ ๋ฐ”์ธ๋” ๋‹ค์‹œ ์ž‘์„ฑ

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

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€