Izdanje Rust programskog jezika 1.40

Objavljeno izdanje sistemskog programskog jezika Rđa 1.40, osnovan projektom Mozilla. Jezik se fokusira na sigurnost memorije, omogućuje automatsko upravljanje memorijom i pruža alate za postizanje visokog paralelizma zadataka bez korištenja skupljača smeća i runtime.

Rustovo automatsko upravljanje memorijom oslobađa programera od manipulacije pokazivačima i štiti od problema koji proizlaze iz manipulacije memorijom niske razine, kao što su pristupi memoriji nakon oslobađanja, dereferencije nultog pokazivača, prekoračenja međuspremnika i slično. Upravitelj paketa se razvija za distribuciju biblioteka, osiguranje sklapanja i upravljanje ovisnostima projekta. Naboj, što vam omogućuje da jednim klikom dobijete biblioteke potrebne za program. Repozitorij je podržan za host knjižnica sanduci.io.

Glavni inovacije:

  • Dodana je mogućnost označavanja struktura (struct) i nabrajanja (enum s blokom Variant) pomoću atributa "#[ne_iscrpan]", koji to omogućuje u budućnosti dodajte nova polja i opcije deklariranim strukturama i enumeracijama. Na primjer, programeri modula koji imaju strukture s javno deklariranim poljima mogu koristiti "#[non_exhaustive]" za označavanje struktura kojima bi u budućnosti mogla biti dodana nova polja. Do sada je u ovoj situaciji programer bio prisiljen birati između deklariranja polja privatno i vezanja na nepromjenjivi popis polja. Novi atribut uklanja ovo ograničenje i omogućuje vam dodavanje novih polja u budućnosti bez rizika od kvara prethodno kompajliranog vanjskog koda. U paketima sanduka, prilikom podudaranja opcija u odjeljku "podudaranje", potrebna je eksplicitna definicija maske "_ => {...}", koja pokriva moguća buduća polja, inače će se prikazati pogreška prilikom dodavanja novih polja.
  • Dodano mogućnost pozivanja proceduralne makronaredbe mac!() u kontekstu tipa. Na primjer, sada možete napisati "type Foo = expand_to_type!(bar);" ako je "expand_to_type" proceduralni makro.
  • U "extern { ... }" blokovima dodao sposobnost korištenja proceduralnih i atributnih makronaredbi, uključujući makronaredbe "bang!()", na primjer:

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

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

    extern "C" {
    #[moj_identitet_makro] fn foo();
    }

  • U makronaredbama implementiran mogućnost generiranja elemenata “macro_rules!”. Generiranje "macro_rules!" moguće u makronaredbama sličnim funkciji (“mac!()”) i u makronaredbama u obliku atributa (“#[mac]”).
  • U $m:meta elementu mapiranja dodao podrška za proizvoljne enumeracijske vrijednosti tokena (“[TOKEN_STREAM]”, “{TOKEN_STREAM}” i “(TOKEN_STREAM)”), na primjer:

    makro_pravila! prihvati_meta { ($m:meta) => {} }
    prihvati_meta!( moj::put);
    accept_meta!( my::path = "lit" );
    prihvati_meta!( moj::put ( a b c ) );
    prihvati_meta!( moj::put [ a b c ] );
    prihvati_meta!( moj::put { a b c } );

  • U načinu rada Rust 2015 omogućen je ispis pogreške za probleme identificirane prilikom provjere posuđivanja varijabli (borrow checker) pomoću tehnike NLL (Non-Lexical Lifetimes). Prethodno su upozorenja bila zamijenjena greškama kada su radili u načinu rada Rust 2018.
    Nakon što je promjena proširena na način rada Rust 2015, programeri su konačno mogli riješite se iz starog posuđenog čekera.

    Podsjetimo, sustav verifikacije koji se temelji na novom mehanizmu za uzimanje u obzir životnog vijeka posuđenih varijabli omogućio je identificiranje nekih problema koje stari verifikacijski kod nije primijetio. Budući da bi izlaz pogreške za takve provjere mogao utjecati na kompatibilnost s prethodno radnim kodom, u početku su izdana upozorenja umjesto pogreš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 cijele brojeve bez predznaka).
  • Novi dio API-ja premješten je u stabilnu kategoriju, uključujući todo!() makronaredbu i slice::repeat, mem::take, BTreeMap::get_key_value, HashMap::get_key_value, metode su stabilizirane.
    Opcija::as_deref, Opcija::as_deref_mut, Opcija::flatten, UdpSocket::peer_addr, {f32,f64}::to_be_bytes, {f32,f64}::to_le_bytes,{f32,f64}::to_ne_bytes, {f32, f64}::from_be_bytes, {f32,f64}::from_le_bytes i {f32,f64}::from_ne_bytes.

  • U upravitelju paketa teret
    provedeno keširanje upozorenja prevoditelja na disk. Dodana je opcija "metapodaci o teretu" naredbi "metapodaci o teretu".--filter-platforma" za prikaz samo paketa vezanih za navedenu ciljnu platformu u stupcu razrješenja ovisnosti. Dodana opcija konfiguracije http.ssl-version za definiranje valjanih TLS verzija.
    Dodana je mogućnost objavljivanja odjeljka "ovisnosti o programerima" bez navođenja ključa "verzija".

  • Rustc kompajler pruža podršku treće razine za ciljne platforme thumbv7neon-unknown-linux-musleabihf, aarch64-unknown-none-softfloat, mips64-unknown-linux-muslabi64 i mips64el-unknown-linux-muslabi64. Treća razina uključuje osnovnu podršku, ali bez automatiziranog testiranja i objave službenih verzija.

Izvor: opennet.ru

Dodajte komentar