Lëshimi i gjuhës programuese Rust 1.59 me mbështetje për insertet e montimit

Gjuha e programimit për qëllime të përgjithshme Rust 1.59, e themeluar nga projekti Mozilla, por tani e zhvilluar nën kujdesin e organizatës së pavarur jofitimprurëse Rust Foundation, është publikuar. Gjuha fokusohet në sigurinë e kujtesës dhe siguron mjetet për të arritur paralelizëm të lartë të punës duke shmangur përdorimin e një grumbulluesi të mbeturinave dhe kohën e funksionimit (koha e funksionimit reduktohet në inicializimin bazë dhe mirëmbajtjen e bibliotekës standarde).

Metodat e trajtimit të memories Rust e ruajnë zhvilluesin nga gabimet gjatë manipulimit të treguesve dhe mbrojnë nga problemet që lindin për shkak të trajtimit të nivelit të ulët të kujtesës, të tilla si qasja në një zonë memorie pasi të jetë liruar, mosreferencimi i treguesve null, tejkalimet e buferit, etj. Për të shpërndarë bibliotekat, për të ofruar ndërtime dhe për të menaxhuar varësitë, projekti zhvillon menaxherin e paketave Cargo. Depoja e crates.io mbështetet për pritjen e bibliotekave.

Siguria e memories sigurohet në Rust në kohën e përpilimit përmes kontrollit të referencës, mbajtjes së gjurmës së pronësisë së objektit, mbajtjes së gjurmëve të jetëgjatësisë së objektit (scopes) dhe vlerësimit të saktësisë së aksesit në kujtesë gjatë ekzekutimit të kodit. Rust siguron gjithashtu mbrojtje kundër tejmbushjeve të numrave të plotë, kërkon inicializimin e detyrueshëm të vlerave të variablave përpara përdorimit, trajton më mirë gabimet në bibliotekën standarde, zbaton konceptin e referencave dhe variablave të pandryshueshme si parazgjedhje, ofron shtypje të fortë statike për të minimizuar gabimet logjike.

