Rust 1.64 programmeerimiskeele väljalase

Avaldatud on Mozilla projektiga rajatud, kuid nüüdseks sõltumatu mittetulundusühingu Rust Foundation egiidi all välja töötatud üldotstarbelise programmeerimiskeele Rust 1.64 väljalase. Keel keskendub mälu ohutusele ja pakub vahendeid töö kõrge paralleelsuse saavutamiseks, vältides samal ajal prügikoguja ja käitusaja kasutamist (käitusaeg lüheneb standardse teegi põhikäivitamise ja hoolduseni).

Rusti mälukäsitlusmeetodid säästavad arendajat osutitega manipuleerimisel esinevate vigade eest ja kaitsevad madala tasemega mälukäsitluse tõttu tekkivate probleemide eest, nagu mälualale juurdepääs pärast selle vabastamist, nullviidate viitamise tühistamine, puhvri ülekoormus jne. Teekide levitamiseks, järkude pakkumiseks ja sõltuvuste haldamiseks arendab projekt Cargo paketihaldurit. Hoidlat crates.io toetatakse teekide majutamiseks.

Mälu turvalisus on Rustis kompileerimise ajal tagatud viidete kontrollimise, objekti omandiõiguse jälgimise, objektide eluea (ulatuse) jälgimise ja mälule juurdepääsu õigsuse hindamise kaudu koodi täitmise ajal. Rooste pakub ka kaitset täisarvude ületäitumise eest, nõuab muutujate väärtuste kohustuslikku lähtestamist enne kasutamist, käsitleb standardteegi vigu paremini, rakendab vaikimisi muutumatute viidete ja muutujate kontseptsiooni, pakub tugevat staatilist tippimist loogiliste vigade minimeerimiseks.

