Yo te pibliye piblikasyon langaj pwogramasyon jeneral Rust 1.82, ki te fonde pa pwojè Mozilla, men kounye a devlope sou ejid òganizasyon endepandan ki pa pou pwofi Rust Foundation. Lang la konsantre sou sekirite memwa epi li bay mwayen pou reyalize gwo paralèl nan ekzekisyon travay, pandan y ap evite itilizasyon yon pèseptè fatra ak tan exécute (se redui tan an nan inisyalizasyon debaz ak antretyen nan bibliyotèk la estanda).
Teknik jesyon memwa Rust yo libere pwomotè a soti nan erè manipilasyon konsèy epi pwoteje kont pwoblèm ki rive nan manipilasyon memwa ki ba-nivo, tankou aksè apre-gratis, dereferans pointer nil, depase tanpon, ak lòt bagay. Pou distribye bibliyotèk, asire asanble ak jere depandans, pwojè a ap devlope manadjè pake kago. Repozitwa crates.io sipòte pou hosting bibliyotèk.
Sekirite memwa aplike nan Rust nan moman konpile atravè chèk referans, swiv pwopriyetè objè, konsiderasyon pou tout lavi objè (delimitasyon) ak evalyasyon aksè memwa nan tan exécution. Rust tou bay pwoteksyon kont debòde nonb antye relatif, mande pou valè varyab yo dwe inisyalize anvan yo itilize, gen pi bon manyen erè nan bibliyotèk estanda a, sèvi ak konsèp nan referans imuiabl ak varyab pa default, epi li ofri fò sezisman estatik pou minimize erè lojik.
Prensipal inovasyon:
- Yo te ajoute lòd "enfòmasyon" nan manadjè pake kago a pou montre enfòmasyon sou yon pake nan repozitwa a.
- Te ajoute sipò pou sentaks "itilize<...>" nan "impl Trait", ki espesifye enfòmasyon sou kalite kache yo. Pou egzanp, "impl Trait + use<'x, T>" presize ke se sèlman paramèt "x" ak "T" yo gen dwa itilize nan yon kalite kache.
- Yo te pwopoze yon sentaks separe pou kreye endikasyon anvan tout koreksyon, ranplase makro yo te itilize deja: macro "addr_of!(expr)" te ranplase pa operatè "&raw const expr", epi macro "addr_of_mut!(expr)" te ranplase. pa "&raw mut" operatè ekspr". struct Pake { not_aligned_field: i32, } fn main () { let p = Pake { not_aligned_field: 1_82 }; // Ansyen fason yo kreye yon konsèy anvan tout koreksyon kite ptr = std::ptr::addr_of!(p.not_aligned_field); // Nouvo fason pou kreye yon konsèy anvan tout koreksyon let ptr = &raw const p.not_aligned_field; kite val = ensekirite { ptr.read_unaligned () }; }
- Li posib pou defini fonksyon ki an sekirite ak konstan ak yon lavi 'estatik' andedan blòk ekstèn ak atribi "ensekirite" (anvan, tout eleman nan yon "ensekirite ekstèn" te kapab sèlman gen atribi "ensekirite" la: unsafe extern { pub safe estatik TAU: f64; pub safe fn sqrt (x: f64) -> f64; pub unsafe fn strlen(p: *const u8) -> usize; }
- Atribi no_mangle, link_section ak export_name, ki ka mennen nan yon konpòtman ki pa defini, yo konsidere kounye a san danje epi yo mande pou yon drapo "ensekirite" klè, pa egzanp: #[unsafe(no_mangle)] pub fn my_global_function() { }
- Korespondans modèl pèmèt kalite vid yo dwe sote, tankou "enum Void {}" oswa estrikti ki gen yon jaden vid vizib. sèvi ak std::convert::Infaillible; pub fn unwrap_without_panic (x: rezilta ) -> T { kite Ok(x) = x; // "Err" ka sote x }
- Kalite nimewo yo k ap flote (f32 ak f64) gen konpòtman estanda lè yo trete valè NaN ki pa nimerik (0.0/0.0), epi tou li pèmèt yo sèvi ak operasyon pwen k ap flote nan konst fn.
- Insérer asanble yo bay kapasite pou sèvi ak operands ak atribi "const" pou itilize dirèkteman valè nimerik nonb antye relatif san yo pa premye estoke yo nan yon rejis. const MSG: &str = "Bonjou, lemonn!\n"; ensekirite { core::arch::asm!( "mov rdx, {LEN} // enstriksyon 'mov rdx, 14′" ap pwodwi, LEN = const MSG.len(), … ); }
- Adrese ekspresyon ak atribi "estatik" la pèmèt nan yon kontèks ki an sekirite san yo pa defini yon blòk ki pa an sekirite (operatè "&raw mut" ak "&raw const" pa afekte valè operand la epi sèlman kreye yon konsèy sou li): static mut. STATIC_MUT: Kalite = Kalite::nouvo(); ekstèn "C" { static EXTERN_STATIC: Kalite; } fn main() { let static_mut_ptr = &raw mut STATIC_MUT; kite extern_static_ptr = &raw const EXTERN_STATIC; }
- Yon nouvo pòsyon nan API a te transfere nan kategori ki estab, ki gen ladan metòd yo ak aplikasyon karakteristik yo:
- std::thread::Builder::spawn_unchecked
- std::str::CharIndices::offset
- std::option::Option::is_none_or
- [T]::se_triye
- [T]::se_triye_pa
- [T]::se_triye_pa_kle
- Iteratè::se_sorted
- Iteratè::se_sorted_by
- Iteratè::se_triye_pa_kle
- std::future::Ready::nan_inner
- std::iter::repeat_n
- impl DoubleEndedIterator pou Take
Sous: opennet.ru
