Yleiskäyttöinen ohjelmointikieli Rust 1.78, 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:
- On ehdotettu uutta attribuutin nimiavaruutta "#[diagnostic]", joka tarjoaa keinon vaikuttaa kääntäjän tuottamiin virheilmoituksiin. Ensimmäinen uudessa tilassa on "#[diagnostic::on_unimplemented]"-attribuutti, jolla voidaan mukauttaa virheilmoituksia tilanteessa, jossa on käytettävä ominaisuutta, jota ei ole toteutettu kyseiselle tyypille. #[diagnostic::on_unimplemented( message = "My Message for `ImportantTrait<{A}>` ei ole käytössä `{Self}`", label = "Oma etiketti", note = "Huomautus 1", note = "Huomaa 2" )] ominaisuus ImportantTrait {} fn use_my_trait(_: impl ImportantTrait ) {} fn main() { use_my_trait(String::new()); } error[E32]: Viestini `ImportantTrait ` ei ole toteutettu riville "String" —> src/main.rs:0277:32 | 12 | use_my_trait(String::new()); | ———— ^^^^^^^^^^^^^ Oma etiketti | | | vaaditaan tämän kutsun käyttöönoton yhteydessä | = apu: ominaisuus `TärkeäTrait ` ei ole toteutettu kohdassa "String" = huomautus: Huomautus 18 = huomautus: Huomautus 12
- Vaarallisiin toimintoihin sovelletut ennakkotarkistukset voidaan nyt lykätä koodin luomiseen asti, jolloin nämä tarkistukset voidaan suorittaa ilman, että tarvitsee rakentaa vakiokirjastoa "#[cfg(debug_assertions)]"-tilassa. Tarkastusten käynnistämiseksi nyt riittää, että otat käyttöön virheenkorjausvahvistukset koodisi testi- tai virheenkorjauskoonnoksia varten.
- Normaalikirjaston funktioiden käyttäytyminen, jotka vaikuttavat osoittimien ja viipaleiden kohdistukseen, on nyt ennustettavissa ajon aikana ja riippuu syötetiedoista. Funktio pointer::align_offset, joka laskee siirtymän osoittimen tasaamiseksi, palauttaa nyt arvon use::MAX vain, jos toiminto epäonnistuu. Funktiot slice::align_to ja slice::align_to_mut, jotka muuttavat siivut esitykseksi, jossa on tasattu keskiviipale ja alkuperäiset alku- ja loppuviipaleet, palauttavat nyt aina suurimman keskiosan.
- Seuraavat siirrettiin vakaaseen luokkaan:
- impl Lue &Stdin
- Salli ei-staattisen (ei-staattisen) käyttöiän käyttö joillekin std::error::virheisiin liittyville toteutuksille.
- Impl täytäntöönpano ?Kokoarvo on sallittu.
- impl From for io::Error
- Barrier::new()-funktio on stabiloitu käytettäväksi "const"-attribuutin kanssa missä tahansa yhteydessä vakioiden sijaan.
- Kohdealustoille x86_64-pc-windows-msvc, i686-pc-windows-msvc, x86_64-pc-windows-gnu, i686-pc-windows-gnu, x86_64-pc-windows-gnullvm ja i686-gnulvm vaatii nyt vähintään Windows 10 -version.
- Kolmas tukitaso on otettu käyttöön alustoille wasm32-wasip2, arm64ec-pc-windows-msvc, armv8r-none-eabihf ja loongarch64-unknown-linux-musl. Kolmas taso sisältää perustuen, mutta ilman automaattista testausta, virallisten koontiversioiden julkaisemista tai sen tarkistamista, voidaanko koodi rakentaa.
- Kohdealustan Add wasm32-wasip1 toinen tukitaso on otettu käyttöön. Toinen tukitaso sisältää asennustakuun.
- Alusta wasm32-wasi-preview1-threads on nimetty uudelleen wasm32-wasip1-threadsiksi.
- Kääntäjä on vaihdettu käyttämään LLVM 18:aa. Käytettäessä LLVM 18:aa x86-32- ja x86-64-arkkitehtuureille, u128- ja i128-tyyppeihin liittyvää ABI:ta on muutettu.
- Cargo Pact Managerissa lukkotiedostojen versio 4 (lockfile v4) on vakiintunut.
- Cargolla on vakiintunut globaali välimuisti, jossa on tietoa uusimmasta tiedonkäytöstä. Välimuistia isännöidään $CARGO_HOME/.global-cachessa SQLiten avulla, ja se päivitetään automaattisesti vastaamaan viimeisimpiä muutoksia indeksiin, laatikkotiedostoon, koodihakemistoon, git-klooniin ja git checkoutiin.
Lisäksi Borgo-ohjelmointikieli yrittää olla ilmaisuvoimaisempi kuin Go-kieli, mutta vähemmän monimutkainen kuin Rust-kieli. Borgo yhdistää Go- ja Rust-kielen parhaat ominaisuudet ja korjaa kunkin kielen puutteet. Esimerkiksi Go on yksinkertainen ja suoraviivainen, mutta se ei tarjoa edistyneitä turvaominaisuuksia. Rust-kieli tarjoaa työkaluja turvalliseen ohjelmointiin, mutta on liian monimutkainen. Projektia kehittää Marco Sampelgrini, The Simple Haskell Handbookin kirjoittaja ja jatkuvan Quad CI -integraatiojärjestelmän kehittäjä.

Borgo käyttää staattista kirjoitusta, Go-tyyppisiä tyyppejä ja Rust-tyyppistä syntaksia. Puolipisteet ovat valinnaisia Borgo-koodin rivien lopussa. Borgo-koodi on koottu Go-esitykseen, joka on täysin yhteensopiva olemassa olevien Go-pakettien kanssa. Kääntäjäkoodi on kirjoitettu Rust-kielellä ja sitä jaetaan ISC-lisenssillä. käytä fmt enum NetworkStatea { Loading, Failed(int), Success(T), } struct Response { otsikko: merkkijono, kesto: int, } fn main() { let res = Response { otsikko: "Hei maailma", kesto: 0, } anna tila = NetworkState.Success(res) anna msg = vastaa tila { NetworkState.Loading => "lataa edelleen", NetworkState.Failed(code) => fmt.Sprintf("Sain virhekoodin: %d", koodi), NetworkState.Success (res) => res.title, } fmt.Println(msg) }
Lähde: opennet.ru
