Rust 1.82 vÀljalaskmine. Uus brauser Rustis. Rusti kasutamine Volvos

Avaldatud on universaalse programmeerimiskeele Rust 1.82 versioon, mille arendust alustas projekt Mozilla, kuid mida praegu arendab sĂ”ltumatu mittetulusĂŒhing Rust Foundation. Keele fookus on mĂ€lu ohutul ning see pakub vahendeid kĂ”rge samal ajal ĂŒlesannete tĂ€itmiseks, samas töötades ilma prĂŒgikoristaja ja ajakeeleta (ajakeel piirdub pĂ”hihaldamise ja standardteegi toetamisega).

MÀluga töötamise meetodid Rust'is vabastavad arendajad pointerite manipulatsiooni vigadest ja kaitsevad neid probleemide eest, mis tulenevad madala taseme mÀlu haldamisest, nagu mÀlualale pÀrast selle vabastamist juurdepÀÀs, null-pointerite dereferentseerimine, puhverserveri piiridest vÀljumine jne. Raamatukogude levitamiseks, kokkupaneku tagamiseks ja sÔltuvuste haldamiseks arendatakse paketihaldurit Cargo. Raamatukogude majutamiseks toetatakse repoturite crates.io.

MĂ€luhĂŒgieen Rust'is tagatakse kompileerimise ajal viidete kontrollimise, objektide omandi jĂ€lgimise, objektide eluaja (vaateala) arvestamise ja mĂ€lule juurdepÀÀsu korrektuse hindamise kaudu koodi tĂ€itmise ajal. Rust pakub ka vahendeid tĂ€isarvude ĂŒlevoolude vĂ€ltimiseks, nĂ”uab muutujate vÀÀrtuste kohustuslikku initsialiseerimist enne kasutamist, kĂ€sitleb vigu paremini standardraamatukogus, rakendab muutumatuse (immutable) mĂ”istet viidete ja muutujate jaoks vaikimisi ning pakub tugevat staatilist tĂŒĂŒpimist loogiliste vigade vĂ€hendamiseks.

Peamised uuendused:

  • Pakihaldurisse cargo on lisatud kĂ€sk 'info', et kuvada teavet paketi kohta repos.
  • Lisatud on 'use<..>' sĂŒntaks 'impl Trait', mis mÀÀratleb teavet varjatud tĂŒĂŒpide kohta. NĂ€iteks 'impl Trait + use<'x, T>' nĂ€itab, et varjatud tĂŒĂŒbis on lubatud kasutada vaid parameetreid 'x' ja 'T'.
  • Pakutud on eraldi sĂŒntaks raw-nĂ€idikute loomiseks, mis asendab varem kasutatud makrosid: makro 'addr_of!(expr)' asendatakse operaatoriga '&raw const expr', ning makro 'addr_of_mut!(expr)' asendatakse operaatoriga '&raw mut expr'. struct Packed { not_aligned_field: i32, } fn main() { let p = Packed { not_aligned_field: 1_82 }; // Vana viis raw-nĂ€idiku loomiseks let ptr = std::ptr::addr_of!(p.not_aligned_field); // Uus viis raw-nĂ€idiku loomiseks let ptr = &raw const p.not_aligned_field; let val = unsafe { ptr.read_unaligned() }; }
  • Antud on vĂ”imalus mÀÀratleda ohutud (safe) funktsioonid ja konstantid elueaga 'static' extern-plokkides, millel on tunnus 'unsafe' (varem said kĂ”ik elemendid 'unsafe extern' olla ainult tunnusega 'unsafe'): unsafe extern { pub safe static TAU: f64; pub safe fn sqrt(x: f64) -> f64; pub unsafe fn strlen(p: *const u8) -> usize; }
  • Atribuudid no_mangle, link_section ja export_name, mis vĂ”ivad pĂ”hjustada mÀÀramatut kĂ€itumist, loetakse nĂŒĂŒd ebaturvaliseks ja nĂ”uavad selget mĂ€rgistamist 'unsafe' tunnusega, nĂ€iteks: #[unsafe(no_mangle)] pub fn my_global_function() { }
  • Musteruhtestamisel on lubatud jĂ€tta tĂŒhjad tĂŒĂŒbid, nagu 'enum Void {}' vĂ”i struktuurid koos nĂ€htava tĂŒhja vĂ€ljad. use std::convert::Infallible; pub fn unwrap_without_panic<T>(x: Result<T, Infallible>) -> T { let Ok(x) = x; // 'Err' saab jĂ€tta vahele x }
  • Ujukomaarvude tĂŒĂŒpide (f32 ja f64) kĂ€itlemine mitte-arvuliste vÀÀrtuste NaN (0.0/0.0) osas on standardiseeritud, samuti on lubatud ujukomaoperatsioonide kasutamine const fn-is.
  • Assembly insertions allow the use of operands with the 'const' qualifier for the direct use of integer values without their prior storage in a register. const MSG: &str = "Hello, world!\n"; unsafe { core::arch::asm!( "mov rdx, {LEN} // will generate instruction 'mov rdx, 14'", LEN = const MSG.len(), 
 ); }
  • Addressing expressions with the 'static' qualifier is allowed in a safe context without defining an unsafe block (the operators '&raw mut' and '&raw const' do not affect the operand value and only create a pointer to it): static mut STATIC_MUT: Type = Type::new(); extern "C" { static EXTERN_STATIC: Type; } fn main() { let static_mut_ptr = &raw mut STATIC_MUT; let extern_static_ptr = &raw const EXTERN_STATIC; }
  • Uus hulk API-d on viidud stabiilsuse tasemele, sealhulgas on stabiliseeritud meetodid ja tĂŒĂŒbispetsiifikatsioonide rakendused:
    • std::thread::Builder::spawn_unchecked
    • std::str::CharIndices::offset
    • std::option::Option::is_none_or
    • [T]::is_sorted
    • [T]::is_sorted_by
    • [T]::is_sorted_by_key
    • Iterator::is_sorted
    • Iterator::is_sorted_by
    • Iterator::is_sorted_by_key
    • std::future::Ready::into_inner
    • std::iter::repeat_n
    • impl DoubleEndedIterator for Take

      Allikas: opennet.ru
Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster