Rust 1.36 Programlingvo-Eldono

eldonita eldono de la sistemo de programlingvo Rusto 1.36, fondita 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:

  • Trajto stabiligita estontaj, kiu reprezentas valoron, kies taksado eble ankoraŭ ne estas finita dum uzado de async / .wait-blokoj. Nesinkronaj valoroj difinitaj per Estonteco ebligas daŭrigi ekzekuti utilan laboron en la fadeno, samtempe atendante la kompletigon de kalkuloj de certa valoro;
  • Biblioteko stabiligita alloc, kiu disponigas inteligentajn montrilojn kaj kolektojn por administri memor-asignitajn valorojn. Memorasigno en std nun uzas la tipon Afero, kiuj estas reeksportitaj el alok. Aparta uzo de alloc havas sencon en aplikoj ne ligitaj al std ("#![no_std]"), same kiel en bibliotekoj dizajnitaj por uzo en similaj programoj sen std;
  • Preterpasi ĉekojn por ĝusta inicialigo de valoroj proponis meza tipo Eble Unuo, kiu povas esti uzata anstataŭ la mem::nekomencigita funkcio kiel pli sekura alternativo. La mem::uninitialized-funkcio estas oportuna por rapide krei tabelojn, sed ĝi misgvidas la kompililon ĉar ĝi ŝajnas esti inicialigita, sed en realeco la valoro restas nekomencigita. EbleUninit ebligas al vi eksplicite indiki al la kompililo, ke la valoro estas nekomencigita, konsideri la eblan nedifinitan konduton asociitan kun ĉi tio, kaj ankaŭ organizi kontrolojn en programoj per "eble_t:" kaj paŝo-post-paŝa inicialigo, markante ĝian kompletigon. uzante la alvokon ".assume_init()". Kun la apero de MaybeUninit, la mem::nekomencigita funkcio estis malrekomendita kaj ne estas rekomendita por uzo;
  • La tekniko NLL (Ne-Leksikaj Vivdaŭroj), kiu vastigis la sistemon por registri la vivdaŭron de pruntitaj variabloj, estis stabiligita por la Rust 2015-lingvo (komence, NLL estis subtenata nur de Rust 2018). Anstataŭ fari vivdaŭrojn ĉe la vortfarada nivelo, NLL faras tion sur la nivelo de la aro de montriloj en la ekzekutflua grafeo. Ĉi tiu aliro permesas pliigi la kvaliton de kontrolado de la prunto de variabloj (pruntkontrolilo) kaj permesi la ekzekuton de iuj specoj de ĝusta kodo, kies uzo antaŭe kondukis al eraro. La nova konduto ankaŭ multe pli facilas sencimigi;
  • Nova efektivigo de asociaj tabeloj inkludis HashMap, surbaze de la apliko de la strukturo Svisa Tablo (aŭtomate ŝargita hashbrown::HashMap, krom se eksplicite dirite alie, kiel ekzemple std::HashMap, kiu baziĝas sur SipHash 1-3). La programara interfaco restas la sama, kaj la diferencoj videblaj al la programisto resumiĝas al pliigita rendimento kaj reduktita memorkonsumo;
  • En la pakaĵmanaĝero kargo aldonis la opcio "--offline", kiu ebligas funkciadon sen aliro al la reto, en kiu nur pakaĵoj konservitaj en la loka sistemo estas uzataj dum la instalado de dependecoj. Se la dependeco ne estas en la loka kaŝmemoro, eraro estos ĵetita. Por antaŭŝargi dependecojn en la lokan kaŝmemoron antaŭ ol eksterrete, vi povas uzi la komandon "cargo fetch";
  • Efektivigis la kapablon nomi la makroon "dbg!" indikante plurajn argumentojn;
  • La atributo "const", kiu determinas la eblecon uzi en iu ajn kunteksto anstataŭ konstantojn, estas uzata por metodoj
    Aranĝo::from_size_align_unchecked,
    mem::bezonas_drop,
    NonNull::pendantaj kaj
    NonNull::cast;

  • Nova parto de APIoj estis translokigita al la stabila kategorio, inkluzive de metodoj, kiuj estis stabiligitaj
    tasko::Waker, tasko::Enketo,
    VecDeque::turni_maldekstren, VecDeque::rotate_dekstren,
    Read::read_vectored, Write::write_vectored,
    Iterator::kopiita,
    BorrowMut (por ŝnuroj) kaj str::as_mut_ptr.

fonto: opennet.ru

Aldoni komenton