VĂ€lja antud programmeerimiskeel Rust 1.59, mis toetab assamblee sisestusi

Avaldatud on ĂŒldotstarbelise programmeerimiskeele Rust 1.59 vĂ€ljaanne, mis algselt pĂ”hines Mozilla projektist, kuid nĂŒĂŒd arendab seda sĂ”ltumatu mittetulundusĂŒhing Rust Foundation. Keel keskendub mĂ€luga ohutule töötamisele ja pakub vahendeid ĂŒlesannete kĂ”rge paralleelsuse saavutamiseks, samas vĂ€ltides prĂŒgikorjajat ja runtime'i (runtime piirdub pĂ”hikonfiguratsiooni ja standardraamatukogu toetamisega).

Rustis olevad mĂ€luhaldusmeetodid vabastavad arendajad probleemidest, mis on seotud osutitega, ning kaitsevad madala taseme mĂ€lutöötlusest tulenevate probleemide, nagu vabanenud mĂ€lu alale juurdepÀÀs, nullosutite de-referentseerimine, mĂ€lupiiride ĂŒletamine jne. Raamatukogude levitamiseks, projekti koostamise ja sĂ”ltuvuste haldamiseks arendatakse pakihaldurit Cargo. Raamatukogude paigutamiseks toetatakse repo crates.io.

Rust tagab turvalise mĂ€lutöötluse kompilatsiooni ajal, kontrollides viiteid, jĂ€lgides objektide omandit, arvestades objektide elutsĂŒklit (nĂ€htavust) ja hinnates mĂ€lule juurdepÀÀsu Ă”igsust koodi kĂ€itamise ajal. Rust pakub ka meetmeid enamike tĂ€isarvude ĂŒletamiste vĂ€ltimiseks, nĂ”uab muutujate vÀÀrtuste algvÀÀrtustamist enne kasutamist, kĂ€sitleb vigasid paremini oma standardraamatukogus, rakendab immutamatuse (immutable) kontseptsiooni viidetes ja muutujates vaikimisi ning pakub tugevat staatilist tĂŒĂŒpimist loogiliste vigade minimeerimiseks.

PÔhilised uuendused:

  • Saadi on kasutusele vĂ”etud assembleri manuseid, mis on nĂ”utud rakendustes, kus on vajalik madala taseme tĂ€itmisest juhtimine vĂ”i spetsialiseeritud masina juhiste kasutamine. Assembleri manuseid lisatakse makrodega "asm!" ja "global_asm!" ning registrite nimetamiseks kasutatakse stringi vormingusĂŒntaksit, mis sarnaneb Rustis kasutatavatele stringi asendustele. Kompilaator toetab assembleri juhiseid arhitektuuridele x86, x86-64, ARM, AArch64 ja RISC-V. NĂ€ide manusest: use std::arch::asm; // Korruta x kuuega, kasutades nihkeid ja liiteid 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);
  • Lisatud on toetatud destruktureeritud (paralleelsed) mÀÀramised, kus vĂ€ljendi vasakus osas on mitmeid tĂŒpse, lĂ”ike vĂ”i struktuure. NĂ€iteks: let (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]);
  • Kohandatud on vĂ”imalus mÀÀrata vaikevÀÀrtusi konstantsetele generikatele („const generics“): struct ArrayStorage { arr: [T; N], } impl ArrayStorage { fn new(a: T, b: T) -> ArrayStorage { ArrayStorage { arr: [a, b], } } }
  • Paketihaldur Cargo tagab hoiatuste vĂ€ljastamise sĂ”ltuvuste vÀÀrtuslikust konstruktsioonide kasutamise kohta, mis on kĂ€ideldavad kompilatsioonivigade tĂ”ttu (nĂ€iteks vale tĂ”ttu lubati pakitud struktuuride vĂ€ljade laenamine safe-blokkides). Selliste konstruktsioonide toetus lĂ”petatakse tulevases Rusti versioonis.
  • Cargo ja rustc-s on sisse ehitatud vĂ”imalus genereerida töötavaid faile, mis on puhastatud silumisandmetest (strip = „debuginfo“) ja sĂŒmbolitest (strip = „symbols“), ilma et oleks vajalik eraldi utiliidi kĂ€ivitamine. Puhastamise seadistamine toimub parameetri „strip“ kaudu Cargo.toml-is: [profile.release] strip = „debuginfo“, „symbols“
  • Vaikimisi on inkrementeeriv kompileerimine keelatud. PĂ”hjuseks on ajutine lahendus kompilatori veale, mis pĂ”hjustab tĂ”rkeid ja deserialiseerimisveateateid. Veaparanduse eest on juba valmistatud ja see lisatakse jĂ€rgmistesse vĂ€ljaannetesse. Inkrementeeriva kompileerimise lubamiseks saab kasutada keskkonnamuutujat RUSTC_FORCE_INCREMENTAL=1.
  • Stabiilsete versioonide hulka on lisatud uus komplekt API-sid, sealhulgas on stabiliseeritud meetodid ja tĂŒĂŒpide rakendused:
    • std::thread::available_parallelism
    • Result::copied
    • Result::cloned
    • arch::asm!
    • arch::global_asm!
    • ops::ControlFlow::is_break
    • ops::ControlFlow::is_continue
    • TryFrom for u8
    • char::TryFromCharError (Clone, Debug, Display, PartialEq, Copy, Eq, Error)
    • 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 struktuur ToLowercase jaoks
    • DoubleEndedIterator struktuur ToUppercase jaoks
    • TryFrom<&mut [T]> for [T; N]
    • UnwindSafe struktuur Once jaoks
    • RefUnwindSafe struktuur Once jaoks
    • kompilaatorisse sisse ehitatud funktsioonid armv8 neon toeks aarch64
  • Konstantse mĂ€rgendiga `const`, mis mÀÀrab vĂ”imaluse kasutada konstandina igas kontekstis, on rakendatud funktsioonides:
    • mem::MaybeUninit::as_ptr
    • mem::MaybeUninit::assume_init
    • mem::MaybeUninit::assume_init_ref
    • ffi::CStr::from_bytes_with_nul_unchecked

Allikas: opennet.ru

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster