Ang paglabas ng system programming language na Rust 1.57, na itinatag ng proyekto ng Mozilla, ngunit ngayon ay binuo sa ilalim ng tangkilik ng independiyenteng non-profit na organisasyon na Rust Foundation, ay nai-publish. Nakatuon ang wika sa kaligtasan ng memorya, nagbibigay ng awtomatikong pamamahala ng memorya, at nagbibigay ng paraan upang makamit ang mataas na parallelism ng gawain nang hindi gumagamit ng garbage collector o runtime (runtime ay binabawasan sa pangunahing pagsisimula at pagpapanatili ng karaniwang library).
Ang awtomatikong pamamahala ng memorya ng Rust ay nagliligtas sa developer mula sa mga error kapag nagmamanipula ng mga pointer at pinoprotektahan laban sa mga problemang lumitaw dahil sa mababang antas ng pagmamanipula ng memorya, tulad ng pag-access sa isang lugar ng memorya pagkatapos itong mapalaya, pag-derefer ng mga null pointer, pag-overrun ng buffer, atbp. Upang ipamahagi ang mga aklatan, magbigay ng mga build at pamahalaan ang mga dependency, bubuo ang proyekto ng Cargo package manager. Ang crates.io repository ay suportado para sa pagho-host ng mga aklatan.
Mga pangunahing inobasyon:
- Π‘ΡΠ°Π±ΠΈΠ»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ°ΠΊΡΠΎΡΠ° Β«panic!Β» Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°Ρ , ΡΠΎΠ·Π΄Π°Π²Π°Π΅ΠΌΡΡ ΠΏΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ, ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ Β«const fnΒ». ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΏΠΎΠΌΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Β«panic!Β» Π² const-ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡΡ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ°ΠΊΡΠΎΡΠ° Β«assert!Β» ΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ Π΄ΡΡΠ³ΠΈΡ API ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ. Π‘ΡΠ°Π±ΠΈΠ»ΠΈΠ·Π°ΡΠΈΡ ΠΏΠΎΠΊΠ° Π½Π΅ ΠΎΡ Π²Π°ΡΡΠ²Π°Π΅Ρ Π²ΡΡ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΏΠΎΡΡΠΎΠΌΡ Π² ΡΠ΅ΠΊΡΡΠ΅ΠΌ Π²ΠΈΠ΄Π΅ ΠΌΠ°ΠΊΡΠΎΡ Β«panic!Β» ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ ΡΡΡΠΎΠΊΠ°ΠΌΠΈ (panic!(Β«β¦Β»)) ΠΈΠ»ΠΈ Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ½ΡΠ΅ΡΠΏΠΎΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ Β«&strΒ» ΠΏΡΠΈ ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠ΅ (panic!(Β«{}Β», a)), ΠΊΠΎΡΠΎΡΠΎΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°ΡΡΡΡ ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠΎΠΉ Β«{}Β» Π±Π΅Π· ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ² ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ Π΄ΡΡΠ³ΠΈΡ ΡΠΈΠΏΠ°ΠΆΠ΅ΠΉ. Π Π±ΡΠ΄ΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΠΎΡΡΡ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ² Π² ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°Ρ Π±ΡΠ΄Π΅Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½Π°, Π½ΠΎ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ ΡΠΆΠ΅ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ assert-ΠΏΡΠΎΠ²Π΅ΡΠΎΠΊ Π½Π° ΡΡΠ°ΠΏΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ: const _: () = assert!(std::mem::size_of::<u64>() == 8); const _: () = assert!(std::mem::size_of::<u8>() == 1);
- Π ΠΏΠ°ΠΊΠ΅ΡΠ½ΠΎΠΌ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΠ΅ Cargo ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΎΡΠΈΠ»Π΅ΠΉ Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ, Π½Π΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΡΠΌΠΈ Β«devΒ», Β«releaseΒ», Β«testΒ» ΠΈ Β«benchΒ». ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Π½Π° ΡΡΠ°ΠΏΠ΅ ΡΠ²ΡΠ·ΡΠ²Π°Π½ΠΈΡ (LTO) ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠΈΠ½Π°Π»ΡΠ½ΡΡ ΡΠ±ΠΎΡΠΎΠΊ ΠΏΡΠΎΠ΄ΡΠΊΡΠ° ΠΌΠΎΠΆΠ½ΠΎ Π² Cargo.toml ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΡΠΎΡΠΈΠ»Ρ Β«productionΒ» ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π² Π½Π΅Π³ΠΎ ΡΠ»Π°Π³ Β«lto = trueΒ». ΠΡΠΈ ΡΡΠΎΠΌ ΠΏΡΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ ΠΏΡΠΎΡΠΈΠ»Π΅ΠΉ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠΊΠ°Π·Π°ΡΡ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΉ ΠΏΡΠΎΡΠΈΠ»Ρ Π΄Π»Ρ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ ΠΈΠ· Π½Π΅Π³ΠΎ Π½Π°ΡΡΡΠΎΠ΅ΠΊ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ. Π ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π½ΠΈΠΆΠ΅ ΡΠΎΠ·Π΄Π°ΡΡΡΡ ΠΏΡΠΎΡΠΈΠ»Ρ Β«productionΒ», ΠΊΠΎΡΠΎΡΡΠΉ Π΄ΠΎΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΏΡΠΎΡΠΈΠ»Ρ Β«releaseΒ» Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠ»Π°Π³Π° Β«lto = trueΒ». Π‘Π°ΠΌ ΠΏΡΠΎΡΠΈΠ»Ρ Π°ΠΊΡΠΈΠ²ΠΈΡΡΠ΅ΡΡΡ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ cargo Ρ ΠΎΠΏΡΠΈΠ΅ΠΉ Β«βprofile productionΒ», Π° ΡΠ±ΠΎΡΠΎΡΠ½ΡΠ΅ Π°ΡΡΠ΅ΡΠ°ΠΊΡΡ Π±ΡΠ΄ΡΡ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½Ρ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ Β«target/productionΒ». [profile.production] inherits = Β«releaseΒ» lto = true
- Π‘ΡΠ°Π±ΠΈΠ»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ try_reserve Π΄Π»Ρ ΡΠΈΠΏΠΎΠ² Vec, String, HashMap, HashSet ΠΈ VecDeque, ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π·Π°ΡΠ°Π½Π΅Π΅ ΡΠ΅Π·Π΅ΡΠ²ΠΈΡΠΎΠ²Π°ΡΡ ΠΌΠ΅ΡΡΠΎ Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΠΎΠ³ΠΎ ΡΠΈΡΠ»Π° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΠ½ΠΈΠ·ΠΈΡΡ ΡΠ°ΡΡΠΎΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΡ ΠΏΠ°ΠΌΡΡΠΈ ΠΈ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ Π°Π²Π°ΡΠΈΠΉΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΡΠ°Π±ΠΎΡΡ ΠΈΠ·-Π·Π° Π½Π΅Ρ Π²Π°ΡΠΊΠΈ ΠΏΠ°ΠΌΡΡΠΈ.
- Π Π°Π·ΡΠ΅ΡΠ΅Π½ΠΎ ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ² Ρ ΡΠΈΠ³ΡΡΠ½ΡΠΌΠΈ ΡΠΊΠΎΠ±ΠΊΠ°ΠΌΠΈ Π² Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡΡ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ Β«m!{ .. }.method()Β» ΠΈ Β«m!{ .. }?Β».
- ΠΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°Π½ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΉ File::read_to_end ΠΈ read_to_string.
- Ang suporta para sa detalye ng Unicode ay na-update sa bersyon 14.0.
- Π Π°ΡΡΠΈΡΠ΅Π½ΠΎ ΡΠΈΡΠ»ΠΎ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΏΠΎΠΌΠ΅ΡΠ΅Π½Π½ΡΡ Β«#[must_use]Β» Π΄Π»Ρ Π²ΡΠ²ΠΎΠ΄Π° ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΡ Π² ΡΠ»ΡΡΠ°Π΅ ΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΡΡΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ Π²ΡΡΠ²ΠΈΡΡ ΠΎΡΠΈΠ±ΠΊΠΈ, Π²ΡΠ·Π²Π°Π½Π½ΡΠ΅ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ, ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, Π° Π½Π΅ Π²Π΅ΡΠ½ΡΡ Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅.
- ΠΠΎΠ±Π°Π²Π»Π΅Π½ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΡΠΉ Π±ΡΠΊΠ΅Π½Π΄ Π΄Π»Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΊΠΎΠ΄Π° Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ libgccjit.
- Ang isang bagong bahagi ng API ay inilipat sa kategorya ng stable, kabilang ang mga pamamaraan at pagpapatupad ng mga katangian ay na-stabilize:
- [T; N]::as_mut_slice
- [T; N]::as_slice
- collections::TryReserveError
- HashMap::try_reserve
- HashSet::try_reserve
- String::try_reserve
- String::try_reserve_exact
- Vec::try_reserve
- Vec::try_reserve_exact
- VecDeque::try_reserve
- VecDeque::try_reserve_exact
- Iterator::map_while
- iter::MapWhile
- proc_macro::is_available
- Command::get_program
- Command::get_args
- Command::get_envs
- Command::get_current_dir
- CommandArgs
- CommandEnvs
- ΠΡΠΈΠ·Π½Π°ΠΊ Β«constΒ», ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΠΈΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π² Π»ΡΠ±ΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ Π²ΠΌΠ΅ΡΡΠΎ ΠΊΠΎΠ½ΡΡΠ°Π½Ρ, ΠΏΡΠΈΠΌΠ΅Π½ΡΠ½ Π² ΡΡΠ½ΠΊΡΠΈΠΈ hint::unreachable_unchecked.
- Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΡΡΠ΅ΡΠΈΠΉ ΡΡΠΎΠ²Π΅Π½Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ Π΄Π»Ρ ΠΏΠ»Π°ΡΡΠΎΡΠΌ armv6k-nintendo-3ds, armv7-unknown-linux-uclibceabihf, m68k-unknown-linux-gnu, aarch64-kmc-solid_asp3, armv7a-kmc-solid_asp3-eabi ΠΈ armv7a-kmc-solid_asp3-eabihf. Π’ΡΠ΅ΡΠΈΠΉ ΡΡΠΎΠ²Π΅Π½Ρ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π΅Ρ Π±Π°Π·ΠΎΠ²ΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ, Π½ΠΎ Π±Π΅Π· Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΡΡ ΡΠ±ΠΎΡΠΎΠΊ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΠ±ΠΎΡΠΊΠΈ ΠΊΠΎΠ΄Π°.
Pinagmulan: opennet.ru