Rust 1.57 Rilaxx tal-Lingwa ta' Programmazzjoni

Ġie ppubblikat ir-rilaxx tal-lingwa ta 'programmar tas-sistema Rust 1.57, imwaqqfa mill-proġett Mozilla, iżda issa żviluppat taħt l-awspiċi tal-organizzazzjoni indipendenti mingħajr skop ta' qligħ Rust Foundation. Il-lingwa tiffoka fuq is-sigurtà tal-memorja, tipprovdi ġestjoni awtomatika tal-memorja, u tipprovdi l-mezzi biex tikseb paralleliżmu għoli tal-kompitu mingħajr ma tuża kollettur taż-żibel jew runtime (runtime huwa mnaqqas għal inizjalizzazzjoni bażika u manutenzjoni tal-librerija standard).

Il-ġestjoni awtomatika tal-memorja ta 'Rut telimina l-iżbalji meta timmanipula pointers u tipproteġi kontra problemi li jirriżultaw minn manipulazzjoni tal-memorja ta' livell baxx, bħall-aċċess għal reġjun tal-memorja wara li jkun ġie meħlus, dereferences null pointer, buffer overruns, eċċ. Biex iqassam il-libreriji, jiżgura l-assemblaġġ u jimmaniġġja d-dipendenzi, il-proġett qed jiżviluppa l-maniġer tal-pakkett tat-Tagħbija. Ir-repożitorju crates.io huwa appoġġjat għall-hosting tal-libreriji.

Innovazzjonijiet ewlenin:

  • L-użu tal-makro "paniku!" ġie stabbilizzat. f'kuntesti maħluqa waqt il-kumpilazzjoni, bħal dikjarazzjonijiet "const fn". Barra minn hekk, minbarra li tuża "paniku!" dikjarazzjonijiet const jippermettu l-użu tal-makro “assert!”. u xi APIs oħra tal-librerija standard. L-istabilizzazzjoni għadha ma tkoprix l-infrastruttura kollha tal-ifformattjar, għalhekk fil-forma attwali tagħha l-makro "paniku!" jista' jintuża biss ma' kordi statiċi (paniku!(“...")) jew b'valur interpolat wieħed "&str" meta jissostitwixxi (paniku!("{}", a)), li għandu jkun limitat għas-sostituzzjoni ta' "{ }" mingħajr ifformattjar ta' speċifikaturi u tipi oħra. Fil-futur, l-applikabbiltà tal-makros f'kuntesti kostanti se tiġi estiża, iżda l-kapaċitajiet stabbilizzati diġà huma biżżejjed biex iwettqu kontrolli tal-asserzjoni fl-istadju tal-kumpilazzjoni: const _: () = assert!(std::mem::size_of:: () == 64); const _: () = assert!(std::mem::size_of:: () == 8);
  • Il-maniġer tal-pakkett tal-Merkanzija jippermetti l-użu ta 'profili b'ismijiet arbitrarji, mhux limitati għal "dev", "rilaxx", "test" u "bank". Pereżempju, biex tippermetti l-ottimizzazzjoni fl-istadju tal-konnessjoni (LTO) biss meta jiġu ġġenerati l-assemblaġġi tal-prodott finali, tista 'toħloq profil ta' "produzzjoni" f'Cargo.toml u żżid il-bandiera "lto = true" miegħu. Madankollu, meta tiddefinixxi l-profili tiegħek, trid tispeċifika profil eżistenti biex tirret is-settings default minnu. L-eżempju hawn taħt joħloq profil ta’ “produzzjoni” li jikkumplimenta l-profil ta’ “rilaxx” billi jinkludi l-bandiera “lto = true”. Il-profil innifsu huwa attivat billi ssejjaħ merkanzija bl-għażla "--profile production", u l-artifacts tal-assemblaġġ jitqiegħdu fid-direttorju "mira/produzzjoni". [profile.production] inherits = "rilaxx" lto = veru
  • L-użu ta 'try_reserve għat-tipi Vec, String, HashMap, HashSet u VecDeque ġie stabbilizzat, li jippermettilek li tirriżerva spazju bil-quddiem għal ċertu numru ta' elementi ta 'tip partikolari sabiex titnaqqas il-frekwenza tal-operazzjonijiet ta' allokazzjoni tal-memorja u tevita ħabtiet waqt l-operazzjoni minħabba nuqqas ta 'memorja.
  • Huwa permess li jiġu speċifikati macros b'ċingi kaboċċi f'espressjonijiet bħal "m!{ .. }.method()" u "m!{ .. }?".
  • L-eżekuzzjoni tal-funzjonijiet File::read_to_end u read_to_string ġiet ottimizzata.
  • L-appoġġ għall-ispeċifikazzjoni Unicode ġie aġġornat għall-verżjoni 14.0.
  • Espanda n-numru ta 'funzjonijiet immarkati "#[must_use]" biex toħroġ twissija jekk il-valur tar-ritorn jiġi injorat, li jgħin biex jiġu identifikati żbalji kkawżati billi wieħed jassumi li funzjoni se tbiddel il-valuri aktar milli tirritorna valur ġdid.
  • Backend sperimentali miżjud għall-ġenerazzjoni tal-kodiċi bl-użu ta 'libgccjit.
  • Porzjon ġdid tal-API ġie mċaqlaq għall-kategorija ta 'stabbli, inklużi l-metodi u l-implimentazzjonijiet tal-karatteristiċi ġew stabbilizzati:
    • [T; N]::as_mut_slice
    • [T; N]::as_slice
    • kollezzjonijiet::TryReserveError
    • HashMap::try_reserve
    • HashSet::try_reserve
    • String::try_reserve
    • String::try_reserve_exact
    • Vec::pprova_riżerva
    • Vec::try_reserve_exact
    • VecDeque::try_reserve
    • VecDeque::try_reserve_exact
    • Iterator::map_while
    • iter::MapWhile
    • proc_macro::hija_disponibbli
    • Kmand::get_program
    • Kmand::get_args
    • Kmand::get_envs
    • Kmand::get_current_dir
    • CommandArgs
    • CommandEnvs
  • L-attribut "const", li jiddetermina jekk jistax jintuża fi kwalunkwe kuntest minflok kostanti, jintuża fil-funzjoni hint::unreachable_unchecked.
  • It-tielet livell ta' appoġġ ġie implimentat għall-armv6k-nintendo-3ds, armv7-unknown-linux-uclibceabihf, m68k-unknown-linux-gnu, aarch64-kmc-solid_asp3, armv7a-kmc-solid_asp3-eabi u armv7a-kmc- solid_asp3-eabihf pjattaformi. It-tielet livell jinvolvi appoġġ bażiku, iżda mingħajr ittestjar awtomatizzat, pubblikazzjoni ta 'bini uffiċjali, jew verifika jekk il-kodiċi jistax jinbena.

Sors: opennet.ru

Żid kumment