Rust 1.34 Rilaxx tal-Lingwa ta' Programmazzjoni

seħħet rilaxx tal-lingwa tal-ipprogrammar tas-sistema Sadid 1.34, żviluppat mill-proġett Mozilla. 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. Qed jiġi żviluppat maniġer tal-pakketti biex iqassam il-libreriji, jiżgura l-assemblaġġ u jamministra d-dipendenzi mill-proġett. merkanzija, li jippermettilek tikseb il-libreriji meħtieġa għall-programm fi klikk waħda. Repożitorju huwa appoġġjat biex jospita libreriji crates.io.

Il-prinċipali innovazzjonijiet:

  • 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ġistri esterni ma' .cargo/config (li jinsabu f'$HOME jew fid-direttorju tal-pakketti)
    ipprovdut sezzjoni “[reġistri]”, u biex tuża reġistru estern, l-għażla “reġistru” dehret fid-deskrizzjoni ta’ kull dipendenza f’Cargo.toml. 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 “?”. fit-testijiet doctests, li jippermettilek 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 'makros proċedurali ipprovdut l-abbiltà li tuża 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)]”;
  • Tipi stabbilizzati (karatteristika) IpprovaFrom и TryInto, li tippermetti 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 (per eżempju, mit-tip u8 għal u32), ġie miżjud tip ta 'żball Infallibbli, li jippermetti użu trasparenti
    TryFrom għall-implimentazzjonijiet eżistenti kollha ta' "From";

  • Il-funzjoni ġiet deprecata CommandExt::before_exec, li ppermetta li jiġi esegwit handler qabel ma jmexxi l-exec, li ġie eżegwit fil-kuntest ta 'proċess ta' tifel imsejjes 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.
    Huwa rakkomandat li tuża funzjoni mhux sigura minflok before_exec CommandExt::pre_exec.

  • Tipi ta' numri interi atomiċi 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|64|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".

Sors: opennet.ru

Żid kumment