Rust 1.57 Programming Language Release

Die vrystelling van die stelselprogrammeertaal Rust 1.57, wat deur die Mozilla-projek gestig is, maar nou ontwikkel is onder die vaandel van die onafhanklike nie-winsgewende organisasie Rust Foundation, is gepubliseer. Die taal fokus op geheueveiligheid, verskaf outomatiese geheuebestuur en bied die middele om hoë taakparallellisme te bereik sonder om 'n vullisverwyderaar of looptyd te gebruik (looptyd word verminder tot basiese inisialisering en instandhouding van die standaardbiblioteek).

Rust se outomatiese geheuebestuur red die ontwikkelaar van foute wanneer wysers gemanipuleer word en beskerm teen probleme wat ontstaan ​​as gevolg van laevlakgeheuemanipulasie, soos toegang tot 'n geheuearea nadat dit vrygestel is, herkenning van nulwysers, bufferoorskryding, ens. Om biblioteke te versprei, bouwerk te verskaf en afhanklikhede te bestuur, ontwikkel die projek die Cargo-pakketbestuurder. Die crates.io-bewaarplek word ondersteun vir die aanbieding van biblioteke.

Belangrikste innovasies:

  • Die gebruik van die "paniek!"-makro is gestabiliseer. in kontekste wat tydens samestelling geskep is, soos "const fn" verklarings. Benewens die gebruik van "paniek!" const-verklarings laat die gebruik van die "assert!"-makro toe. en 'n paar ander standaard biblioteek API's. Stabilisering dek nog nie die hele formatering-infrastruktuur nie, so in sy huidige vorm is die "paniek!"-makro kan slegs gebruik word met statiese stringe (paniek!(“...")) of met 'n enkele geïnterpoleerde waarde "&str" wanneer vervang word (paniek!("{}", a)), wat beperk moet word tot die vervanging van "{ }" sonder formatering spesifiseerders en ander tipes. In die toekoms sal die toepaslikheid van makro's in konstante kontekste uitgebrei word, maar die gestabiliseerde vermoëns is reeds voldoende om beweringkontroles by die samestellingstadium uit te voer: const _: () = assert!(std::mem::size_of:: () == 64); const _: () = beweer!(std::mem::grootte_van:: () == 8);
  • Die Cargo-pakketbestuurder laat die gebruik toe van profiele met arbitrêre name, nie beperk tot "dev", "release", "test" en "bench". Byvoorbeeld, om optimalisering in die koppelingstadium (LTO) slegs moontlik te maak wanneer die finale produksamestellings gegenereer word, kan jy 'n "produksie" profiel in Cargo.toml skep en die "lto = true" vlag daarby voeg. Wanneer jy egter jou eie profiele definieer, moet jy 'n bestaande profiel spesifiseer om verstekinstellings daarvan te erf. Die voorbeeld hieronder skep 'n "produksie"-profiel wat die "vrystelling"-profiel aanvul deur die "lto = true"-vlag in te sluit. Die profiel self word geaktiveer deur vrag te roep met die "--profiel produksie" opsie, en die samestelling artefakte sal in die "teiken/produksie" gids geplaas word. [profile.production] inherits = "vrystelling" lto = waar
  • Die gebruik van try_reserve vir die Vec-, String-, HashMap-, HashSet- en VecDeque-tipes is gestabiliseer, wat jou toelaat om vooraf spasie te reserveer vir 'n sekere aantal elemente van 'n gegewe tipe om die frekwensie van geheuetoewysingsbewerkings te verminder en te vermy ineenstort tydens operasie as gevolg van 'n gebrek aan geheue.
  • Dit word toegelaat om makro's met krullerige hakies te spesifiseer in uitdrukkings soos "m!{ .. }.method()" en "m!{ .. }?".
  • Die uitvoering van die File::read_to_end en read_to_string funksies is geoptimaliseer.
  • Ondersteuning vir die Unicode-spesifikasie is opgedateer na weergawe 14.0.
  • Die aantal funksies gemerk "#[must_use]" is uitgebrei om 'n waarskuwing uit te reik as die terugkeerwaarde geïgnoreer word, wat help om foute te identifiseer wat veroorsaak word deur aan te neem dat 'n funksie waardes sal verander eerder as om 'n nuwe waarde terug te gee.
  • Bygevoeg eksperimentele backend vir kode generering met behulp van libgccjit.
  • 'n Nuwe gedeelte van die API is na die kategorie stal geskuif, insluitend die metodes en implementering van eienskappe is gestabiliseer:
    • [T; N]::as_mut_slice
    • [T; N]::as_slice
    • versamelings::TryReserveError
    • HashMap::try_reserve
    • HashSet::try_reserve
    • String::try_reserve
    • String::try_reserve_exact
    • Vec::try_reserve
    • Vec::try_reserve_exact
    • VecDeque::try_reserve
    • VecDeque::try_reserve_exact
    • Iterator::map_while
    • iter::MapWhile
    • proc_macro::is_beskikbaar
    • Command::get_program
    • Command::get_args
    • Command::get_envs
    • Command::get_current_dir
    • CommandArgs
    • CommandEnvs
  • Die “const”-kenmerk, wat bepaal of dit in enige konteks in plaas van konstantes gebruik kan word, word in die funksiewenk::unreachable_unchecked gebruik.
  • Die derde vlak van ondersteuning is geïmplementeer vir die armv6k-nintendo-3ds, armv7-unknown-linux-uclibceabihf, m68k-unknown-linux-gnu, aarch64-kmc-solid_asp3, armv7a-kmc-solid_asp3-eabi en armv7a-kmc- solid_asp3-eabihf platforms. Die derde vlak behels basiese ondersteuning, maar sonder outomatiese toetsing, publisering van amptelike bouwerk, of kontrolering of die kode gebou kan word.

Bron: opennet.ru

Voeg 'n opmerking