Sgaoileadh cànain prògramaidh Rust 1.45

foillsichte sgaoileadh 1.45 de chànan prògramadh an t-siostaim meirgeadh, a stèidhich am pròiseact Mozilla. Bidh an cànan ag amas air sàbhailteachd cuimhne, a’ toirt seachad riaghladh cuimhne fèin-ghluasadach, agus a’ toirt seachad innealan airson co-shìnteachd àrd-obrach a choileanadh gun a bhith a’ cleachdadh inneal-cruinneachaidh sgudail agus ùine ruith.

Bidh riaghladh cuimhne fèin-ghluasadach Rust a’ cuir às do mhearachdan nuair a thathar a’ làimhseachadh chomharran agus a’ dìon an aghaidh dhuilgheadasan ag èirigh bho làimhseachadh cuimhne aig ìre ìosal, leithid faighinn gu sgìre cuimhne às deidh dha a bhith air a shaoradh, ro-aithrisean puing null, cus bufair, msaa. Thathas a’ leasachadh manaidsear pacaid gus leabharlannan a sgaoileadh, dèanamh cinnteach à co-chruinneachadh agus riaghladh eisimeileachd leis a’ phròiseact. Cargo, a 'toirt cothrom dhut na leabharlannan a tha a dhìth airson a' phrògram fhaighinn ann an aon bhriogadh. Tha stòr a’ faighinn taic gus aoigheachd a thoirt do leabharlannan cliathaichean.io.

prìomh innleachdan:

  • Air a chuir air falbh o chionn fhada lochd nuair a bhios tu a’ dèanamh atharrachaidhean eadar àireamhan iomlan agus àireamhan puing-fleòdraidh. Leis gu bheil an compiler Rust a’ cleachdadh LLVM mar backend, chaidh gnìomhachd tionndaidh seòrsa a dhèanamh tro stiùireadh còd eadar-mheadhanach LLVM leithid fptoui, aig a bheil aon fheart cudromach - giùlan neo-mhìnichte mura h-eil an luach a thig às a’ freagairt air an t-seòrsa targaid. Mar eisimpleir, nuair a thionndaidheas tu an luach fleòdraidh 300 le seòrsa f32 gu integer seòrsa u8, tha an toradh neo-fhaicsinneach agus faodaidh e atharrachadh air diofar shiostaman. Is e an duilgheadas a th ’ann gu bheil am feart seo a’ nochdadh ann an còd nach eil air a chomharrachadh mar “mì-shàbhailte”.

    Mar Rust 1.45, tha giùlan thar-shruth meud seòrsa air a riaghladh gu teann, agus bidh an gnìomhachd tionndaidh “mar” a’ sgrùdadh airson tar-shruth agus a’ toirt air an luach a bhith air a thionndadh gu luach as àirde no as ìsle den t-seòrsa targaid (mar eisimpleir gu h-àrd, luach de 300 air a thionndadh gu 255). Gus na sgrùdaidhean sin a chuir dheth, tha fiosan API a bharrachd “{f64, f32}:: to_int_unchecked” air an toirt seachad, ag obair ann am modh mì-shàbhailte.

    fn cast(x: f32) -> u8 {
    x mar u8
    }

    fn prìomh() {
    leig too_big = 300.0;
    leig too_small = -100.0;
    leig nan = f32::NAN;

    leig x: f32 = 1.0;
    leig y: u8 = mì-shàbhailte { x.to_int_unchecked() };

    println!("too_big_casted = {}", cast(too_big)); // toradh 255
    println!("too_small_casted = {}", cast(too_small)); // toradh 0
    println!("not_a_number_casted = {}", cast(nan)); // toradh 0
    }

  • Cleachd seasmhach macros modhan-obrachabairtean coltach ri gnìomh, teamplaidean, agus aithrisean. Roimhe sin, cha b 'urrainnear a leithid de macros a ghairm anns a h-uile àite, ach a-mhàin ann an cuid de phàirtean den chòd (mar ghairm air leth, gun a bhith eadar-cheangailte le còd eile). B’ e leudachadh mar a dh’ fhaodar macros a ghairm, coltach ri gnìomhan, mar aon de na riatanasan airson toirt air frèam an lìn obrachadh Rocket ann an sgaoilidhean seasmhach de Rust. Roimhe sin, bha feum air sùbailteachd a bharrachd ann a bhith a’ mìneachadh luchd-làimhseachaidh ann an Rocket a’ comasachadh feart deuchainneach ris an canar “proc_macro_hygiene”, nach eil ri fhaighinn ann an dreachan seasmhach de Rust. Tha an gnìomh seo a-nis mar phàirt de sgaoilidhean seasmhach den chànan.
  • Ceadaichte raointean a chleachdadh le seòrsa “char” gus ath-aithris thairis air luachan raon (ops : {Range, RangeFrom, RangeFull, RangeInclusive, RangeTo}):

    airson ch ann an 'a'.. = 'z' {
    clò-bhualadh!("{}", ch);
    }
    clò!(); // Clò-bhuailidh e "abcdefghijklmnopqrstuvwxyz"

  • Chaidh cuibhreann ùr de APIan a ghluasad chun roinn stàbaill, a’ toirt a-steach seasmhach
    Arc:: as_ptr,
    BTreeMap :: thoir air falbh_inntrigeadh,
    Rc:: as_ptr,
    rc:: Lag:: as_ptr,
    rc :: Lag :: from_raw,
    rc :: Lag :: into_raw,
    str :: strip_prefix,
    str :: strip_suffix,
    sioncranachadh :: Lag :: as_ptr,
    sioncranachadh :: Lag :: from_raw,
    sioncranachadh :: Lag :: into_raw,
    char::UNICODE_VERSION,
    Rèit ::rèitichte_aig,
    Span ::locate_at,
    Raon:: làrach_ measgaichte,
    unix :: pròiseas :: CommandExt :: arg0.

  • Tha an compiler rustc air taic a chuir ris airson a bhith a’ dol thairis air grunn fheartan àrd-ùrlair targaid a’ cleachdadh a’ bhratach “target-feature”, mar eisimpleir, “-C target-feature = + avx2, + fma”. Chaidh brataichean ùra a chur ris cuideachd:
    "force-unwind-tables" gus clàran gairm a ghineadh, ge bith dè an ro-innleachd làimhseachadh tubaist; “embed-bitcode” gus smachd a chumail a bheil LLVM bitcode air a ghabhail a-steach ann an rlibs gineadh. Tha am bratach “embed-bitcode” air a chomasachadh gu bunaiteach ann an Cargo gus an ùine togail agus an caitheamh àite diosc a mheudachadh.

  • Chaidh treas ìre de thaic a thoirt seachad airson na h-àrd-ùrlaran mipsel-sony-psp agus thumbv7a-uwp-windows-msvc. Tha an treas ìre a’ toirt a-steach taic bhunaiteach, ach às aonais deuchainn fèin-ghluasadach agus foillseachadh thogalaichean oifigeil.

A bharrachd air an sin, faodar a thoirt fa-near an sgeulachd mu bhith a’ cruthachadh an fheadhainn as sìmplidh apps anns a’ chànan Rust, a’ tòiseachadh a’ cleachdadh bootloader an t-siostaim agus deiseil airson luchdachadh fèin-chumanta an àite an t-siostam obrachaidh.
Is e an artaigil a’ chiad fhear ann an sreath a tha coisrigte ri bhith a’ taisbeanadh dhòighean air a bheil iarrtas ann am prògramadh aig ìre ìosal agus leasachadh OS.

Source: fosgailtenet.ru

Cuir beachd ann