Rust 1.69 ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ๋ฆด๋ฆฌ์Šค

Mozilla ํ”„๋กœ์ ํŠธ์— ์˜ํ•ด ์„ค๋ฆฝ๋˜์—ˆ์ง€๋งŒ ํ˜„์žฌ๋Š” ๋…๋ฆฝ์ ์ธ ๋น„์˜๋ฆฌ ์กฐ์ง์ธ Rust Foundation์˜ ํ›„์›์œผ๋กœ ๊ฐœ๋ฐœ๋œ Rust 1.69 ๋ฒ”์šฉ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ์ถœ์‹œ๊ฐ€ ๋ฐœํ‘œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ์–ธ์–ด๋Š” ๋ฉ”๋ชจ๋ฆฌ ์•ˆ์ „์— ์ค‘์ ์„ ๋‘๊ณ  ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘๊ธฐ ๋ฐ ๋Ÿฐํƒ€์ž„(๋Ÿฐํƒ€์ž„์€ ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๊ธฐ๋ณธ ์ดˆ๊ธฐํ™” ๋ฐ ์œ ์ง€ ๊ด€๋ฆฌ๋กœ ์ถ•์†Œ๋จ)์˜ ์‚ฌ์šฉ์„ ํ”ผํ•˜๋ฉด์„œ ๋†’์€ ์ž‘์—… ๋ณ‘๋ ฌ์„ฑ์„ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ์ˆ˜๋‹จ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

Rust์˜ ๋ฉ”๋ชจ๋ฆฌ ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•์€ ํฌ์ธํ„ฐ๋ฅผ ์กฐ์ž‘ํ•  ๋•Œ ๊ฐœ๋ฐœ์ž๋ฅผ ์˜ค๋ฅ˜๋กœ๋ถ€ํ„ฐ ๋ณดํ˜ธํ•˜๊ณ  ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ด ํ•ด์ œ๋œ ํ›„ ์•ก์„ธ์Šค, null ํฌ์ธํ„ฐ ์—ญ์ฐธ์กฐ, ๋ฒ„ํผ ์˜ค๋ฒ„๋Ÿฐ ๋“ฑ๊ณผ ๊ฐ™์€ ์ €์ˆ˜์ค€ ๋ฉ”๋ชจ๋ฆฌ ์ฒ˜๋ฆฌ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๋กœ๋ถ€ํ„ฐ ๋ณดํ˜ธํ•ฉ๋‹ˆ๋‹ค. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฐฐํฌ, ๋นŒ๋“œ ์ œ๊ณต ๋ฐ ์ข…์†์„ฑ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ํ”„๋กœ์ ํŠธ๋Š” Cargo ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž๋ฅผ ๊ฐœ๋ฐœํ•ฉ๋‹ˆ๋‹ค. crates.io ์ €์žฅ์†Œ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ˜ธ์ŠคํŒ…์„ ์œ„ํ•ด ์ง€์›๋ฉ๋‹ˆ๋‹ค.

๋ฉ”๋ชจ๋ฆฌ ์•ˆ์ „์€ ์ปดํŒŒ์ผ ์‹œ๊ฐ„์— ์ฐธ์กฐ ํ™•์ธ, ๊ฐœ์ฒด ์†Œ์œ ๊ถŒ ์ถ”์ , ๊ฐœ์ฒด ์ˆ˜๋ช…(๋ฒ”์œ„) ์ถ”์  ๋ฐ ์ฝ”๋“œ ์‹คํ–‰ ์ค‘ ๋ฉ”๋ชจ๋ฆฌ ์•ก์„ธ์Šค์˜ ์ •ํ™•์„ฑ ํ‰๊ฐ€๋ฅผ ํ†ตํ•ด Rust์—์„œ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. Rust๋Š” ๋˜ํ•œ ์ •์ˆ˜ ์˜ค๋ฒ„ํ”Œ๋กœ์— ๋Œ€ํ•œ ๋ณดํ˜ธ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๊ณ , ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๋ณ€์ˆ˜ ๊ฐ’์˜ ํ•„์ˆ˜ ์ดˆ๊ธฐํ™”๊ฐ€ ํ•„์š”ํ•˜๋ฉฐ, ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์˜ค๋ฅ˜๋ฅผ ๋” ์ž˜ ์ฒ˜๋ฆฌํ•˜๊ณ , ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ถˆ๋ณ€ ์ฐธ์กฐ ๋ฐ ๋ณ€์ˆ˜ ๊ฐœ๋…์„ ์ ์šฉํ•˜๊ณ , ๊ฐ•๋ ฅํ•œ ์ •์  ์œ ํ˜• ์ง€์ •์„ ์ œ๊ณตํ•˜์—ฌ ๋…ผ๋ฆฌ์  ์˜ค๋ฅ˜๋ฅผ ์ตœ์†Œํ™”ํ•ฉ๋‹ˆ๋‹ค.

