Mozilla ํ๋ก์ ํธ์ ์ํด ์ค๋ฆฝ๋์์ง๋ง ํ์ฌ๋ ๋ ๋ฆฝ์ ์ธ ๋น์๋ฆฌ ์กฐ์ง์ธ Rust Foundation์ ํ์์ผ๋ก ๊ฐ๋ฐ๋ ์์คํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด Rust 1.53์ ์ถ์๊ฐ ๋ฐํ๋์์ต๋๋ค. ์ด ์ธ์ด๋ ๋ฉ๋ชจ๋ฆฌ ์์ ์ ์ค์ ์ ๋๊ณ ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ์ ๊ณตํ๋ฉฐ ๊ฐ๋น์ง ์์ง๊ธฐ๋ ๋ฐํ์์ ์ฌ์ฉํ์ง ์๊ณ ๋์ ์์ ๋ณ๋ ฌ์ฑ์ ๋ฌ์ฑํ ์ ์๋ ์๋จ์ ์ ๊ณตํฉ๋๋ค(๋ฐํ์์ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ธฐ๋ณธ ์ด๊ธฐํ ๋ฐ ์ ์ง ๊ด๋ฆฌ๋ก ๋จ์ถ๋ฉ๋๋ค).
Rust์ ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ ํฌ์ธํฐ๋ฅผ ์กฐ์ํ ๋ ์ค๋ฅ๋ฅผ ์ ๊ฑฐํ๊ณ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ด ํด์ ๋ ํ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์ก์ธ์คํ๋ ๊ฒ, ๋ ํฌ์ธํฐ ์ญ์ฐธ์กฐ, ๋ฒํผ ์ค๋ฒ๋ฐ ๋ฑ๊ณผ ๊ฐ์ ์ ์์ค ๋ฉ๋ชจ๋ฆฌ ์กฐ์์ผ๋ก ์ธํด ๋ฐ์ํ๋ ๋ฌธ์ ๋ก๋ถํฐ ๋ณดํธํฉ๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ฐฐํฌํ๊ณ ์ด์ ๋ธ๋ฆฌ๋ฅผ ๋ณด์ฅํ๋ฉฐ ์ข ์์ฑ์ ๊ด๋ฆฌํ๊ธฐ ์ํด ํ๋ก์ ํธ๋ Cargo ํจํค์ง ๊ด๋ฆฌ์๋ฅผ ๊ฐ๋ฐํ๊ณ ์์ต๋๋ค. crates.io ์ ์ฅ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํธ์คํ ์ ์ํด ์ง์๋ฉ๋๋ค.
์ฃผ์ ํ์ :
- ๋ฐฐ์ด์ ๊ฒฝ์ฐ IntoIterator ํน์ฑ์ด ๊ตฌํ๋์ด ๋ฐฐ์ด ์์์ ๋ฐ๋ณต์ ๊ฐ์ผ๋ก ๊ตฌ์ฑํ ์ ์์ต๋๋ค: for i in [1, 2, 3] { .. }
๋ฐ๋ณต์๋ฅผ ํ์ฉํ๋ ๋ฉ์๋์ ๋ฐฐ์ด์ ์ ๋ฌํ๋ ๊ฒ๋ ๊ฐ๋ฅํฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค: let set = BTreeSet::from_iter([1, 2, 3]); for (a, b) in some_iterator.chain([1]).zip([1, 2, 3]) { .. }
์ด์ ์๋ IntoIterator๊ฐ ๋ฐฐ์ด ์ฐธ์กฐ์๋ง ๊ตฌํ๋์์ต๋๋ค. ์ฐธ์กฐ("&[1, 2, 3]") ๋๋ "[1, 2, 3].iter()"๋ฅผ ์ฌ์ฉํด์ผ ํ๋ ๊ฐ์ ๋ฐ๋ณตํฉ๋๋ค. ๋ฐฐ์ด์ ๋ํ IntoIterator ๊ตฌํ์ array.into_iter()์์ (&array).into_iter()๋ก์ ์ด์ ์ปดํ์ผ๋ฌ ๋ณํ์ผ๋ก ์ธํด ๋ฐ์ํ ํธํ์ฑ ๋ฌธ์ ๋ก ์ธํด ๋ฐฉํด๋ฅผ ๋ฐ์์ต๋๋ค. ์ด๋ฌํ ๋ฌธ์ ๋ ํด๊ฒฐ ๋ฐฉ๋ฒ์ผ๋ก ํด๊ฒฐ๋์์ต๋๋ค. ์ปดํ์ผ๋ฌ๋ ๋ง์น IntoIterator ํน์ฑ์ ๊ตฌํ์ด ์๋ ๊ฒ์ฒ๋ผ ๊ณ์ํด์ array.into_iter()๋ฅผ (&array).into_iter()๋ก ๋ณํํ์ง๋ง, ".into_iter( )" ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๋ฉฐ "in [1, 2, 3]", "iter.zip([1, 2, 3])", "IntoIterator::into_iter([1, 2, 3] ํ์์ ํธ์ถ์ ๊ฑด๋๋ฆฌ์ง ์์ต๋๋ค. )".
- ํํ์ "|"์ ์ง์ ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด "Some(1) | Some(2)" ์ด์ "Some(1 | 2)"๋ผ๊ณ ์ธ ์ ์์ต๋๋ค. ์ผ์น ๊ฒฐ๊ณผ { Ok(Some(1 | 2)) => { .. } Err(MyError { kind: FileNotFound | PermissionDenied, .. }) = > { .. } _ => { .. } }
- ์ ๋์ฝ๋ UAX 31 ์ฌ์์ ์ ์๋ ๋ชจ๋ ๊ตญ๊ฐ ๋ฌธ์๋ฅผ ํฌํจํ์ฌ ์๋ณ์์ ASCII๊ฐ ์๋ ๋ฌธ์๋ฅผ ์ฌ์ฉํ ์ ์์ง๋ง ์ด๋ชจํฐ์ฝ ๋ฌธ์๋ ์ ์ธ๋ฉ๋๋ค. ๋ค๋ฅด์ง๋ง ์ ์ฌํ ๋ฌธ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ปดํ์ผ๋ฌ๋ ๊ฒฝ๊ณ ๋ฅผ ํ์ํฉ๋๋ค. const BLร HAJ: &str = "๐ฆ"; struct ไบบ { ์ด๋ฆ: ๋ฌธ์์ด, } let ฮฑ = 1; letos = 2; ๊ฒฝ๊ณ : '๏ฝ'์ 's' ์ฌ์ด์ ํผ๋ ๊ฐ๋ฅํ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋๋ ์๋ณ์ ์
- ๋ค์๊ณผ ๊ฐ์ ์์ ํ๋ API๋ฅผ ํฌํจํ์ฌ API์ ์๋ก์ด ๋ถ๋ถ์ด ์์ ์ ์ธ ๋ฒ์ฃผ๋ก ์ด์ ๋์์ต๋๋ค.
- ๋ฐฐ์ด::from_ref
- ๋ฐฐ์ด::from_mut
- AtomicBool::fetch_update
- AtomicPtr::fetch_update
- BTreeSet::์ ์ง
- BTreeMap::๋ณด์
- BufReader::seek_relative
- cmp::min_by
- cmp::min_by_key
- cmp::max_by
- cmp::max_by_key
- DebugStruct::finish_non_exhaustive
- ๊ธฐ๊ฐ::ZERO
- ๊ธฐ๊ฐ::MAX
- ๊ธฐ๊ฐ::is_zero
- ๊ธฐ๊ฐ::saturating_add
- ๊ธฐ๊ฐ::saturating_sub
- ๊ธฐ๊ฐ::saturating_mul
- f32::is_subnormal
- f64::is_subnormal
- ๋ฐฐ์ด์ฉ IntoIterator
- {์ ์}::๋นํธ
- io::์ค๋ฅ::์ง์๋์ง ์์
- NonZero*::leading_zeros
- NonZero*::trailing_zeros
- ์ต์ ::์ฝ์
- ์ฃผ๋ฌธ::is_eq
- ์ฃผ๋ฌธ::is_ne
- ์ฃผ๋ฌธ::is_lt
- ์ฃผ๋ฌธ::is_gt
- ์ฃผ๋ฌธ::is_le
- ์ฃผ๋ฌธ::is_ge
- OsStr::make_ascii_lowercase
- OsStr::make_ascii_uppercase
- OsStr::to_ascii_lowercase
- OsStr::to_ascii_uppercase
- OsStr::is_ascii
- OsStr::eq_ignore_ascii_case
- ํผ์ปค๋ธ::peek_mut
- Rc::increment_strong_count
- Rc::decrement_strong_count
- ์ฌ๋ผ์ด์ค::IterMut::as_slice
- Slice::IterMut์ ๋ํ AsRef<[T]>
- impl SliceIndex for(๋ฐ์ด๋ , ๋ฐ์ด๋ )
- Vec::extend_from_within
- wasm64-unknown-unknown ํ๋ซํผ์ ๋ํ ์ธ ๋ฒ์งธ ์์ค์ ์ง์์ด ๊ตฌํ๋์์ต๋๋ค. ์ธ ๋ฒ์งธ ์์ค์๋ ๊ธฐ๋ณธ ์ง์์ด ํฌํจ๋์ง๋ง ์๋ํ๋ ํ ์คํธ, ๊ณต์ ๋น๋ ๊ฒ์ ๋๋ ์ฝ๋ ๋น๋ ๊ฐ๋ฅ ์ฌ๋ถ ํ์ธ์ ํฌํจ๋์ง ์์ต๋๋ค.
- Cargo ํจํค์ง ๊ด๋ฆฌ์๋ ๊ธฐ๋ณธ์ ์ผ๋ก Git ์ ์ฅ์(HEAD)์ ๋ฉ์ธ ๋ธ๋์น์ "main"์ด๋ผ๋ ์ด๋ฆ์ ์ฌ์ฉํ๋๋ก ์ด๋๋์์ต๋๋ค. master ๋์ main์ด๋ผ๋ ์ด๋ฆ์ ์ฌ์ฉํ๋ ๋ฆฌํฌ์งํ ๋ฆฌ์์ ํธ์คํ ๋๋ ์ข ์์ฑ์ ๊ตฌ์ฑํ๋ ค๋ฉด ๋ ์ด์ Branch = "main"์ด ํ์ํ์ง ์์ต๋๋ค.
- ์ปดํ์ผ๋ฌ์์๋ LLVM์ ์ต์ ๋ฒ์ ์ ๋ํ ์๊ตฌ ์ฌํญ์ด LLVM 10์ผ๋ก ์ํฅ ์กฐ์ ๋์์ต๋๋ค.
์ถ๊ฐ์ ์ผ๋ก, ์ฐ๋ฆฌ๋ Rust ์ธ์ด๋ก ๊ตฌ์ฑ์์๋ฅผ ๊ฐ๋ฐํ๊ธฐ ์ํ ๋๊ตฌ์ Linux ์ปค๋ ํตํฉ ๊ฐ๋ฐ์ ์ํ ์๊ธ ์ ๊ณต์ ์ฃผ๋ชฉํ ์ ์์ต๋๋ค. ์ด ์์ ์ Let's Encrypt ํ๋ก์ ํธ์ ์ฐฝ๋ฆฝ์์ธ ISRG ์กฐ์ง(์ธํฐ๋ท ๋ณด์ ์ฐ๊ตฌ ๊ทธ๋ฃน)์ ํ์ ํ์ Prossimo ํ๋ก์ ํธ ํ๋ ์์ํฌ ๋ด์์ ์ํ๋๋ฉฐ HTTPS ๋ฐ ๋ณด์์ ๊ฐํํ๋ ๊ธฐ์ ๊ฐ๋ฐ์ ์ด์งํฉ๋๋ค. ์ธํฐ๋ท. ์๊ธ์ Google์์ ์ ๊ณตํ๋ฉฐ Rust-for-Linux ํ๋ก์ ํธ์ ์ ์์ธ Miguel Ojeda์ ์์ ๋น์ฉ์ ์ง๋ถํฉ๋๋ค. ์ด์ ์ ISRG์ Google์ ์ด๋ฏธ ์ปฌ ์ ํธ๋ฆฌํฐ๋ฅผ ์ํ ๋์ฒด HTTP ๋ฐฑ์๋ ์์ฑ๊ณผ Apache http ์๋ฒ๋ฅผ ์ํ ์๋ก์ด TLS ๋ชจ๋ ๊ฐ๋ฐ์ ์๊ธ์ ์ง์ํ์ต๋๋ค.
Microsoft์ Google์ ๋ฐ๋ฅด๋ฉด ์ทจ์ฝ์ ์ ์ฝ 70%๋ ์์ ํ์ง ์์ ๋ฉ๋ชจ๋ฆฌ ์ฒ๋ฆฌ๋ก ์ธํด ๋ฐ์ํฉ๋๋ค. ์ฅ์น ๋๋ผ์ด๋ฒ์ ๊ฐ์ ์ปค๋ ๊ตฌ์ฑ ์์๋ฅผ ๊ฐ๋ฐํ๊ธฐ ์ํด Rust ์ธ์ด๋ฅผ ์ฌ์ฉํ๋ฉด ์์ ํ์ง ์์ ๋ฉ๋ชจ๋ฆฌ ์ฒ๋ฆฌ๋ก ์ธํด ๋ฐ์ํ๋ ์ทจ์ฝ์ ์ ์ํ์ด ์ค์ด๋ค๊ณ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ด ํด์ ๋ ํ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์ก์ธ์คํ๊ฑฐ๋ ๋ฒํผ ๊ฒฝ๊ณ๊ฐ ์ด๊ณผ๋๋ ์ค๋ฅ๊ฐ ์ ๊ฑฐ๋ ๊ฒ์ผ๋ก ์์๋ฉ๋๋ค.
๋ฉ๋ชจ๋ฆฌ ์์ ์ฒ๋ฆฌ๋ ์ฝ๋ ์คํ ์ค ๋ฉ๋ชจ๋ฆฌ ์ก์ธ์ค์ ์ ํ์ฑ ํ๊ฐ๋ฟ๋ง ์๋๋ผ ์ฐธ์กฐ ํ์ธ, ๊ฐ์ฒด ์์ ๊ถ ๋ฐ ๊ฐ์ฒด ์๋ช
(๋ฒ์) ์ถ์ ์ ํตํด ์ปดํ์ผ ์๊ฐ์ Rust์์ ์ ๊ณต๋ฉ๋๋ค. Rust๋ ๋ํ ์ ์ ์ค๋ฒํ๋ก์ ๋ํ ๋ณดํธ ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ณ , ์ฌ์ฉํ๊ธฐ ์ ์ ๋ณ์ ๊ฐ์ ํ์ ์ด๊ธฐํ๊ฐ ํ์ํ๋ฉฐ, ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ค๋ฅ๋ฅผ ๋ ์ ์ฒ๋ฆฌํ๊ณ , ๊ธฐ๋ณธ์ ์ผ๋ก ๋ถ๋ณ ์ฐธ์กฐ ๋ฐ ๋ณ์ ๊ฐ๋
์ ์ ์ฉํ๊ณ , ๊ฐ๋ ฅํ ์ ์ ์ ํ ์ง์ ์ ์ ๊ณตํ์ฌ ๋
ผ๋ฆฌ์ ์ค๋ฅ๋ฅผ ์ต์ํํฉ๋๋ค.
์ถ์ฒ : opennet.ru