Programski jezik Rust 1.40 izdanje

objavljeno izdanje sistemskog programskog jezika Rđa 1.40, osnovan od strane Mozilla projekta. Jezik se fokusira na sigurnost memorije, pruža automatsko upravljanje memorijom i pruža alate za postizanje visokog paralelizma zadataka bez korištenja sakupljača smeća i runtime.

Rust-ovo automatsko upravljanje memorijom oslobađa programera od manipulacije pokazivačem i štiti od problema koji proizlaze iz manipulacije memorijom na niskom nivou, kao što su pristupi memoriji nakon slobodne upotrebe, dereferenciranje nulte pokazivača, prekoračenje bafera i slično. Razvija se menadžer paketa za distribuciju biblioteka, osiguravanje sklapanja i upravljanje ovisnostima od strane projekta. teret, što vam omogućava da jednim klikom dobijete biblioteke potrebne za program. Podržano je spremište za hostiranje biblioteka crates.io.

Glavni inovacije:

  • Dodata mogućnost označavanja struktura (struct) i nabrajanja (enum sa blokom Variant) pomoću atributa "#[ne_iscrpno]", koji dozvoljava u budućnosti, dodajte nova polja i opcije deklarisanim strukturama i enumeracijama. Na primjer, programeri modula koji imaju strukture s javno deklariranim poljima mogu koristiti "#[non_exhaustive]" da označe strukture koje mogu imati nova polja dodana u budućnosti. Do sada, u ovoj situaciji, programer je bio primoran da bira između privatnog deklarisanja polja i vezivanja za nepromjenjivu listu polja. Novi atribut uklanja ovo ograničenje i omogućava vam da dodate nova polja u budućnosti bez rizika od razbijanja prethodno kompajliranog eksternog koda. U paketima za sanduke, prilikom uparivanja opcija u odjeljku “match”, potrebna je eksplicitna definicija maske “_ => {...}” koja pokriva moguća buduća polja, inače će se prikazati greška prilikom dodavanja novih polja.
  • Dodano mogućnost pozivanja proceduralnog makroa mac!() u kontekstu tipa. Na primjer, sada možete napisati “type Foo = expand_to_type!(bar);” ako je “expand_to_type” proceduralni makro.
  • U blokovima "extern { ... }". dodano mogućnost korištenja proceduralnih i atributnih makroa, uključujući "bang!()" makroe, na primjer:

    macro_rules! make_item { ($name:ident) => { fn $name(); } }

    extern {
    make_item!(alfa);
    make_item!(beta);
    }

    eksterni "C" {
    #[my_identity_macro] fn foo();
    }

  • U makroima implementirano sposobnost generiranja elemenata "macro_rules!". Generisanje "macro_rules!" moguće i u makroima sličnim funkciji (“mac!()”) iu makroima u obliku atributa (“#[mac]”).
  • U $m:meta elementu mapiranja dodano podrška za proizvoljne vrijednosti nabrajanja tokena (“[TOKEN_STREAM]”, “{TOKEN_STREAM}” i “(TOKEN_STREAM)”), na primjer:

    macro_rules! accept_meta { ($m:meta) => {} }
    accept_meta!( my::path );
    accept_meta!( my::path = "lit" );
    accept_meta!( my::path ( abc ) );
    accept_meta!( my::path [ abc ] );
    accept_meta!( my::path { abc } );

  • U režimu Rust 2015, izlaz greške je omogućen za probleme identifikovane prilikom provjere pozajmljivanja varijabli (provjera zaduživanja) korištenjem tehnike NLL (neleksički vijek trajanja). Ranije su upozorenja zamijenjena greškama kada su radili u Rust 2018 modu.
    Nakon što je promjena proširena na Rust 2015 mod, programeri su konačno uspjeli otarasiti se iz stare posude.

    Podsjetimo da je sistem verifikacije zasnovan na novom mehanizmu za uzimanje u obzir životnog vijeka pozajmljenih varijabli omogućio da se identifikuju neki problemi koji su stari verifikacioni kod ostali neprimijećeni. Budući da bi izlaz greške za takve provjere mogao utjecati na kompatibilnost s prethodno funkcionalnim kodom, u početku su izdavana upozorenja umjesto grešaka.

  • Atribut “const”, koji određuje mogućnost korištenja u bilo kojem kontekstu umjesto konstanti, koristi se za funkciju is_power_of_two (za neoznačene cijele brojeve).
  • Novi dio API-ja je premješten u stabilnu kategoriju, uključujući todo!() makro i slice::repeat, mem::take, BTreeMap::get_key_value, HashMap::get_key_value, metode su stabilizirane.
    Option::as_deref, Option::as_deref_mut, Option::flatten, UdpSocket::peer_addr, {f32,f64}::to_be_bytes, {f32,f64}::to_le_bytes,{f32,f64}::to_ne32_bytes, f64}::from_be_bytes, {f32,f64}::from_le_bytes, i {f32,f64}::from_ne_bytes.

  • U paket menadžeru teret
    implementirano keširanje upozorenja kompajlera na disku. Dodata opcija "metapodaci tereta" naredbi "metapodaci tereta".--filter-platforma" da biste prikazali samo pakete vezane za navedenu ciljnu platformu u stupcu rezolucije ovisnosti. Dodata opcija konfiguracije http.ssl-verzije za definiranje važećih TLS verzija.
    Dodata mogućnost objavljivanja odjeljka "dev-ovisnosti" bez navođenja ključa "verzija".

  • Rustc kompajler pruža podršku trećeg nivoa za ciljne platforme thumbv7neon-unknown-linux-musleabihf, aarch64-unknown-none-softfloat, mips64-unknown-linux-muslabi64 i mips64el-unknown-linux-muslabi64. Treći nivo uključuje osnovnu podršku, ali bez automatizovanog testiranja i objavljivanja zvaničnih verzija.

izvor: opennet.ru

Dodajte komentar