Rust 1.34 Programming Language Release

plaasgevind stelsel programmeertaal vrystelling Roes 1.34ontwikkel deur die Mozilla-projek. Die taal fokus op veilige geheuebestuur, verskaf outomatiese geheuebestuur en bied die middele om hoë werkparallelisme te bereik terwyl die gebruik van 'n vullisverwyderaar en looptyd vermy word.

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:

  • Hulpmiddels by die Cargo-pakketbestuurder gevoeg om met alternatiewe pakketregisters te werk wat saam met die crates.io publieke register kan bestaan. Private toepassingsontwikkelaars kan byvoorbeeld nou hul eie private register gebruik wat gebruik kan word wanneer afhanklikhede in Cargo.toml gelys word en 'n crates.io-agtige weergawemodel vir hul produkte gebruik, sowel as verwysing na beide crates.io en crates.io in afhanklikhede na jou eie register.

    Om eksterne registers by .cargo/config te voeg (geleë in $HOME of pakketgids)
    verskaf "[registers]"-afdeling, en om 'n eksterne register te gebruik, het die "registry"-opsie verskyn in die beskrywing van elke afhanklikheid in Cargo.toml. Om aan 'n bykomende register te koppel, plaas net die verifikasietoken in die ~/.cargo/credentials-lêer en voer die opdrag uit
    "vrag login --registry=my-register", en om die pakket te publiseer -
    "vrag publiseer --registry=my-register";

  • Bygevoeg volledige ondersteuning vir die gebruik van die "?" in toetse doktorstoetse, wat jou toelaat om die kode van voorbeelde uit die dokumentasie as toetse te gebruik. Voorheen operateur
    "?" kan slegs gebruik word om foute tydens toetsuitvoering te hanteer as daar 'n "fn main()"-funksie of in die "#[toets]"-funksies was;

  • In pasgemaakte eienskappe gedefinieer met prosedurele makro's beveilig die vermoë om arbitrêre stelle tekens te gebruik ("#[attr($tokens)]", "#[attr[$tokens]] en #[attr{$tokens}]"). Voorheen kon elemente slegs in boom/rekursiewe vorm gespesifiseer word deur string letterlike gebruik te gebruik, soos "#[foo(bar, baz(quux, foo = "bar"))]", maar nou is dit moontlik om enums ('#) te gebruik [reeks(0. .10)]') en konstruksies soos "#[bound(T: MyTrait)]";
  • Gestabiliseerde eienskappe (eienskap) Probeer From и probeer, wat jou toelaat om tipe omskakelings uit te voer met fouthantering. Byvoorbeeld, metodes soos from_be_bytes met heelgetaltipes gebruik skikkings as invoer, maar die data is dikwels van die tipe Slice, en omskakeling tussen skikkings en skywe is problematies om met die hand te doen. Met die nuwe eienskappe kan hierdie operasie dadelik uitgevoer word deur .try_into() te noem, byvoorbeeld, "let num = u32::from_be_bytes(slice.try_into()?)". Fouttipe bygevoeg vir omskakelings wat altyd slaag (bv. van tipe u8 na u32) Onfeilbaar, wat jou toelaat om deursigtig te gebruik
    TryFrom vir alle bestaande "Van"-implementerings;

  • Funksie opgeskort CommandExt::before_exec, wat toegelaat het dat 'n hanteerder uitgevoer word voordat die exec wat in die konteks van die kinderproses uitgevoer is, na die fork()-oproep gevurk het. Onder sulke omstandighede kan sommige hulpbronne van die ouerproses, soos lêerbeskrywers en gekarteerde geheue-areas, gedupliseer word, wat kan lei tot ongedefinieerde gedrag en verkeerde werk van biblioteke.
    Dit word aanbeveel om die onveilige funksie te gebruik in plaas van before_exec CommandExt::pre_exec.

  • Getekende en ongetekende atoomheelgetaltipes van 8 tot 64 bisse word gestabiliseer (byvoorbeeld, AtoomU8), sowel as getekende tipes NieNulI[8|16|32|64|128].
  • 'n Nuwe gedeelte van die API is na die kategorie stabiel geskuif, insluitend die metodes Any::type_id, Error::type_id, slice::sort_by_cached_key, str::escape_*, str::split_ascii_whitespace, Instant::checked_[add] |sub] en SystemTime is gestabiliseer ::checked_[add|sub]. Die iter::from_fn en iter::opvolgersfunksies is gestabiliseer;
  • Vir alle heelgetaltipes word die checked_pow, saturating_pow, wrapping_pow, en overflowing_pow metodes geïmplementeer;
  • Het die vermoë bygevoeg om optimaliserings in die koppelingstadium moontlik te maak deur die "-C linker-plugin-lto" bou-opsie te spesifiseer.

Bron: opennet.ru

Voeg 'n opmerking