Rust 1.60 ohjelmointikielen julkaisu

Yleiskäyttöinen ohjelmointikieli Rust 1.60, 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:

  • Rustc-kääntäjässä on stabiloitu LLVM-pohjainen järjestelmä kattavuustietojen generoimiseksi, jota käytetään koodipeiton arvioimiseen testauksen aikana. Jos haluat ottaa kattavuustiedot käyttöön kokoonpanon aikana, sinun on käytettävä "-Cinstrument-coverage" -lippua, esimerkiksi aloittamalla kokoonpano "RUSTFLAGS="-C instrument-coverage" cargo build" -komennolla. Kun tällä tavalla käännetty suoritettava tiedosto on suoritettu, default.profraw-tiedosto tallennetaan nykyiseen hakemistoon, jonka käsittelyyn voit käyttää Llvm-profdata-apuohjelmaa llvm-tools-preview-komponentista. Llvm-profdatan käsittelemä tulos voidaan sitten välittää llvm-cov:lle, jotta voidaan luoda selitetty koodikattavuusraportti. Tieto linkistä lähdekoodiin on otettu tutkittavasta suoritettavasta tiedostosta, joka sisältää tarvittavat tiedot peittolaskurin ja koodin välisestä yhteydestä. 1| 1|fn main() { 2| 1| println!("Hei, maailma!"); 3| 1|}
  • Rahtipakettien hallinnassa "-timings"-lipun tuki on vakiintunut, mikä sisältää yksityiskohtaisen raportin luomisen rakentamisen edistymisestä ja kunkin vaiheen suoritusajasta. Raportista voi olla hyötyä kokoonpanoprosessin suorituskyvyn optimoinnissa.
  • Rahtipaketin hallinta tarjoaa uuden syntaksin ehdollisen käännöksen ja valinnaisten riippuvuuksien valinnan mekanismille, joka on määritetty Cargo.toml-tiedostossa luettelemalla luettelo nimetyistä ominaisuuksista [features]-osiossa ja aktivoitu ottamalla ominaisuudet käyttöön paketin rakentamisen aikana. käyttämällä "--ominaisuudet" -lippua. Uusi versio lisää tuen riippuvuuksille erillisissä nimiavaruuksissa ja heikoille riippuvuuksille.

    Ensimmäisessä tapauksessa on mahdollista käyttää elementtejä, joissa on etuliite "dep:" "[features]"-osiossa linkittääkseen eksplisiittisesti valinnaiseen riippuvuuteen ilman, että tämä riippuvuus esitetään implisiittisesti ominaisuutena. Toiseen tapaukseen on lisätty tuki “?”-merkillä merkitsemiselle. ("paketin_nimi?/ominaisuuden_nimi") valinnaiset riippuvuudet, jotka tulisi sisällyttää vain, jos jokin muu ominaisuus sisältää annetun valinnaisen riippuvuuden. Esimerkiksi alla olevassa esimerkissä serde-ominaisuuden käyttöönotto ottaa käyttöön "serde"-riippuvuuden sekä "rgb"-riippuvuuden "serde"-ominaisuuden, mutta vain jos "rgb"-riippuvuus on otettu käyttöön muualla: [riippuvuudet] serde = { version = " 1.0.133", optional = true } rgb = { version = "0.8.25", optional = true } [ominaisuudet] serde = ["dep:serde", "rgb?/serde"]

  • Tuki asteittaiselle käännökselle, joka oli poistettu käytöstä viime julkaisussa, on palautettu. Kääntäjän virhe, joka aiheutti ominaisuuden poistamisen käytöstä, on korjattu.
  • Ratkaistiin joitakin ongelmia Instant-ajastimien tarjoamisessa monotonisella ajastuksella, joka ottaa huomioon järjestelmän lepotilassa viettämän ajan. Aikaisemmin ajastimen ohjaamiseen käytettiin aina mahdollisuuksien mukaan OS API:ta, joka ei ottanut huomioon ongelmatilanteita, jotka rikkovat ajan monotonian, kuten laitteisto-ongelmat, virtualisoinnin käyttö tai käyttöjärjestelmän virheet.
  • Uusi osa API:sta on siirretty vakaan luokkaan, mukaan lukien ominaisuuksien menetelmät ja toteutukset on vakautettu:
    • Arc::new_cyclic
    • Rc::uusi_syklinen
    • slice::EscapeAscii
    • <[u8]>::escape_ascii
    • u8::escape_ascii
    • Vanha::varakapasiteetti_mut
    • MaybeUninit::olettaa_init_drop
    • MaybeUninit::olettaa_init_read
    • i8::abs_diff
    • i16::abs_diff
    • i32::abs_diff
    • i64::abs_diff
    • i128::abs_diff
    • isize::abs_diff
    • u8::abs_diff
    • u16::abs_diff
    • u32::abs_diff
    • u64::abs_diff
    • u128::abs_diff
    • käytä::abs_diff
    • Näyttö: io::ErrorKind
    • From for ExitCode
    • Ei varten! (kirjoita "ei koskaan")
    • _Op_Assign<$t>
    • arch::is_aarch64_feature_detected!
  • Kolmas tukitaso on otettu käyttöön mips64-openwrt-linux-musl*- ja armv7-unknown-linux-uclibceabi (softfloat) -alustoille. Kolmas taso sisältää perustuen, mutta ilman automaattista testausta, virallisten koontiversioiden julkaisemista tai sen tarkistamista, voidaanko koodi rakentaa.
  • Kääntäjä on vaihdettu käyttämään LLVM 14:ää.

Lisäksi voit huomata:

  • Lisätty tuki rustc-kääntäjän käynnistykselle käyttämällä rustc_codegen_gcc-taustaohjelmaa, jonka avulla voit käyttää GCC-projektin libgccjit-kirjastoa koodigeneraattorina rustc:ssä, mikä mahdollistaa rustc:n tukemisen GCC:ssä saatavilla oleville arkkitehtuureille ja optimoinnille. Kääntäjäpromootio tarkoittaa kykyä käyttää GCC-pohjaista koodigeneraattoria rustc:ssä itse rustc-kääntäjän rakentamiseen. Käytännön puolella tämän ominaisuuden avulla voit rakentaa rust-ohjelmia arkkitehtuureille, joita ei aiemmin tuettu rustc:ssä.
  • Saatavilla on uutils coreutils 0.0.13 -työkalusarjan julkaisu, jonka sisällä kehitetään Rust-kielellä uudelleen kirjoitetun GNU Coreutils -paketin analogia. Coreutils sisältää yli sata apuohjelmaa, mukaan lukien sort, cat, chmod, chown, chroot, cp, päivämäärä, dd, echo, isäntänimi, id, ln ja ls. Projektin tavoitteena on luoda Coreutilsista monikäyttöinen vaihtoehtoinen toteutus, joka pystyy toimimaan Windows-, Redox- ja Fuchsia-alustoilla sekä jakelu sallivalla MIT-lisenssillä GPL copyleft -lisenssin sijaan.

    Uusi versio on parantanut monien apuohjelmien toteutuksia, mukaan lukien merkittävästi parannettu cp-, dd-, df-, split- ja tr-apuohjelmien yhteensopivuus GNU-projektin vastaavien kanssa. Online-dokumentaatio toimitettu. Clap-jäsennintä käytetään jäsentämään komentorivin argumentteja, mikä on parantanut "--help"-lipun tulosta ja lisännyt tukea pitkien komentojen lyhenteille (voit esimerkiksi määrittää "ls -col" "ls -color" sijaan. ”).

Lähde: opennet.ru

Lisää kommentti