lëshimi 1.45 i gjuhës së programimit sistemik , e bazuar në projektin Mozilla. Gjuha fokusohet në sigurinë e menaxhimit të memories, siguron menaxhim automatik të memories dhe ofron mjete për arritjen e një paralelizmi të lartë në ekzekutimin e detyrave, duke u shmangur kështu përdorimit të mbledhësve të plehrave dhe .
Menaxhimi automatizuar i memories në Rust e çliron zhvilluesin nga gabimet gjatë manipulimit të treguesve dhe mbron nga problemet që lindin nga puna e ulët me kujtesën, si qasja në një zonë kujtese pas çlirimit të saj, dereferencimi i treguesve null, dalja jashtë kufijve të buffers dhe të tjera. Për shpërndarjen e bibliotekave, sigurimin e ndërtimit dhe menaxhimin e varësive, po zhvillohet menaxheri i paketave. , që lejon shfrytëzimin e bibliotekave të nevojshme për programin me një klik. Për vendosjen e bibliotekave, mbështetet repository .
Ndryshimet kryesore :
- Eliminimi i njĂ« defekti tĂ« vjetĂ«r nĂ« pĂ«rfundimin e transformimeve midis numrave tĂ« plotĂ« dhe numrave me presje lundruese. Duke qenĂ« se kompajleri Rust pĂ«rdor LLVM si backend, operacionet e transformimit tĂ« tipeve janĂ« kryer pĂ«rmes instruksioneve tĂ« kodit tĂ« mesĂ«m LLVM, tĂ« tilla si , tĂ« cilat kanĂ« njĂ« karakteristikĂ« tĂ« rĂ«ndĂ«sishme â sjellje tĂ« papĂ«rcaktuar nĂ«se vlera e rezultatit nuk pĂ«rshtatet nĂ« tipin e synuar. PĂ«r shembull, kur konvertohet njĂ« vlerĂ« reale 300 me tipin f32 nĂ« njĂ« tip tĂ« plotĂ« u8 rezultati Ă«shtĂ« i paparashikueshĂ«m dhe mund tĂ« ndryshojĂ« nĂ« sisteme tĂ« ndryshme. Problemi Ă«shtĂ« se njĂ« karakteristikĂ« e tillĂ« shfaqet nĂ« kodin qĂ« nuk Ă«shtĂ« etiketuar si «unsafe».
Filluar nga Rust 1.45, sjellja në rast të tepricës së madhësisë së tipit rregullohet në mënyrë të ngurtë, dhe operacioni i konvertimit «as» kryen një kontroll për tejkalim dhe sjell vlerën e konvertuar në vlerën maksimale ose minimale të tipit të synuar (për shembullin e përmendur më lart, vlera 300 do të konvertohet në 255). Për të çaktivizuar kontrollin e tillë, ofrohen thirrje të tjera API «{f64, f32}::to_int_unchecked», të cilat punojnë në modin unsafe.
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)); // në dalje 255
println!(«too_small_casted = {}», cast(too_small)); // në dalje 0
println!(«not_a_number_casted = {}», cast(nan)); // në dalje 0
} - Stabilizimi i përdorimit , të ngjashme me funksionet, në shprehje, modele dhe deklarata. Më parë, makrotë e tilla mund të thirreshin jo gjithandej, por vetëm në pjesë të caktuara të kodit (në thirrje të veçanta, të pa lidhura me kodin tjetër). Zgjerimi i mënyrave të thirrjes së makrove, të ngjashme me funksionet, ishte një nga gjërat që duhej për të siguruar funksionimin e web-framwork-ut në lëshimet stabile të Rust. Më parë, për të arritur fleksibilitet shtesë në caktimin e trajtuesve në Rocket kërkohej aktivizimi i një mundësie eksperimentale 'proc_macro_hygiene', e cila nuk ishte e disponueshme në lëshimet stabile të Rust. Tani, funksionaliteti i përmendur është i përfshirë në lëshimet stabile të gjuhës.
- Lejohet përdorimi i intervaleve me tipin 'char' për të kaluar vlerat e intervalit (ops::{Range, RangeFrom, RangeFull, RangeInclusive, RangeTo}):
for ch in âaâ..=âzâ {
print!("{}", ch);
}
println!(); // Do të printohet "abcdefghijklmnopqrstuvwxyz" - Në kategorinë stabile është përkthyer një grup i ri API-sh, duke stabilizuar
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. - Në kompilatorin rustc është shtuar mbështetje për rindërtimin e mundësive të ndryshme të platformës së targetit duke përdorur flamurin «target-feature», për shembull, «-C target-feature=+avx2,+fma». Gjithashtu janë shtuar flamuj të rinj:
«force-unwind-tables» pĂ«r gjenerimin e tabelave tĂ« thirrjeve «tĂ« kthyer» (unwind), pavarĂ«sisht nga strategjia e pĂ«rpunimit tĂ« crash-it; «embed-bitcode» pĂ«r tĂ« kontrolluar pĂ«rfshirjen e bitcode LLVM nĂ« rlibs qĂ« gjenerohen. Flamuri «embed-bitcode» Ă«shtĂ« aktivizuar nga e drejta nĂ« Cargo pĂ«r optimizimin e kohĂ«s sĂ« ndĂ«rtimit dhe konsumit tĂ« hapĂ«sirĂ«s nĂ« disk. - ĂshtĂ« siguruar niveli i tretĂ« i mbĂ«shtetjes pĂ«r platformat mipsel-sony-psp dhe thumbv7a-uwp-windows-msvc. Niveli i tretĂ« nĂ«nkupton mbĂ«shtetje bazike, por pa testim automatizuar dhe publikimin e ndĂ«rtimeve zyrtare.
Për më tepër, mund të theksohet për krijimin e një aplikacioni më të thjeshtë në gjuhën Rust, që fillon me ndihmën e bootloader-it sistemor dhe është i gatshëm për ngarkesë të vetë-mjaftueshme në vend të një sistemi operativ.
Artikulli është i pari në një seri që është e përkushtuar për të demonstruar teknikat që janë të kërkuara në programimin me nivel të ulët dhe në zhvillimin e OS-ve.
Burimi: opennet.ru
