Rust 1.64 ohjelmointikielen julkaisu

Yleiskäyttöinen ohjelmointikieli Rust 1.64, joka on perustettu Mozilla-projektilla, mutta nyt kehitetty riippumattoman voittoa tavoittelemattoman järjestön Rust Foundationin alaisuudessa, on julkaistu. Kieli keskittyy muistin turvallisuuteen ja tarjoaa välineet korkean työn rinnakkaisuuden saavuttamiseen välttäen samalla roskankeräimen ja ajonajan käyttöä (ajoaika rajoittuu vakiokirjaston perusalustukseen ja ylläpitoon).

Rustin muistinkäsittelymenetelmät säästävät kehittäjää virheiltä osoittimia käsiteltäessä ja suojaavat ongelmilta, jotka johtuvat matalan tason muistin käsittelystä, kuten muistialueen käyttäminen sen vapauttamisen jälkeen, nollaosoittimien viittauksen poistaminen, puskurin ylitykset jne. Kirjastojen jakelua, koontiversioiden tarjoamista ja riippuvuuksien hallintaa varten projekti kehittää Cargo-pakettien hallintaa. Crates.io-tietovarastoa tuetaan kirjastojen isännöintiin.

Muistin turvallisuutta tarjotaan Rustissa käännöshetkellä referenssitarkistuksen, objektin omistajuuden, objektien eliniän (laajuuden) kirjaamisen ja muistin käytön oikeellisuuden arvioimisen avulla koodin suorittamisen aikana. Ruoste tarjoaa myös suojan kokonaislukujen ylivuodoilta, vaatii muuttujien arvojen pakollisen alustamisen ennen käyttöä, käsittelee virheet paremmin standardikirjastossa, soveltaa oletusarvoisesti muuttumattomien viitteiden ja muuttujien käsitettä, tarjoaa vahvan staattisen kirjoittamisen loogisten virheiden minimoimiseksi.