์ฃผ์š” ํ˜์‹ :

  • ํ™”๋ฌผ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž๋Š” ์ž๋™์œผ๋กœ ํ•ด๊ฒฐ๋  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ๊ณ  ๊ฐ์ง€์™€ "cargo fix" ๋˜๋Š” "cargo Clippy -fix" ์‹คํ–‰์„ ์œ„ํ•œ ์ ์ ˆํ•œ ๊ถŒ์žฅ ์‚ฌํ•ญ์˜ ์ถœ๋ ฅ์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. ๊ฒฝ๊ณ : ์‚ฌ์šฉ๋˜์ง€ ์•Š์€ ๊ฐ€์ ธ์˜ค๊ธฐ: 'std::hash::Hash' โ€”> src/main.rs:1:5 | 1 | std::hash::Hash๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”. | ^^^^^^^^^^^^^^^^^ | = ์ฐธ๊ณ : '#[warn(unused_imports)]'๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ผœ์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฒฝ๊ณ : 'foo' (bin "foo")๊ฐ€ 1๊ฐœ์˜ ๊ฒฝ๊ณ ๋ฅผ ์ƒ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค(1๊ฐœ์˜ ์ œ์•ˆ์„ ์ ์šฉํ•˜๋ ค๋ฉด 'cargo fix โ€”bin "foo"'๋ฅผ ์‹คํ–‰ํ•˜์„ธ์š”).
  • Cargo๋Š” "cargo install" ๋ช…๋ น์œผ๋กœ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ค์น˜ํ•˜๋ ค๊ณ  ํ•  ๋•Œ "cargo add" ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ๊ถŒ์žฅ ์ถœ๋ ฅ์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์ปดํŒŒ์ผ ์‹œ๊ฐ„์„ ์ค„์ด๊ธฐ ์œ„ํ•ด ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ์— ๋””๋ฒ„๊น… ์ •๋ณด ํฌํ•จ์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ์ค‘์ง€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์‹คํ–‰๋˜๋ฉด ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•ด ๋ˆˆ์— ๋„๋Š” ์ฐจ์ด๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์ง€๋งŒ, ์‹คํŒจ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์—ญ์ถ”์  ๋คํ”„์— ํฌํ•จ๋˜๋Š” ์ •๋ณด๊ฐ€ ์ค„์–ด๋“ญ๋‹ˆ๋‹ค. Cargo.toml์— ์ด์ „ ๋™์ž‘์„ ๋˜๋Œ๋ฆฌ๋ ค๋ฉด ๋‹ค์Œ์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค: [profile.dev.build-override] debug = true [profile.release.build-override] debug = true
  • API์˜ ์ƒˆ๋กœ์šด ๋ถ€๋ถ„์ด ์•ˆ์ •ํ™”๋œ ํŠน์„ฑ์˜ ๋ฉ”์„œ๋“œ ๋ฐ ๊ตฌํ˜„์„ ํฌํ•จํ•˜์—ฌ ์•ˆ์ •์ ์ธ ๋ฒ”์ฃผ๋กœ ์ด๋™๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
    • CStr::from_bytes_until_nul
    • ์ฝ”์–ด::ffi::FromBytesUntilNulError
  • ์ƒ์ˆ˜ ๋Œ€์‹  ๋ชจ๋“  ์ปจํ…์ŠคํŠธ์—์„œ ์‚ฌ์šฉํ•  ๊ฐ€๋Šฅ์„ฑ์„ ๊ฒฐ์ •ํ•˜๋Š” "const" ์†์„ฑ์€ ํ•จ์ˆ˜์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
    • ์†Œ์ผ“์ฃผ์†Œ::์ƒˆ
    • ์†Œ์ผ“์ฃผ์†Œ::ip
    • ์†Œ์ผ“์ฃผ์†Œ::ํฌํŠธ
    • SocketAddr::is_ipv4
    • SocketAddr::is_ipv6
    • SocketAddrV4::์ƒˆ ํ•ญ๋ชฉ
    • SocketAddrV4::ip
    • SocketAddrV4::ํฌํŠธ
    • SocketAddrV6::์ƒˆ ํ•ญ๋ชฉ
    • SocketAddrV6::ip
    • SocketAddrV6::ํฌํŠธ
    • SocketAddrV6::flowinfo
    • SocketAddrV6::scope_id
  • ์ปดํŒŒ์ผ๋Ÿฌ ์ธ์ˆ˜์— true ๋ฐ false ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

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