1.45 versiooni vĂ€ljalase sĂŒsteemse programmeerimise keelest , mille Mozilla. Keel keskendub mĂ€lu ohutusele, tagab automaatse mĂ€lu juhtimise ja pakub tööde kĂ”rge paralleelsuse saavutamise vahendeid, ilma et oleks vaja prĂŒgikorjajat ja .
Rustis automaatne mĂ€lu haldus vabastab arendaja nĂ€idikutest ja kaitseb madala taseme mĂ€lu kĂ€sitlusega seotud probleemide eest, nagu nĂ€iteks mĂ€lu juurde pÀÀsemine pĂ€rast selle vabastamist, nullnĂ€idikute dereferentsimine, puhverserverist vĂ€lja minemine jne. Teegikogude levitamiseks, koostamise tagamiseks ja sĂ”ltuvuste haldamiseks areneb vĂ€lja pakihaldur. , mis vĂ”imaldab vajalikke raamatukogusid ĂŒhe klikiga hankida. Raamatukogude paigutamiseks toetatakse hoidlapaiku .
Peamised :
- Pikaajaline tĂ€isarvude ja ujukoma numbrite vaheliste konversioonide teostamisel. Kuna Rusti kompilaator kasutab backendina LLVM-i, viidi tĂŒĂŒbi konversioonide toimingud ellu LLVM-i vahekoodeksinstruktsioonide kaudu, nagu , milles on ĂŒks oluline omadus â mÀÀramatu kĂ€itumine, kui tulemuslik vÀÀrtus ei mahu siht tĂŒĂŒbisse. NĂ€iteks konverteerimisel ujuvvÀÀrtusest 300 tĂŒĂŒbi f32-ga tĂ€isarvutĂŒĂŒpidesse u8 on tulemus ettearvamatu ja vĂ”ib varieeruda erinevates sĂŒsteemides. Probleem seisneb selles, et selline omadus avaldub koodis, mis ei ole mĂ€rgitud kui «unsafe».
Alates Rust 1.45 on tĂŒĂŒbi ĂŒlevoolu kĂ€itumine rangelt reguleeritud ning operatsioon "as" teostab ĂŒlevoolu kontrolli ja viib muudetud vÀÀrtuse siht tĂŒĂŒbi maksimaalsesse vĂ”i minimaalsetesse vÀÀrtustesse (ĂŒlaltoodud nĂ€ite puhul muudetakse vÀÀrtus 300 vÀÀrtuseks 255). Selliste kontrollide keelamiseks on ette nĂ€htud tĂ€iendavad API kutsed «{f64, f32}::to_int_unchecked», mis töötavad unsafe reĆŸiimis.
fn cast(x: f32) -> u8 {
x as u8
}fn main() {
let too_big = 300.0;
let too_small = -100.0;
let nan = f32::NAN;let x: f32 = 1.0;
let y: u8 = unsafe { x.to_int_unchecked() };println!(«too_big_casted = {}», cast(too_big)); // vÀljund 255
println!(«too_small_casted = {}», cast(too_small)); // vÀljund 0
println!(«not_a_number_casted = {}», cast(nan)); // vÀljund 0
} - Stabiliseeritud kasutamine , mis funktsioonidega sarnaste makrode kutse vĂ”imaldamiseks. Varasemalt vĂ”isid sarnased makrod olla kutsetes, ainult teatud koha koodis (erikutsena, mitte teise koodiga segamini). Makrode, mis on funktsioonidega sarnased, kutseviiside laiendamine oli ĂŒks nĂ”udmisi web-raamistiku toimimise tagamiseks. stabiilsetes Rust'i vĂ€ljalasketes. Varasemalt oli Rocket'is töötlejate mÀÀramiseks lisapaindlikkuse saavutamiseks vajalik eksperimentaalne funktsioon «proc_macro_hygiene», mis ei olnud saadaval Rust'i stabiilsetes versioonides. NĂŒĂŒd on nimetatud funktsionaalsus sisse ehitatud keele stabiilsetesse versioonidesse.
- Lubatud on kasutada «char» tĂŒĂŒpi vahemikke vahemiku vÀÀrtuste lĂ€bimiseks (ops::{Range, RangeFrom, RangeFull, RangeInclusive, RangeTo}):
for ch in âaâ..=âzâ {
print!(«{}», ch);
}
println!(); // TrĂŒkitakse «abcdefghijklmnopqrstuvwxyz» - Uue API osa on tĂ”lgitud stabiilsete ridade hulka, sealhulgas on stabiliseeritud
Arc::as_ptr,
BTreeMap::remove_entry,
Rc::as_ptr,
rc::Weak::as_ptr,
rc::Weak::from_raw,
rc::Weak::into_raw,
str::strip_prefix,
str::strip_suffix,
sync::Weak::as_ptr,
sync::Weak::from_raw,
sync::Weak::into_raw,
char::UNICODE_VERSION,
Span::resolved_at,
Span::located_at,
Span::mixed_site,
unix::process::CommandExt::arg0. - Rustc kompilaatorisse on lisatud tugi erinevate sihtplatvormi omaduste ĂŒlevaatamiseks "target-feature" lipu abil, nĂ€iteks "-C target-feature=+avx2,+fma". Samuti on lisatud uued lipud:
"force-unwind-tables" kÔnede mahtude (unwind) tabelite genereerimiseks sÔltumata kokkujooksu kÀsitlemise strateegiast; "embed-bitcode" LLVM-bitkoodi sisestamise kontrollimiseks genereeritavates rlibs. "Embed-bitcode" lipp on vaikimisi aktiveeritud Cargo jaoks, et optimeerida kogumise aega ja kettaruumi tarbimist. - Mipsel-sony-psp ja thumbv7a-uwp-windows-msvc platvormide kolmanda taseme toimetamine. Kolmas tase tÀhendab pÔhilist toetust, kuid ilma automatiseeritud testimise ja ametlike kogude avaldamiseta.
Lisaks saab mĂ€rkida lihtsama Rust'i keeles, mis kĂ€ivitub sĂŒsteemi laadija abil ja on valmis iseseisvaks laadimiseks operatsioonisĂŒsteemi asemel.
Artikkel on esimene seerias, mis on pĂŒhendatud madala taseme programmeerimise ja operatsioonisĂŒsteemide arendamise tehnikate demonstreerimisele.
Allikas: opennet.ru
