Rust 1.38 Programlingvo-Eldono

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

  • Aldonita dukta kompila reĝimo (pipelined), en kiu la konstruo de dependa kestopakaĵo komenciĝas tuj kiam la dependecaj metadatenoj iĝas disponeblaj, sen atendi ke ĝia kompilo finiĝos. Dum kompilado de pako, la dependecoj ne bezonas esti plene kunvenitaj, nur difinante la metadatenojn, kiuj inkluzivas listojn de tipoj, dependecoj kaj eksportitaj elementoj. Metadatenoj estas disponeblaj frue en la kompilprocezo, do ligitaj pakaĵoj nun povas esti kompilitaj multe pli frue. Konstruante unuopajn pakaĵojn, la proponita reĝimo ne influas rendimenton, sed se la konstruo kovras pakaĵojn kun branĉitaj dependecoj, la ĝenerala konstrutempo povas esti reduktita je 10-20%;
  • Certigas detekton de malĝusta uzo de funkcioj std::mem::nekomencigita и std::mem::nuligita. Ekzemple, std::mem::uninitialized estas oportuna por rapide krei tabelojn, sed ĝi misgvidas la kompililon ĉar ĝi ŝajnas esti inicialigita, sed fakte la valoro restas nekomencigita. La mem::nekomencigita funkcio jam estas markita kiel malrekomendita kaj rekomendas uzi mezan tipon anstataŭe Eble Unuo. Koncerne mem::zeroed, ĉi tiu funkcio povas kaŭzi problemojn kun tipoj, kiuj ne povas akcepti nulvalorojn.

    Por helpi identigi nedifinitan konduton, la nova eldono aldonas lintkontrolon al la kompililo, kiu detektas iujn problemojn kun mem::uninitialized aŭ mem::zeroed. Ekzemple, vi nun ricevas eraron kiam vi provas uzi mem::uninitialized aŭ mem::zeroed kun tipoj &T kaj Box‹T›, kiuj reprezentas montrobjektojn kiuj ne povas akcepti nulvalorojn;

  • La atributo "#[malrekomendita]" estis pligrandigita por permesi ke kestaj pakoj estu markitaj malnoviĝintaj kaj planitaj por estonta forigo. Ekde Rust 1.38, ĉi tiu atributo ankaŭ povas esti uzata por makrooj;
  • Aldonita la eblo uzi la atributon "#[global_allocator]" en submoduloj;
  • Aldonita funkcio std::any::tipo_nomo, kiu ebligas al vi eltrovi la nomon de la tipo, kiu povas esti utila por sencimigaj celoj. Ekzemple, dum la ekzekuto de la programo vi povas ekscii por kia tipo la funkcio estis nomita:

    fn gen_valoro‹T: Defaŭlta>() -› T {
    println!("Inicialigante okazon de {}", std::any::type_name::‹T›());
    Defaŭlta::defaŭlta ()
    }

    fn ĉefa () {
    lasu _: i32 = gen_valoro(); # "i32" estos presita
    let _: String = gen_valoro(); # presigos "alloc::string::String"
    }

  • Plilongigitaj funkcioj de la norma biblioteko:
    • slice::{concat, connect, join} nun povas preni la valoron &[T] krom &T;
    • "*const T" kaj "*mut T" nun efektivigas markilon::Unpin;
    • "Arc‹[T]›" kaj "Rc‹[T]›" nun efektivigas FromIterator‹T›;
    • iter::{StepBy, Peekable, Take} nun efektivigu DoubleEndedIterator.
    • ascii::EscapeDefault efektivigas Klonon kaj Montron.
  • Nova parto de APIoj estis translokigita al la stabila kategorio, inkluzive de metodoj, kiuj estis stabiligitaj
    • ‹*konst T›::cast, ‹*mut T›::cast,
    • Daŭro::as_secs_f{32|64},
    • Daŭro::div_duration_f{32|64},
    • Daŭro::div_f{32|64},
    • Daŭro::from_secs_f{32|64},
    • Daŭro::mul_f{32|64},
    • dividaj operacioj kun resto
      div_eŭklido kaj rem_eŭklido por ĉiuj entjeraj primitivuloj;

  • Aldonita subteno por specifi la opcion "--trajtoj" plurfoje por ebligi malsamajn funkciojn en la administranto de ŝarĝpakaĵo;
  • La kompililo disponigas trian grado subteno por celplatformoj aarch64-uwp-windows-msvc, i686-uwp-windows-gnu, i686-uwp-windows-msvc, x86_64-uwp-windows-gnu, x86_64-uwp-windows-msvuxcun konataj, armvuxcun -gnueabi, armv7-unknown-linux-musleabi, hexagon-unknown-linux-musl kaj riscv7i-unknown-none-elf. La tria nivelo implikas bazan subtenon, sed sen aŭtomatigita testado kaj publikigo de oficialaj konstruoj.

fonto: opennet.ru

Aldoni komenton