lëshimi i gjuhës së programimit sistemor , i zhvilluar nga projekti Mozilla. Gjuha fokusohet në punën e sigurt me memorien, ofron menaxhim automatik të memories dhe siguron mjete për të arritur një paralelism të lartë në ekzekutimin e detyrave, pa përdorur mbledhës plehrash apo runtime.
Menaxhimi automatik i memories në Rust përmban zhvilluesit nga manipulimi i treguesve dhe mbron ata nga problemet që lindin për shkak të punës me nivel të ulët me memorien, siç janë qasjet në hapësirën e memories pas lirimit të saj, dereferencimi i treguesve nul, dalja jashtë kufijve të tamponit etj. Për shpërndarjen e biblioteka, sigurimin e ndërtimit dhe menaxhimin e varësive, projekti po zhvillohet menaxher për paketat , që lejon shfrytëzimin e bibliotekave të nevojshme për programin me një klik. Për vendosjen e bibliotekave, mbështetet repository .
Ndryshimet kryesore :
- është shtuar një mod të kompilimit me kujdes (pipelined), ku ndërtimi i paketës së varësisë crate fillon menjëherë pasi të bëhen të disponueshme metadatata e varësive, pa pritur përfundimin e kompilimit të saj. Gjatë kompilimit të paketës, nuk është e nevojshme që varësitë të kenë përfunduar plotësisht, mjafton vetëm përcaktimi i metadatave që përfshijnë listat e tipeve, varësive dhe elementeve të eksportuara. Metadata bëhen të disponueshme në fazën fillestare të kompilimit, kështu që paketa të lidhura tani mund të fillojnë të kompilohen shumë më herët. Gjatë ndërtimit të paketave të vetme, ky mod i propozuar nuk ndikon në performancë, por nëse ndërtimi përfshin paketa me varësi të zhvilluara, koha totale e ndërtimit mund të reduktohet me 10-20%;
- ĂshtĂ« siguruar identifikimi i pĂ«rdorimit tĂ« papĂ«rshtatshĂ«m tĂ« funksioneve dhe . PĂ«r shembull, std::mem::uninitialized Ă«shtĂ« i dobishĂ«m pĂ«r krijimin e shpejtĂ« tĂ« array-ve, por i jep njĂ« keqkuptim kompajlerit, duke krijuar iluzionin e njĂ« inicializimi, ndĂ«rsa nĂ« tĂ« vĂ«rtetĂ« vlera mbetet e pa inicizuar. Funksioni mem::uninitialized tashmĂ« Ă«shtĂ« e shĂ«nuar si e vjetĂ«ruar dhe rekomandohet pĂ«rdorimi i njĂ« tipi ndĂ«rmjetĂ«s. . Sa i pĂ«rket mem::zeroed, kjo funksion mund tĂ« çojĂ« nĂ« probleme me tipet qĂ« nuk mund tĂ« pranojnĂ« vlera zero.
PĂ«r tĂ« identifikuar sjelljen e paqartĂ« tĂ« thirrur nĂ« versionin e ri, kompajleri ka shtuar njĂ« kontroll lint qĂ« identifikon disa probleme me mem::uninitialized ose mem::zeroed. PĂ«r shembull, tani shfaqet njĂ« gabim kur pĂ«rpiqeni tĂ« pĂ«rdorni mem::uninitialized ose mem::zeroed me tipe &T dhe BoxâčTâș, qĂ« pĂ«rfaqĂ«sojnĂ« objekte-pointer qĂ« nuk mund tĂ« pranojnĂ« vlera zero;
- Kapacitetet e aplikimit të atributit "#[deprecated]" janë zgjeruar, duke lejuar që paketat crate të shënohen si të vjetruara dhe të planifikuara për t'u fshirë në të ardhmen. Duke filluar nga versioni Rust 1.38, ky atribut mund të përdoret gjithashtu për makros;
- Shtuar mundësinë e përdorimit të atributit "#[global_allocator]" në submodulet;
- Shtesa e funksionit , që lejon të mësosh emrin e tipit, që mund të jetë e dobishme për qëllime të depurimit. Për shembull, gjatë ekzekutimit të programit mund të kuptosh për cilin tip është thirrur funksioni:
fn gen_valueâčT: Defaultâș() -âș T {
println!(«Duke inicializuar njĂ« instancĂ« tĂ« {}», std::any::type_name::âčTâș());
Default::default()
}fn main() {
let _: i32 = gen_value(); # do të shfaqet «i32»
let _: String = gen_value(); # do të shfaqet «alloc::string::String»
} - Funksionet e bibliotekës standarde janë zgjeruar:
- slice::{concat, connect, join} tani mund të pranojë vlerën &[T] përveç &T;
- «*const T» dhe «*mut T» tani realizojnë marker::Unpin;
- «Arcâč[T]âș» dhe «Rcâč[T]âș» tani realizojnĂ« FromIteratorâčTâș;
- iter::{StepBy, Peekable, Take} tani realizojnë DoubleEndedIterator.
- ascii::EscapeDefault realizon Clone dhe Display.
- Në rangun e stabilëve është kaluar një grusht i ri API, përfshirë metodat e stabilizuara
- âč*const Tâș::cast, âč*mut Tâș::cast,
- Duration::as_secs_f{32|64},
- Duration::div_duration_f{32|64},
- Duration::div_f{32|64},
- Duration::from_secs_f{32|64},
- Duration::mul_f{32|64},
- operacionet e ndarjes me mbetje
div_euclid dhe rem_euclid për të gjitha primitive të numrave të plotë;
- NĂ« menaxherin e paketave cargo Ă«shtĂ« shtuar mbĂ«shtetje pĂ«r specifikimin e opsionit «âfeatures» disa herĂ« pĂ«r aktivizimin e mundĂ«sive tĂ« ndryshme;
- Në kompajler është siguruar niveli i tretë mbështetje për platformat e synuara aarch64-uwp-windows-msvc, i686-uwp-windows-gnu, i686-uwp-windows-msvc, x86_64-uwp-windows-gnu, x86_64-uwp-windows-msvc, armv7-unknown-linux-gnueabi, armv7-unknown-linux-musleabi, hexagon-unknown-linux-musl dhe riscv32i-unknown-none-elf. Niveli i tretë përfshin mbështetje bazë, por pa testim automatizuar dhe publikim të ndërtimeve zyrtare.
Burimi: opennet.ru
