Rust 1.34 Chirongwa Mutauro Kuburitswa

Iyo system programming mutauro Rust 1.34, yakagadziridzwa neMozilla purojekiti, yakaburitswa. Mutauro unotarisana nekuchengetedza ndangariro, unopa otomatiki ndangariro manejimendi, uye inopa nzira yekuwana yakakwirira basa parallelism pasina kushandisa muunganidzi wemarara kana nguva yekumhanya.

Rust's otomatiki ndangariro manejimendi inosunungura mugadziri kubva pakugadzirisa pointer uye inodzivirira kubva kune yakaderera-level memory manipulation, senge mushure-yemahara memory yekuwana, null pointer dereferences, buffer overruns, nezvimwe. Kugovera maraibhurari, simbisa kuungana uye kugadzirisa zvinotsamira, purojekiti iri kugadzira Cargo package maneja, iyo inokutendera iwe kuti uwane maraibhurari anodiwa pachirongwa nekudzvanya kumwe chete. Iyo crates.io repository inotsigirwa kuitisa maraibhurari.

Zvitsva zvikuru:

  • Iye Cargo package maneja akawedzera maturusi ekushanda nemamwe mapakeji registries anogona kugarisana ne crates.io public registry. Semuyenzaniso, vagadziri vezvishandiso zvevaridzi vanogona ikozvino kushandisa yavo yakavanzika registry, iyo inogona kushandiswa pakunyora zvinotsamira muCargo.toml, uye kushandisa shanduro yemhando yakafanana ne crates.io yezvigadzirwa zvavo, pamwe nekutarisa zvinotsamira kune ese ari maviri makrete. io uye kune yako registry.

    Kuwedzera registry yekunze ku ~/.cargo/config
    imwe sarudzo itsva "my-registry" inopiwa mu[registries]" chikamu, uye "imwe-crate" sarudzo yawedzerwa kutaura registry yekunze mune dependencies muCargo.toml mu[dependencies]" chikamu. Kuti ubatanidze kune imwe registry, ingoisa chiratidzo chechokwadi mu ~/.cargo/credentials faira wobva wamhanyisa murayiro.
    "cargo login --registry = my-registry" uye kuburitsa pasuru -
    "cargo publish -registry=my-registry";

  • Yakawedzera rutsigiro rwakazara rwekushandisa iyo "?" mune zvidzidzo, izvo zvinokutendera kuti ushandise muenzaniso kodhi kubva muzvinyorwa sebvunzo. Kare mushandisi
    "?" inogona kushandiswa kubata zvikanganiso panguva yekuedza chete pamberi pe "fn main()" basa kana mu "#[test]" mabasa;

  • Muhunhu hwetsika hunotsanangurwa pachishandiswa procedural macros, zvinokwanisika kushandisa zvisina tsarukano seti yezviratidzo (β€œ#[attr($tokens)]”, β€œ#[attr[$tokens]] uye #[attr{$tokens}]”) . Kare, zvinhu zvaingogona kududzwa mumuti/recursive form uchishandisa tambo literals, semuenzaniso β€œ#[foo(bar, baz(quux, foo = β€œbar”))]”, asi iko zvino zvave kugoneka kushandisa enumerations (' #[range(0. .10)]') uye zvivakwa zvakaita seβ€œ#[kusungwa(T: MyTrait)]”;
  • Maitiro eTryFrom neTryInto akagadziriswa, achibvumira shanduko yemhando ine kukanganisa kubata. Semuyenzaniso, nzira dzakaita sekubva_be_bytes dzine marudzi akakwana dzinoshandisa arrays sekuisa, asi data rinowanzouya riri reSlice type, uye kushandura pakati pezvimedu nezvidimbu zvinonetsa kuita nemaoko. Nerubatsiro rwehunhu hutsva, kuvhiyiwa kwakatarwa kunogona kuitwa pakubhururuka kuburikidza nekufona ku.try_into(), semuenzaniso, "let num = u32::from_be_bytes(slice.try_into()?)". Kune shanduko dzinogara dzichibudirira (semuenzaniso, kubva parudzi u8 kuenda ku32), mhando yeIsingakundike kukanganisa yawedzerwa kubvumidza kushandiswa kwakajeka kwe.
    TryFrom kune ese aripo ekuita e "Kubva";

  • Yakabvisa CommandExt ::before_exec function, iyo yakabvumira kuurayiwa kwemubati asati aurayiwa iyo yakaitwa mumamiriro ezvinhu emwana maitiro akafokoswa mushure meforogo () call. Pasi pemamiriro ezvinhu akadai, zvimwe zviwanikwa zvemaitiro evabereki, senge faira zvinotsanangura uye mepu yekurangarira nzvimbo, zvinogona kudzokororwa, izvo zvinogona kutungamira kune isina kutsanangurwa maitiro uye zvisirizvo kushanda kwemaraibhurari.
    Panzvimbo pekutanga_exec, zvinokurudzirwa kushandisa isina kuchengetedzeka basa CommandExt::pre_exec.

  • Mhando dzakasaina uye dzisina kusainwa dzeatomiki dzakakura kubva pa8 kusvika pa64 bits (semuenzaniso, AtomicU8), pamwe nemhando dzakasainwa NonZeroI[8|16|32|54|128].
  • Chikamu chitsva cheAPI chaendeswa kuchikamu chakatsiga, kusanganisira iyo Chero::type_id, Error::type_id, slice::sort_by_cached_key, str::escape_*, str::split_ascii_whitespace, Instant::checked_[add|sub ] uye nzira dzeSystemTime dzakadzikamiswa ::checked_[add|sub]. The iter::from_fn uye iter::successors mabasa akagadziriswa;
  • Pamhando dzose dzakakwana, nzira dzechecked_pow, saturating_pow, wrapping_pow uye overflowing_pow dzinoshandiswa;
  • Yakawedzera kugona kugonesa optimizations padanho rekubatanidza nekutsanangura iyo "-C linker-plugin-lto" yekuvaka sarudzo (rustc inounganidza Rust kodhi muLLVM bitcode, iyo inobvumira LTO optimizations kuti ishandiswe).

Source: opennet.ru

Voeg