Risitë kryesore:

  • Tani Ă«shtĂ« e disponueshme mundĂ«sia pĂ«r tĂ« pĂ«rdorur injeksione nĂ« gjuhĂ«n e asamblesĂ«, tĂ« cilat janĂ« tĂ« dobishme pĂ«r aplikacionet qĂ« kĂ«rkojnĂ« kontroll tĂ« ekzekutimit nĂ« nivel tĂ« ulĂ«t ose aftĂ«sinĂ« pĂ«r tĂ« pĂ«rdorur udhĂ«zime tĂ« specializuara tĂ« makinĂ«s. Injeksionet e asamblesĂ« shtohen duke pĂ«rdorur makrot "asm!" dhe "global_asm!", duke pĂ«rdorur sintaksĂ«n e formatimit tĂ« vargjeve pĂ«r emĂ«rtimin e regjistrave, tĂ« ngjashme me atĂ« tĂ« pĂ«rdorur nĂ« zĂ«vendĂ«simet e vargjeve nĂ« Rust. Kompiluesi mbĂ«shtet udhĂ«zimet e asamblesĂ« pĂ«r arkitekturat x86, x86-64, ARM, AArch64 dhe RISC-V. Shembull injektimi: pĂ«rdorni std::arch::asm; // ShumĂ«zoni x me 6 duke pĂ«rdorur zhvendosje dhe mbledhje let mut x: u64 = 4; unsafe { asm!( "mov {tmp}, {x}", "shl {tmp}, 1", "shl {x}, 2", "add {x}, {tmp}", x = inout(reg) x, tmp = out(reg) _, ); } assert_eq!(x, 4 * 6);
  • U shtua mbĂ«shtetje pĂ«r caktimet e destrukturuara (paralele), ku specifikohen tipare, feta ose struktura tĂ« shumĂ«fishta nĂ« anĂ«n e majtĂ« tĂ« shprehjes. PĂ«r shembull: le tĂ« jetĂ« (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]);
  • MundĂ«sia pĂ«r tĂ« specifikuar vlerat e parazgjedhura pĂ«r const generics tani Ă«shtĂ« nĂ« dispozicion: struct ArrayStorage { arr: [T; N], } implikuar ArrayStorage { fn new(a: T, b: T) -> ArrayStorage { ArrayStorage { arr: [a, b], } } }
  • Menaxheri i paketave Cargo tani shfaq paralajmĂ«rime rreth pĂ«rdorimit tĂ« konstruksioneve tĂ« pavlefshme nĂ« varĂ«si pĂ«r shkak tĂ« gabimeve tĂ« kompiluesit (pĂ«r shembull, njĂ« gabim lejoi huazimin e fushave tĂ« strukturave tĂ« paketuara nĂ« blloqe tĂ« sigurta). MbĂ«shtetja pĂ«r konstruksione tĂ« tilla do tĂ« hiqet nĂ« njĂ« version tĂ« ardhshĂ«m tĂ« Rust.
  • Cargo dhe rustc kanĂ« njĂ« aftĂ«si tĂ« integruar pĂ«r tĂ« gjeneruar ekzekutues tĂ« zhveshur nga informacioni i debugimit (strip = "debuginfo") dhe simbolet (strip = "symbols"), pa pasur nevojĂ« pĂ«r njĂ« program tĂ« veçantĂ«. Ky zhveshje konfigurohet nĂ«pĂ«rmjet parametrit "strip" nĂ« Cargo.toml: [profile.release] strip = "debuginfo", "symbols"
  • Kompilimi rritĂ«s Ă«shtĂ« çaktivizuar si parazgjedhje. Arsyeja e pĂ«rmendur Ă«shtĂ« njĂ« zgjidhje e pĂ«rkohshme pĂ«r njĂ« gabim tĂ« kompiluesit qĂ« shkakton rrĂ«zime dhe gabime deserializimi. NjĂ« rregullim Ă«shtĂ« pĂ«rgatitur dhe do tĂ« pĂ«rfshihet nĂ« versionin e ardhshĂ«m. PĂ«r tĂ« riaktivizuar kompilimin rritĂ«s, mund tĂ« pĂ«rdorni variablin e mjedisit RUSTC_FORCE_INCREMENTAL=1.
  • NjĂ« pjesĂ« e re e API-sĂ« Ă«shtĂ« zhvendosur nĂ« kategorinĂ« e qĂ«ndrueshme, duke pĂ«rfshirĂ« metodat dhe implementimet e tipareve janĂ« stabilizuar:
    • std::thread::available_parallelism
    • Rezultati::kopjuar
    • Rezultati::i klonuar
    • arch::asm!
    • arch::global_asm!
    • ops::ControlFlow::is_break
    • ops::ControlFlow::is_continue
    • ProvoNga pĂ«r u8
    • char::TryFromCharError (Klonim, Debugim, Shfaqje, PartialEq, Kopjim, Eq, Gabim)
    • iter::zip
    • NonZeroU8::is_power_of_two
    • NonZeroU16::is_power_of_two
    • NonZeroU32::is_power_of_two
    • NonZeroU64::is_power_of_two
    • NonZeroU128::is_power_of_two
    • DoubleEndedIterator pĂ«r strukturĂ«n ToLowercase
    • DoubleEndedIterator pĂ«r strukturĂ«n ToUppercase
    • ProvoNga<&mut [T]> pĂ«r [T; N]
    • UnwindSafe pĂ«r strukturĂ«n Once
    • RefUnwindSafe pĂ«r njĂ« herĂ«
    • Karakteristikat e mbĂ«shtetjes sĂ« neonit armv8 tĂ« ndĂ«rtuara nga pĂ«rpiluesi pĂ«r aarch64
  • Atributi "const", i cili pĂ«rcakton mundĂ«sinĂ« e pĂ«rdorimit tĂ« tij nĂ« çdo kontekst nĂ« vend tĂ« konstanteve, pĂ«rdoret nĂ« funksionet:
    • mem::MaybeUninit::as_ptr
    • mem::MaybeUninit::assume_init
    • mem::MaybeUninit::assume_init_ref
    • ffi::CStr::from_bytes_with_nul_unchecked

Burimi: opennet.ru

Bleni njĂ« host tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, serverĂ« VPS VDS đŸ”„ Bleni hosting tĂ« besueshĂ«m tĂ« faqeve tĂ« internetit me mbrojtje DDoS, servera VPS VDS | ProHoster