Rust 1.34 Programlingvo-Eldono

okazis eldono de la sistemo de programlingvo Rusto 1.34, disvolvita de la projekto Mozilla. La lingvo temigas memorsekurecon, disponigas aŭtomatan memoradministradon, kaj disponigas rimedon por atingi altan taskan paralelecon sen uzado de rubkolektanto aŭ rultempo.

La aŭtomata memoradministrado de Rust liberigas la ellaboranton de montrilo-manipulado kaj protektas kontraŭ problemoj ekestiĝantaj de malaltnivela memormanipulado, kiel ekzemple post-liberaj memoraliroj, nulaj montriloj dereferences, bufrotranspaso, kaj similaĵo. Pakaĵmanaĝero estas evoluigita por distribui bibliotekojn, certigi kunigon kaj administri dependecojn per la projekto. kargo, permesante al vi akiri la bibliotekojn necesajn por la programo per unu klako. Deponejo estas subtenata por gastigi bibliotekojn kestoj.io.

Ĉefa novigoj:

  • La administranto de pakaĵoj de Cargo aldonis ilojn por labori kun alternativaj pakaj registroj, kiuj povas kunekzisti kun la publika registro crates.io. Ekzemple, programistoj de proprietaj aplikoj nun povas uzi sian propran privatan registron, kiu povas esti uzata dum listigo de dependecoj en Cargo.toml, kaj apliki versionan modelon similan al crates.io por siaj produktoj, kaj ankaŭ referenci dependecojn al ambaŭ kestoj. io kaj al via propra registro.

    Por aldoni eksterajn registrojn al .cargo/config (situanta en $HOME aŭ en la paka dosierujo)
    provizita sekcio "[registroj]", kaj por uzi eksteran registron, la opcio "registro" aperis en la priskribo de ĉiu dependeco en Cargo.toml. Por konektiĝi al plia registro, simple metu la aŭtentikigilon en la ~/.cargo/credentials-dosieron kaj rulu la komandon
    "ŝarĝo ensaluto --registry=my-registry" kaj por eldoni pakaĵon -
    "cargo publish -registry=mia-registro";

  • Aldonita plena subteno por uzado de la "?" operatoro. en provoj doktestoj, permesante al vi uzi ekzemplokodon el la dokumentaro kiel testojn. Antaŭe funkciigisto
    "?" povus esti uzata por trakti erarojn dum testa ekzekuto nur en la ĉeesto de la funkcio “fn main()” aŭ en la funkcioj “#[testo]”;

  • En kutimaj atributoj difinitaj per proceduraj makrooj provizita la kapablo uzi arbitrajn arojn de ĵetonoj ("#[attr($tokens)]", "#[attr[$tokens]] kaj #[attr{$tokens}]"). Antaŭe, elementoj povus esti specifitaj nur en arbo/rekursiva formo uzante ĉenvortaĵojn, ekzemple “#[foo(bar, baz(quux, foo = “bar”)]”, sed nun eblas uzi listojn (' #[gamo(0. .10)]') kaj konstruoj kiel “#[bindita(T: MiaTrajto)]”;
  • Stabiligitaj tipoj (trajto) Provu De и TryInto, permesante tipkonvertojn kun erartraktado. Ekzemple, metodoj kiel from_be_bytes kun entjerspecoj uzas tabelojn kiel enigaĵon, sed la datumoj ofte venas en Slice-tipo, kaj konvertado inter tabeloj kaj tranĉaĵoj estas problema por fari mane. Helpe de novaj trajtoj, la specifita operacio povas esti farita sur la flugo per alvoko al .try_into(), ekzemple, "let num = u32::from_be_bytes(slice.try_into()?)". Por konvertiĝoj kiuj ĉiam sukcesas (ekzemple, de tipo u8 al u32), erartipo estis aldonita Infalible, permesante travideblan uzon
    TryFrom por ĉiuj ekzistantaj efektivigoj de "De";

  • Funkcio estas malrekomendita CommandExt::antaŭ_exec, kiu permesis ekzekuti pritraktilon antaŭ ol ruli exec, kiu estis ekzekutita en la kunteksto de infana procezo forkigita post la voko fork(). Sub tiaj kondiĉoj, kelkaj resursoj de la gepatra procezo, kiel ekzemple dosierpriskribiloj kaj mapitaj memorareoj, povus esti duobligitaj, kio povus konduki al nedifinita konduto kaj malĝusta funkciado de bibliotekoj.
    Oni rekomendas uzi nesekuran funkcion anstataŭ before_exec CommandExt::pre_exec.

  • Stabiligitaj subskribitaj kaj sensignaj atomaj entjeroj intervalantaj en grandeco de 8 ĝis 64 bitoj (ekzemple, Atoma U8), same kiel subskribitajn tipojn NeNuloI[8|16|32|64|128].
  • Nova parto de la API estis movita al la stabila kategorio, inkluzive de Any::type_id, Error::type_id, slice::sort_by_cached_key, str::escape_*, str::split_ascii_whitespace, Instant::checked_[add|sub ] kaj SystemTime metodoj estis stabiligitaj ::checked_[add|sub]. La funkcioj iter::from_fn kaj iter::posteuloj estis stabiligitaj;
  • Por ĉiuj entjeroj, la checked_pow, saturating_pow, wrapping_pow kaj overflowing_pow metodoj estas efektivigitaj;
  • Aldonis la kapablon ebligi optimumojn ĉe la liga etapo specifante la konstruopcion "-C linker-plugin-lto".

fonto: opennet.ru

Aldoni komenton