Rust 1.40 Programming Language Release

gepubliseer stelsel programmeertaal vrystelling Roes 1.40gestig deur die Mozilla-projek. Die taal fokus op veilige geheuebestuur, verskaf outomatiese geheuebestuur, en verskaf die middele om hoë werkparallelisme te bereik terwyl die gebruik van 'n vullisverwyderaar en runtime.

Rust se outomatiese geheuebestuur spaar die ontwikkelaar daarvan om wysers te manipuleer en beskerm teen probleme wat voortspruit uit laevlakgeheuemanipulasie, soos om toegang tot 'n geheuearea te kry nadat dit vrygestel is, die herkenning van nulwysers, bufferoorskryding, ens. Om biblioteke te versprei, samestelling te verseker en afhanklikhede te bestuur, ontwikkel die projek 'n pakketbestuurder Cargo, wat jou in staat stel om die biblioteke wat jy nodig het vir die program in een klik te kry. 'n Bewaarplek word ondersteun om biblioteke te huisves kratte.io.

Die belangrikste innovasies:

  • Het die vermoë bygevoeg om strukture (struktuur) en opsommings (enum met Variant-blok) te merk deur die kenmerk "#[nie_uitputtend nie]", watter dit laat voeg in die toekoms nuwe velde en opsies by verklaarde strukture en opsommings. Byvoorbeeld, ontwikkelaars van modules wat strukture het met velde wat in die openbaar verklaar is, kan "#[non_exhaustive]" gebruik om strukture te merk wat moontlik nuwe velde in die toekoms bygevoeg kan hê. Tot nou toe, in hierdie situasie, was die ontwikkelaar gedwing om te kies tussen velde privaat verklaar en aan 'n onveranderlike lys velde bind. Die nuwe kenmerk verwyder hierdie beperking en laat jou toe om nuwe velde in die toekoms by te voeg sonder die risiko om voorheen saamgestelde eksterne kode te breek. In kratpakkette word 'n eksplisiete definisie van die masker "_ => {...}" vereis, wanneer opsies in die "pas"-afdeling ooreenstem, wat moontlike toekomstige velde dek, anders sal 'n fout vertoon word wanneer nuwe velde bygevoeg word.
  • Bygevoeg die vermoë om die prosedurele makro mac!() in 'n tipe konteks te noem. Byvoorbeeld, jy kan nou skryf "tipe Foo = expand_to_type!(bar);" as "expand_to_type" 'n prosedurele makro is.
  • In "extern { ... }" blokke bygevoeg die vermoë om prosedure- en kenmerkmakro's te gebruik, insluitend "bang!()"-makro's, byvoorbeeld:

    makro_reëls! make_item {($name:ident) => {fn $name(); } }

    ekstern {
    maak_item!(alfa);
    maak_item!(beta);
    }

    eksterne "C" {
    #[my_identiteit_makro] fn foo();
    }

  • In makro's geïmplementeer vermoë om "makro_reëls!"-elemente te genereer. Genereer "makro_reëls!" moontlik in beide funksieagtige makro's ("mac!()") en in makro's in die vorm van eienskappe ("#[mac]").
  • In die $m:meta-kartering-element bygevoeg ondersteuning vir arbitrêre token-opsommingswaardes ("[TOKEN_STREAM]", "{TOKEN_STREAM}" en "(TOKEN_STREAM)"), byvoorbeeld:

    makro_reëls! accept_meta { ($m:meta) => {} }
    aanvaar_meta!( my::pad );
    accept_meta!( my::path = "lit" );
    aanvaar_meta!( my::pad ( abc ) );
    aanvaar_meta!( my::pad [ abc ] );
    aanvaar_meta!( my::pad { abc } );

  • In Rust 2015-modus word foutuitset geaktiveer vir probleme wat geïdentifiseer is wanneer die uitleen van veranderlikes (leentoetser) nagegaan word deur die NLL (Non-Lexical Lifetimes) tegniek te gebruik. Voorheen is waarskuwings met foute vervang wanneer dit in Rust 2018-modus gebruik word.
    Nadat die verandering na die Rust 2015-modus uitgebrei is, kon ontwikkelaars uiteindelik raak ontslae van van die ou leenchecker.

    Laat ons onthou dat die verifikasiestelsel gebaseer op 'n nuwe meganisme om die leeftyd van geleende veranderlikes in ag te neem, dit moontlik gemaak het om 'n paar probleme te identifiseer wat ongemerk deur die ou verifikasiekode gebly het. Aangesien foutuitvoer vir sulke kontroles versoenbaarheid met voorheen werkende kode kan beïnvloed, is waarskuwings aanvanklik in plaas van foute uitgereik.

  • Die "const"-kenmerk, wat die moontlikheid bepaal om dit in enige konteks in plaas van konstantes te gebruik, word gebruik vir die is_power_of_two-funksie (vir ongetekende heelgetalle).
  • 'n Nuwe gedeelte van die API is na die stabiele kategorie geskuif, insluitend die todo!() makro en die slice::repeat, mem::take, BTreeMap::get_key_value, HashMap::get_key_value, metodes is gestabiliseer.
    Opsie::as_deref, Opsie::as_deref_mut, Opsie::platte, 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, en {f32,f64}::from_ne_bytes.

  • In die pakketbestuurder vrag
    geïmplementeer caching samesteller waarskuwings op skyf. Het die opsie "vrag metadata" by die "vrag metadata" opdrag gevoeg--filter-platform" om slegs pakkette te wys wat aan die gespesifiseerde teikenplatform gebind is in die afhanklikheidsresolusiekolom. Bygevoeg http.ssl-weergawe konfigurasie opsie om geldige TLS weergawes te definieer.
    Bygevoeg die vermoë om die afdeling te publiseer "dev-afhanklikhede" sonder om die "weergawe"-sleutel te spesifiseer.

  • Die rustc-samesteller bied derdevlak-ondersteuning vir teikenplatforms thumbv7neon-unknown-linux-musleabihf, aarch64-unknown-none-softfloat, mips64-unknown-linux-muslabi64 en mips64el-unknown-linux-muslabi64. Die derde vlak behels basiese ondersteuning, maar sonder outomatiese toetsing en publikasie van amptelike bouwerk.

Bron: opennet.ru

Voeg 'n opmerking