Peamised uuendused:

  • Tõstetud on nõudeid Linuxi keskkonnale kompilaatoris, Cargo paketihalduris ja libstd standardteegis - Glibc miinimumnõuded on tõstetud versioonilt 2.11 versioonilt 2.17 ja Linuxi kerneli versioonilt 2.6.32 versioonile 3.2. Piirangud kehtivad ka libstd-ga loodud rakenduste Rust käivitatavatele failidele. Jaotuskomplektid RHEL 7, SLES 12-SP5, Debian 8 ja Ubuntu 14.04 vastavad uutele nõuetele. RHEL 6, SLES 11-SP4, Debian 7 ja Ubuntu 12.04 tugi lõpetatakse. Kasutajatel, kes kasutavad roostes ehitatud täitmisfaile vanema Linuxi tuumaga keskkondades, julgustatakse oma süsteeme uuendama, kasutama kompilaatori vanemaid väljalaseid või säilitama ühilduvuse säilitamiseks oma kihtidega libstd-kahvlit.

    Vanemate Linuxi süsteemide toetamise lõpetamise põhjuste hulgas on piiratud ressursid, et jätkata ühilduvuse säilitamist vanemate keskkondadega. Pärand Glibci tugi nõuab pideva integratsioonisüsteemi kontrollimisel pärandtööriistade kasutamist, pidades silmas kasvavaid versiooninõudeid LLVM-is ja ristkompileerimise utiliitides. Kerneli versiooninõuete suurenemine on tingitud võimalusest kasutada libstd-s uusi süsteemikutseid, ilma et oleks vaja kihte hooldada, et tagada ühilduvus vanemate tuumadega.

  • IntoFuture tunnus on stabiliseeritud, mis sarnaneb IntoIteratoriga, kuid erineb viimasest, kasutades ".await" asemel "for ... in ..." silmuseid. Kombineerituna IntoFuture'iga võib märksõna ".await" eeldada mitte ainult Tuleviku tunnust, vaid ka muid tüüpe, mida saab tulevikuks teisendada.
  • Roosteanalüsaatori utiliit sisaldub Rusti väljalasetega kaasas olevate utiliitide kogus. Utiliit on saadaval ka paigaldamiseks rustupi abil (rustup komponent lisa roosteanalüsaator).
  • Cargo paketihaldur sisaldab tööruumi pärimist, et välistada tavaliste väljade väärtuste dubleerimine pakettide vahel, näiteks Rust versioonid ja hoidla URL-id. Lisatud on ka korraga mitme sihtplatvormi ehitamise tugi (nüüd saate "--target" valikus määrata rohkem kui ühe parameetri).
  • API uus osa on viidud stabiilsete kategooriasse, sealhulgas on stabiliseeritud meetodid ja tunnuste rakendused:
    • tulevik::Tulevikusse
    • num::NonZero*::checked_mul
    • num::NonZero*::checked_pow
    • num::NonZero*::saturating_mul
    • num::NonZero*::saturating_pow
    • num::NonZeroI*::abs
    • num::NonZeroI*::checked_abs
    • num::NonZeroI*::overflowing_abs
    • num::NonZeroI*::saturating_abs
    • num::NonZeroI*::unsigned_abs
    • num::NonZeroI*::wrapping_abs
    • num::NonZeroU*::checked_add
    • num::NonZeroU*::kontrollitud_järgmine_võimsus_kahest
    • num::NonZeroU*::saturating_add
    • os::unix::protsess::CommandExt::protsessi_rühm
    • os::windows::fs::FileTypeExt::is_symlink_dir
    • os::windows::fs::FileTypeExt::is_symlink_file
  • C-ga ühilduvad tüübid, mis on varem stabiliseeritud moodulis std::ffi, on lisatud tuuma ja jaotamise teeki:
    • tuum::ffi::CStr
    • core::ffi::FromBytesWithNulError
    • alloc::ffi::CString
    • alloc::ffi::FromVecWithNulError
    • alloc::ffi::IntoStringError
    • alloc::ffi::NulError
  • C-tüübid, mis on eelnevalt stabiliseeritud moodulis std::os::raw, on lisatud core::ffi ja std::ffi moodulitesse (nt uint ja ulong C tüüpide jaoks on pakutud tüübid c_uint ja c_ulong):
    • ffi::c_char
    • ffi::c_double
    • ffi::c_float
    • ffi::c_int
    • ffi::c_long
    • ffi::c_longlong
    • ffi::c_schar
    • ffi::c_short
    • ffi::c_uchar
    • ffi::c_uint
    • ffi::c_ulong
    • ffi::c_ulonglong
    • ffi::c_ushort
  • Madala taseme töötlejad on stabiliseeritud kasutamiseks koos Poll mehhanismiga (tulevikus on plaanis pakkuda lihtsustatud API-d, mis ei nõua madala taseme struktuuride, nagu Pull and Pin, kasutamist):

    • tulevik::poll_fn
    • ülesanne::valmis!
  • Funktsioonis slice::from_raw_parts kasutatakse atribuuti “const”, mis määrab võimaluse kasutada seda konstantide asemel mis tahes kontekstis.
  • Andmete kompaktsemaks salvestamiseks on muudetud struktuuride Ipv4Addr, Ipv6Addr, SocketAddrV4 ja SocketAddrV6 mälupaigutust. Ühilduvusprobleem võib olla üksikute kastipakettidega, mis kasutavad struktuuride madalal tasemel manipuleerimiseks std::mem::transmute.
  • Windowsi platvormi roostekompilaatori ehitamine kasutab PGO optimeerimist (profiiliga juhitud optimeerimine), mis võimaldas suurendada koodide kompileerimise jõudlust 10-20%.
  • Kompilaator on teatud struktuurides rakendanud uue hoiatuse kasutamata väljade kohta.

Lisaks võite märkida olekuaruannet Rust keele kompilaatori alternatiivse juurutuse väljatöötamise kohta, mille on koostanud projekt gccrs (GCC Rust) ja mis on GCC-sse kaasamiseks heaks kiidetud. Pärast kasutajaliidese integreerimist saab standardseid GCC tööriistu kasutada Rust-keeles programmide kompileerimiseks, ilma et oleks vaja installida rustc-kompilaatorit, mis on ehitatud LLVM-i arenduste abil. Niikaua kui arendus on õigel teel ja ilma ettenägematute probleemideta, integreeritakse Rusti esiosa GCC 13 väljalaskesse, mis on kavandatud järgmise aasta maiks. Rusti GCC 13 juurutus on beetaolekus, vaikimisi pole see veel lubatud.

Allikas: opennet.ru

Lisa kommentaar