Rust 1.34 Rilaxx tal-Lingwa ta' Programmazzjoni

Il-lingwa tal-ipprogrammar tas-sistema Rust 1.34, żviluppata mill-proġett Mozilla, ġiet rilaxxata. Il-lingwa tiffoka fuq is-sikurezza tal-memorja, tipprovdi ġestjoni awtomatika tal-memorja, u tipprovdi mezz biex jinkiseb paralleliżmu għoli tal-kompitu mingħajr ma tuża garbage collector jew runtime.

Il-ġestjoni awtomatika tal-memorja tas-sadid teħles lill-iżviluppatur mill-manipulazzjoni tal-pointer u tipproteġi kontra problemi li jirriżultaw minn manipulazzjoni tal-memorja ta 'livell baxx, bħal aċċessi għall-memorja wara ħielsa, dereferences null tal-pointer, buffer overruns, u affarijiet simili. Biex tqassam il-libreriji, tiżgura l-assemblaġġ u tmexxi d-dipendenzi, il-proġett qed jiżviluppa l-maniġer tal-pakkett tal-Merkanzija, li jippermettilek tikseb il-libreriji meħtieġa għall-programm fi klikk waħda. Ir-repożitorju crates.io huwa appoġġjat għall-hosting tal-libreriji.

Innovazzjonijiet ewlenin:

  • Il-maniġer tal-pakkett tat-Tagħbija żied għodod biex jaħdem ma 'reġistri ta' pakketti alternattivi li jistgħu jeżistu flimkien mar-reġistru pubbliku crates.io. Pereżempju, l-iżviluppaturi ta 'applikazzjonijiet proprjetarji issa jistgħu jużaw ir-reġistru privat tagħhom stess, li jista' jintuża meta jelenkaw id-dipendenzi f'Cargo.toml, u japplikaw mudell ta 'verżjoni simili għal crates.io għall-prodotti tagħhom, kif ukoll jirreferu dipendenzi għaż-żewġ kaxex. io u għar-reġistru tiegħek.

    Biex iżżid reġistru estern għal ~/.cargo/config
    għażla ġdida "my-reġistru" hija pprovduta fit-taqsima "[reġistri]", u għażla "other-crate" ġiet miżjuda biex isemmi r-reġistru estern fid-dipendenzi f'Cargo.toml fit-taqsima "[dipendenzi]". Biex tikkonnettja ma 'reġistru addizzjonali, sempliċement poġġi t-token ta' awtentikazzjoni fil-fajl ~/.cargo/credentials u mexxi l-kmand
    "login tal-merkanzija --registry=my-registry" u biex tippubblika pakkett -
    "cargo publish -registry=ir-reġistru tiegħi";

  • Żid appoġġ sħiħ għall-użu tal-operatur “?”. f'doctests, li jippermettulek tuża kodiċi eżempju mid-dokumentazzjoni bħala testijiet. Preċedentement operatur
    "?" jista 'jintuża biex jimmaniġġja żbalji waqt l-eżekuzzjoni tat-test biss fil-preżenza tal-funzjoni "fn main()" jew fil-funzjonijiet "#[test]";

  • Fl-attributi tad-dwana definiti bl-użu ta' macros proċedurali, huwa possibbli li jintużaw settijiet arbitrarji ta' tokens (“#[attr($tokens)]”, “#[attr[$tokens]] u #[attr{$tokens}]”). Preċedentement, l-elementi setgħu jiġu speċifikati biss f'forma ta' siġra/rikorsiva bl-użu ta' string literals, pereżempju “#[foo(bar, baz(quux, foo = “bar”)]”, iżda issa huwa possibbli li jintużaw enumerazzjonijiet (' #[firxa(0. .10)]') u kostruzzjonijiet bħal “#[bound(T: MyTrait)]”;
  • Il-karatteristiċi TryFrom u TryInto ġew stabbilizzati, li jippermettu konverżjonijiet tat-tip bl-immaniġġjar tal-iżbalji. Pereżempju, metodi bħal from_be_bytes b'tipi interi jużaw arrays bħala input, iżda d-data ta 'spiss tiġi f'tip Slice, u l-konverżjoni bejn arrays u slices hija problematika li tagħmel manwalment. Bl-għajnuna ta 'karatteristiċi ġodda, l-operazzjoni speċifikata tista' titwettaq fuq il-fly permezz ta 'sejħa għal .try_into(), pereżempju, "let num = u32::from_be_bytes(slice.try_into()?)". Għal konverżjonijiet li dejjem jirnexxu (pereżempju, mit-tip u8 għal u32), ġie miżjud tip ta’ żball Infallibbli biex jippermetti użu trasparenti ta’
    TryFrom għall-implimentazzjonijiet eżistenti kollha ta' "From";

  • Deprecated il-funzjoni CommandExt::before_exec, li ppermettiet l-eżekuzzjoni ta 'handler qabel exec li kien eżegwit fil-kuntest ta' proċess tifel forked wara s-sejħa fork(). Taħt kundizzjonijiet bħal dawn, xi riżorsi tal-proċess ġenitur, bħal deskritturi tal-fajls u żoni tal-memorja mapep, jistgħu jiġu duplikati, li jistgħu jwasslu għal imġieba mhux definita u tħaddim ħażin tal-libreriji.
    Minflok before_exec, huwa rakkomandat li tuża l-funzjoni mhux sigura CommandExt::pre_exec.

  • Tipi ta' numri interi atomiċi stabbilizzati ffirmati u mhux iffirmati li jvarjaw fid-daqs minn 8 sa 64 bit (per eżempju, AtomicU8), kif ukoll tipi ffirmati NonZeroI[8|16|32|54|128].
  • Porzjon ġdid tal-API ġie mċaqlaq għall-kategorija stabbli, inkluż Any::type_id, Error::type_id, slice::sort_by_cached_key, str::escape_*, str::split_ascii_whitespace, Instant::checked_[add|sub ] u l-metodi SystemTime ġew stabbilizzati ::checked_[add|sub]. Il-funzjonijiet iter::from_fn u iter::suċċessuri ġew stabbilizzati;
  • Għat-tipi kollha ta' numru sħiħ, il-metodi checked_pow, saturating_pow, wrapping_pow u overflowing_pow huma implimentati;
  • Żid il-ħila li tippermetti l-ottimizzazzjonijiet fl-istadju tal-konnessjoni billi tispeċifika l-għażla tal-bini "-C linker-plugin-lto" (rustc jikkompila kodiċi Rust f'bitcode LLVM, li jippermetti li jiġu applikati ottimizzazzjonijiet LTO).

Sors: opennet.ru

Żid kumment