Tärkeimmät innovaatiot:

  • Kääntäjän Linux-ympäristön, Cargo-pakettienhallinnan ja standardi libstd-kirjaston vaatimuksia on korotettu - Glibc:n vähimmäisvaatimukset on nostettu versiosta 2.11 versioon 2.17 ja Linux-ytimen versiosta 2.6.32 versioon 3.2. Rajoitukset koskevat myös libstd:llä rakennettuja Rust-binääritiedostoja. Jakelut RHEL 7, SLES 12-SP5, Debian 8 ja Ubuntu 14.04 täyttävät uudet vaatimukset. RHEL 6:n, SLES 11-SP4:n, Debian 7:n ja Ubuntu 12.04:n tuki lopetetaan. Käyttäjiä, jotka käyttävät ruosteisia suoritettavia tiedostoja ympäristöissä, joissa on vanhempia Linux-ytimiä, kehotetaan päivittämään järjestelmänsä, pysymään vanhemmissa kääntäjäjulkaisuissa tai ylläpitämään omaa libstd-haarukkaaan tasoilla yhteensopivuuden ylläpitämiseksi.

    Yksi syistä vanhojen Linux-järjestelmien tuen poistamiseen ovat rajalliset resurssit jatkaa yhteensopivuuden ylläpitämistä vanhempien ympäristöjen kanssa. Vanhemman Glibcsin tuki edellyttää vanhojen työkalujen käyttöä jatkuvissa integraatiotarkistuksissa, lisääntyneitä versiointivaatimuksia LLVM:ssä ja ristiinkäännösapuohjelmia. Ytimen versiovaatimusten kasvu johtuu libstd:n kyvystä käyttää uusia järjestelmäkutsuja ilman tarvetta ylläpitää tasoja yhteensopivuuden varmistamiseksi vanhempien ytimien kanssa.

  • Stabilisoi IntoFuture-ominaisuuden, joka muistuttaa IntoIteratoria, mutta eroaa jälkimmäisestä käyttämällä ".await"-merkkiä "for … in …" silmukoiden sijaan. Yhdistettynä IntoFuturen kanssa ".await"-avainsana voi odottaa tulevaisuuden ominaisuuden lisäksi mitä tahansa muita tyyppejä, jotka voidaan muuntaa Futureiksi.
  • Ruoste-analysaattoriapuohjelma sisältyy Rust-julkaisujen mukana toimitettuun apuohjelmien kokoelmaan. Apuohjelma on saatavana myös rustup-asennukseen (rustup komponentti lisää ruoste-analysaattori).
  • Cargo-pakettien hallinta toteuttaa työtilan periytymisen eliminoidakseen päällekkäisyydet tyypillisten kenttäarvojen pakettien välillä, kuten Rust-versiot ja arkiston URL-osoitteet. Lisäksi on lisätty tuki useille kohdealustoille kerralla rakentamiseen ("--target"-vaihtoehdossa voidaan nyt määrittää useampi kuin yksi parametri).
  • Uusi osa API:sta on siirretty vakaan luokkaan, mukaan lukien ominaisuuksien menetelmät ja toteutukset on vakautettu:
    • tulevaisuus::Tulevaisuuteen
    • 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*::checked_next_power_of_wo
    • num::NonZeroU*::saturating_add
    • käyttöjärjestelmä::unix::prosessi::CommandExt::prosessiryhmä
    • käyttöjärjestelmä::windows::fs::FileTypeExt::is_symlink_dir
    • käyttöjärjestelmä::windows::fs::FileTypeExt::is_symlink_file
  • C-yhteensopivat tyypit, jotka on aiemmin stabiloitu std::ffi-moduulissa, on lisätty pääkoostumukseen (ytimeen) ja alloc-kirjastoon:
    • ydin::ffi::CStr
    • ydin::ffi::FromBytesWithNulError
    • alloc::ffi::CString
    • alloc::ffi::FromVecWithNulError
    • alloc::ffi::IntoStringError
    • alloc::ffi::NulError
  • Aiemmin std::os::raw-moduulissa stabiloidut C-tyypit on lisätty ydin::ffi- ja std::ffi-moduuleihin (esim. c_uint- ja c_ulong-tyyppejä on ehdotettu C-tyypeille uint ja 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
  • Matalan tason käsittelijät on stabiloitu käytettäviksi Poll-mekanismin kanssa (tulevaisuudessa on tarkoitus tarjota yksinkertaistettu API, joka ei vaadi matalan tason Pull and Pin -rakenteiden käyttöä):

    • tulevaisuus::poll_fn
    • tehtävä::valmis!
  • "const"-attribuuttia, joka määrittää mahdollisuuden käyttää sitä vakioiden sijasta missä tahansa kontekstissa, käytetään slice::from_raw_parts-funktiossa.
  • Tietojen kompaktimman tallentamisen vuoksi Ipv4Addr-, Ipv6Addr-, SocketAddrV4- ja SocketAddrV6-rakenteiden muistiasettelua on muutettu. Saattaa rikkoa yhteensopivuuden yhden laatikon pakettien kanssa, jotka käyttävät std::mem::transmutea matalan tason rakenteen käsittelyyn.
  • Ruostekääntäjän kokoonpano Windows-alustalle käyttää PGO-optimointeja (profiiliohjattu optimointi), joka mahdollisti koodin käännössuorituskyvyn lisäämisen 10-20%.
  • Kääntäjä on ottanut käyttöön uuden varoituksen käyttämättömistä kentistä tietyissä rakenteissa.

Lisäksi voidaan huomioida gccrs-projektin (GCC Rust) valmistelema ja GCC:hen sisällytettäväksi hyväksytty edistymisraportti Rust-kääntäjän vaihtoehtoisen toteutuksen kehittämisestä. Käyttöliittymän integroinnin jälkeen standardia GCC-työkalupakkia voidaan käyttää Rust-ohjelmien kääntämiseen ilman, että tarvitsee asentaa rustc-kääntäjää, joka on rakennettu käyttämällä LLVM-kehitystä. Niin kauan kuin kehitys etenee suunnitelmien mukaan ja ennakoimattomia ongelmia lukuun ottamatta, Rust-kielen käyttöliittymä integroidaan ensi vuoden toukokuussa julkaistavaan GCC 13 -julkaisuun. GCC 13:n Rust-toteutus on beta-tilassa, ei vielä oletuksena käytössä.

Lähde: opennet.ru

Lisää kommentti