Rust 1.99.0 vÀljalase. Microsoft on viinud Rust pÔhiliste keelte hulka

VĂ€ljalase programmeerimiskeelest Rust 1.99, mis pĂ”hineb Mozilla projektist, kuid mida arendatakse praegu sĂ”ltumatu mittetulundusĂŒhingu Rust Foundationi toetusel. Keel keskendub mĂ€lu ohutule kĂ€sitlemisele ja pakub vahendeid ĂŒlesannete kĂ”rge paralleelsuse saavutamiseks, samas kui see kasutab vĂ€ltimatult prĂŒgikoristajat ja runtime'i (runtime piirdub pĂ”hialuste initsialiseerimise ja standardraamatukogu toetamisega).

Rust'i mĂ€lu töötlemise meetodid on suunatud pointerite manipuleerimise vigade vĂ€ltimisele ja probleemide kaitsmisele, mis tulenevad madala taseme mĂ€lu töötlemisest, nagu juurdepÀÀs vabastatud mĂ€lupiirkondadele, nullpointerite de-referentseerimine, mĂ€lupuhvri ĂŒletamine jne. Raamatukogude levitamiseks, ehituste tagamiseks ja sĂ”ltuvuste haldamiseks arendatakse pakihaldurit Cargo. Raamatukogude majutamiseks toetatakse repotites 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:

  • Rust'i keeles on nĂŒĂŒd vĂ”imalus luua variadic funktsioone, mida saab eksportida C keele projektidest kutsumiseks (C ABI). Nimetatud funktsioonide parameetrite loendi viimase elemendina vĂ”ib kasutada konstruktsiooni „
”, mida Rust'is töödeldakse spetsiaalse VaList tĂŒĂŒbi abil, mis toimib sarnaselt C keeles va_list'iga. unsafe extern "C" fn sum(mut args: 
) -> i32 { let a = unsafe { args.next_arg::<i32>() }; let b = unsafe { args.next_arg::<i32>() }; a + b } fn foo() -> i32 { unsafe { sum(0i32, 2i32) } }
  • Funktsioonid Layout::for_value_raw, mem::size_of_val_raw ja mem::align_of_val_raw on stabiliseeritud, vĂ”imaldades ohutult mÀÀrata suuruse ja joondamise toorete nĂ€idikute (raw pointer) alusel, sealhulgas dĂŒnaamilise suurusega tĂŒĂŒpide, nĂ€iteks lĂ”ikude, kasutamisel, ilma vajaduseta andmete viidete loomiseks.
  • Dokumentatsioonis on lisatud soovitus vĂ€ltida mĂ€lule, millele on saadud staatiline viide piiramatu elueaga (&’static), vabastamist, kutsudes Box::leak (round-trip unleaking), kuna selline tegevus vĂ”ib potentsiaalselt pĂ”hjustada probleeme, mis on seotud tulevaste kompileerimise optimiseerimise ja lisatud mĂ€luhaldusmehhanismidega. Ajaline omandiĂŒlekanne staatilise viite loomiseks peaks kasutama pigem tooreid nĂ€idikuid, nĂ€iteks Box::into_non_null'i kutsudes.
  • Uus hulk API-d on viidud stabiilsuse tasemele, sealhulgas on stabiliseeritud meetodid ja tĂŒĂŒbispetsiifikatsioonide rakendused:
    • IntoIterator for Box<[T; N]>
    • IntoIterator for &Box<[T; N]>
    • IntoIterator for &mut Box<[T; N]>
    • VecDeque::retain_back
    • core::ffi::VaList
    • Box::into_non_null
    • Box::from_non_null
    • Vec::into_parts
    • Vec::from_parts
    • core::mem::size_of_val_raw
    • core::mem::align_of_val_raw
    • core::alloc::Layout::for_value_raw
    • String::from_utf8_lossy_owned
    • string::FromUtf8Error::into_utf8_lossy
    • FusedIterator for StepBy<I>
    • std::fs::set_times
    • std::fs::set_times_nofollow
  • Cargo paketihalduris on rakendatud uus sisseehitatud profiil «debug», mis sarnaneb profiiliga «dev» (tulevikus plaanitakse silumist ja arendust eraldi hallata). CI-kogumisel on vaikimisi inkrementselt kompileerimine keelatud.
  • Sihtplatvorm riscv64-unknown-linux-musl on viidud teise toetuse tasemele, mis tĂ€hendab kogumise tagamise, kuid ilma garantiideta testkomplekti lĂ€bimise osas.

Lisaks vĂ”ib mainida hiljuti kuulutatud projekte ja sĂŒndmusi, mis on seotud Rustiga:

  • Microsoft on viinud Rusti esmareageerivate keelte hulka ja tagab selle tĂ€ieliku toe kĂ”igil arendusetappidel ettevĂ”tte sees. Enne seda anti esimese taseme tugi ettevĂ”tte sees C++, C# ja TypeScripti keeltele. Mainitud on, et Rusti kasutatakse juba ĂŒle 100 Microsofti hoidla. Muuhulgas kasutatakse Rasti komponente sellistes toodetes nagu Microsoft 365 ja Copilot ning MSVC kompilaatori jaoks on ette valmistatud eraldi backend rustc_codegen_utc, mis pĂ”hineb rustc kompilaatoril.

    Microsofti peamise Rasti kasutamise eesmÀrgiks on koodide turvalisuse tugevdamine, mis on kriitilise tÀhtsusega. Microsoft Azure'i tehnilise direktori sÔnul pÔhjustavad umbes 70% kÔigist Windowsi haavatavustest mÀluga seotud probleemid, millest on vÔimalik vabaneda Rasti kasutamisega.

  • Google eemaldab Linuxi tuumast vana protsessidevahelise suhtlemise mehhanismi Binder, mis on kirjutatud C keeles, uue Rustis ĂŒmber kirjutatud draiveri Binder IPC kasuks. Mainitud on, et vana draiveri 15-aastase eksisteerimise jooksul on kogunenud mĂ€rkimisvÀÀrne tehniline vĂ”lg ja keerukus, mis takistas vigade leidmist, hooldamist ja uute funktsioonide lisamist. Binder IPC draiverit Rustis peetakse nĂŒĂŒd peamiseks ja mitte enam eksperimentaalseks arenduseks.
  • Avalikustatud on Arti 2.7.0 vĂ€ljaanne, Tor'i tööriistade teostus, mis on kirjutatud Rustis. Kui Arti kood saavutab taseme, mis suudab tĂ€ielikult asendada C variandi, kavatsevad Tor'i arendajad anda Artile Tor'i peamise teostuse staatuse ja jĂ€rk-jĂ€rgult lĂ”petada C teostuse hooldamine. Uues versioonis on avatud arendustegevus relvade jaoks. serverid kataloog (Directory Authority), mis on seotud dokumentide töötlemise, katalooge peegeldavate serverite toetamise ja DNS-i liikluse kĂ€sitlemisega. On lisatud RPC rakendus konfiguratsiooni muutmiseks ja kontrollimiseks. Mitmed haavatavused on kĂ”rvaldatud – onion-teenuste administraatoritele soovitatakse kiiresti oma sĂŒsteemid uuendada.

Allikas: opennet.ru

Osta usaldusvÀÀrne veebimajutus DDoS-kaitsega veebisaitidele, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebimajutus DDoS-kaitsega veebisaitidele, VPS VDS serverid - ProHoster