Ang pagpagawas sa Rust 1.59 nga kinatibuk-ang katuyoan nga programming language, nga gitukod sa proyekto sa Mozilla, apan karon naugmad ubos sa pagdumala sa independenteng non-profit nga organisasyon nga Rust Foundation, gimantala. Ang lengguwahe nagtutok sa kaluwasan sa panumduman ug naghatag sa mga paagi aron makab-ot ang taas nga paralelismo sa trabaho samtang naglikay sa paggamit sa usa ka tigkolekta sa basura ug runtime (ang runtime gikunhoran ngadto sa batakang pagsugod ug pagmentinar sa standard library).
Ang mga pamaagi sa pagdumala sa panumduman sa Rust nagluwas sa developer gikan sa mga sayup sa pagmaniobra sa mga pointer ug pagpanalipod batok sa mga problema nga motumaw tungod sa ubos nga lebel sa pagdumala sa panumduman, sama sa pag-access sa usa ka lugar sa panumduman human kini mapagawas, pagtangtang sa mga null pointer, pag-overrun sa buffer, ug uban pa. Sa pag-apod-apod sa mga librarya, paghatag og mga pagtukod ug pagdumala sa mga dependency, ang proyekto nagpalambo sa Cargo package manager. Gisuportahan ang crates.io repository alang sa pag-host sa mga librarya.
Ang kaluwasan sa panumduman gihatag sa Rust sa oras sa pag-compile pinaagi sa pagsusi sa reference, pagsubay sa pagpanag-iya sa butang, pagsubay sa mga kinabuhi sa butang (scopes), ug pagtimbang-timbang sa pagkahusto sa pag-access sa memorya sa panahon sa pagpatuman sa code. Naghatag usab ang Rust og proteksyon batok sa pag-awas sa integer, nanginahanglan mandatory nga pagsugod sa mga variable nga kantidad sa wala pa gamiton, pagdumala sa mga sayup nga mas maayo sa standard nga librarya, gipadapat ang konsepto sa dili mausab nga mga pakisayran ug mga variable nga default, nagtanyag kusog nga static nga pag-type aron maminusan ang mga lohikal nga sayup.
Panguna nga mga inobasyon:
- Posible nga magamit ang mga pagsal-ot sa sinultian sa asembliya, nga gipangayo sa mga aplikasyon nga kinahanglan nga kontrolon ang pagpatuman sa usa ka ubos nga lebel o magamit ang mga espesyal nga panudlo sa makina. Ang mga pagsal-ot sa asembliya gidugang gamit ang mga macros nga "asm!" ug "global_asm!" gamit ang string formatting syntax para sa pagngalan sa mga rehistro nga susama sa gigamit sa string substitutions sa Rust. Gisuportahan sa compiler ang mga instruksyon sa asembliya alang sa x86, x86-64, ARM, AArch64 ug RISC-V nga mga arkitektura. Pananglitan sa pagsal-ot: gamita ang std::arch::asm; // I-multiply ang x sa 6 gamit ang shifts ug idugang ang let mut x: u64 = 4; dili luwas {asm!("mov {tmp}, {x}", "shl {tmp}, 1", "shl {x}, 2", "dugang {x}, {tmp}", x = inout(reg ) x, tmp = gawas(reg) _, ); } assert_eq!(x, 4 * 6);
- Gidugang nga suporta alang sa naguba (parallel) nga mga buluhaton, diin daghang mga kinaiya, mga hiwa o istruktura ang gipiho sa wala nga bahin sa ekspresyon. Pananglitan: let (a, b, c, d, e); (a, b) = (1, 2); [c, .., d, _] = [1, 2, 3, 4, 5]; Struct { e, .. } = Struct { e: 5, f: 3 }; assert_eq!([1, 2, 1, 4, 5], [a, b, c, d, e]);
- Ang abilidad sa pagtino sa default nga mga bili alang sa const generics gihatag: struct ArrayStorage { arr: [T; N], } impl ArrayStorage { fn bag-o(a: T, b: T) -> ArrayStorage { ArrayStorage { arr: [a, b], } } }
- Ang tagdumala sa pakete sa Cargo naghatag mga pasidaan bahin sa paggamit sa dili balido nga mga istruktura sa mga dependency nga giproseso tungod sa mga sayup sa compiler (pananglitan, tungod sa usa ka sayup, ang mga natad sa mga istruktura nga giputos gitugotan nga mahulaman sa luwas nga mga bloke). Ang ingon nga mga pagtukod dili na suportahan sa umaabot nga bersyon sa Rust.
- Ang mga kargamento ug rustc adunay usa ka built-in nga abilidad sa pagmugna sa mga executable nga mga file nga gihukasan sa debugging data (strip = "debuginfo") ug mga simbolo (strip = "mga simbolo"), nga wala kinahanglana nga tawagan ang usa ka bulag nga utility. Gipatuman ang setting sa paglimpyo pinaagi sa parameter nga "strip" sa Cargo.toml: [profile.release] strip = "debuginfo", "mga simbolo"
- Ang incremental nga compilation gi-disable pinaagi sa default. Ang hinungdan giingon nga usa ka temporaryo nga solusyon alang sa usa ka bug sa compiler nga nagdala sa mga pag-crash ug mga sayup sa deserialization. Ang pag-ayo sa bug giandam na ug ilakip sa sunod nga pagpagawas. Para ibalik ang incremental compilation, mahimo nimong gamiton ang environment variable RUSTC_FORCE_INCREMENTAL=1.
- Usa ka bag-ong bahin sa API ang gibalhin sa kategorya nga stable, lakip ang mga pamaagi ug pagpatuman sa mga kinaiya nga na-stabilize:
- std::thread::available_parallelism
- Resulta::gikopya
- Resulta:: cloned
- arko::asm!
- arch::global_asm!
- ops::ControlFlow::is_break
- ops::ControlFlow::is_padayon
- TryFrom para sa u8
- char::TryFromCharError (Clone, Debug, Display, PartialEq, Copy, Eq, Error)
- iter::zip
- NonZeroU8::maoy_gahum_sa_duha
- NonZeroU16::maoy_gahum_sa_duha
- NonZeroU32::maoy_gahum_sa_duha
- NonZeroU64::maoy_gahum_sa_duha
- NonZeroU128::maoy_gahum_sa_duha
- DoubleEndedIterator para sa ToLowercase nga istruktura
- DoubleEndedIterator para sa ToUppercase nga istruktura
- TryFrom<&mut [T]> para sa [T; N]
- UnwindSafe alang sa Kausa nga istruktura
- RefUnwindSafe sa Makausa
- armv8 neon nga suporta nga mga gimbuhaton nga gitukod sa compiler alang sa aarch64
- Ang "const" nga hiyas, nga nagtino sa posibilidad sa paggamit niini sa bisan unsa nga konteksto imbes nga mga constant, gigamit sa mga gimbuhaton:
- mem::MaybeUninit::as_ptr
- mem::MaybeUninit::assume_init
- mem::MaybeUninit::assume_init_ref
- ffi::CStr::from_bytes_with_nul_unchecked
Source: opennet.ru
