Rust 1.58 Programming Language Release

De útjefte fan de algemiene programmeartaal Rust 1.58, oprjochte troch it Mozilla-projekt, mar no ûntwikkele ûnder auspysjes fan de ûnôfhinklike non-profit organisaasje Rust Foundation, is publisearre. De taal rjochtet him op ûnthâld feilichheid, jout automatyske ûnthâld behear, en jout de middels te berikken hege taak parallelism sûnder in gebrûk garbage collector of runtime (runtime wurdt redusearre ta basis inisjalisaasje en ûnderhâld fan de standert bibleteek).

It automatyske ûnthâldbehear fan Rust elimineert flaters by it manipulearjen fan oanwizers en beskermet tsjin problemen dy't ûntsteane út manipulaasje fan ûnthâld op leech nivo, lykas tagong krije ta in ûnthâldregio nei't it is befrijd, nul-oanwizers dereferences, bufferoverruns, ensfh. Om bibleteken te fersprieden, assemblage te garandearjen en ôfhinklikens te behearjen, ûntwikkelet it projekt de Cargo-pakketbehearder. It crates.io repository wurdt stipe foar hosting fan bibleteken.

Wichtichste ynnovaasjes:

  • Yn line opmaak blokken, neist de earder beskikbere mooglikheid te ferfangen fariabelen eksplisyt neamd nei in rigel troch nûmer en namme, de mooglikheid om te ferfangen willekeurige identifiers troch it tafoegjen fan de útdrukking "{identifier}" oan de line. Bygelyks: // Earder stipe konstruksjes: println!("Hallo, {}!", get_person()); println!("Hallo, {0}!", get_person()); println!("Hallo, {persoan}!", person = get_person()); // no kinne jo opjaan litte persoan = get_person (); println!("Hallo, {persoan}!");

    Identifikaasjes kinne ek direkt yn opmaakopsjes oantsjutte wurde. let (width, precision) = get_format(); foar (namme, skoare) yn get_scores() { println!("{namme}: {score:width$.precision$}"); }

    De nije substitúsje wurket yn alle makro's dy't definysje fan stringformaat stypje, mei útsûndering fan 'e "panyk!" yn 'e ferzjes fan 2015 en 2018 fan 'e Rusttaal, wêrby't panyk!("{ident}") behannele wurdt as in reguliere snaar (yn Rust 2021 wurket de ferfanging).

  • It gedrach fan 'e std :: process :: Kommandostruktuer op it Windows-platfoarm is feroare sadat it by it útfieren fan kommando's om feiligensredenen net mear siket nei útfierbere triemmen yn 'e aktuele map. De hjoeddeistige map is útsletten, om't it koe wurde brûkt om kweade koade út te fieren as programma's wurde útfierd yn net-fertroude mappen (CVE-2021-3013). De nije útfierbere deteksjelogika omfettet it sykjen fan de Rust-mappen, de applikaasjemap, de Windows-systeemmap, en de mappen spesifisearre yn de PATH-omjouwingsfariabele.
  • De standertbibleteek hat it oantal funksjes markearre "#[must_use]" útwreide om in warskôging út te jaan as de weromkommende wearde wurdt negearre, wat helpt by it identifisearjen fan flaters feroarsake troch oan te nimmen dat in funksje wearden sil feroarje ynstee fan in nije wearde werom te jaan.
  • In nij diel fan 'e API is ferpleatst nei de kategory stabile, ynklusyf de metoaden en ymplemintaasjes fan eigenskippen binne stabilisearre:
    • Metadata::is_symlink
    • Paad :: is_symlink
    • {integer}::saturating_div
    • Opsje :: unwrap_unchecked
    • Resultaat :: unwrap_unchecked
    • Resultaat :: unwrap_err_unchecked
  • It attribút "const", dat de mooglikheid bepaalt om it yn elke kontekst te brûken ynstee fan konstanten, wurdt brûkt yn 'e funksjes:
    • Duration :: nij
    • Duration :: checked_add
    • Duration :: saturating_add
    • Duration :: checked_sub
    • Duration :: saturating_sub
    • Duration :: checked_mul
    • Duration :: saturating_mul
    • Duration::checked_div
  • Tastean derferferinsje fan "*const T"-oanwizers yn "const"-konteksten.
  • Yn 'e Cargo-pakketbehearder is it rust_version-fjild tafoege oan' e pakketmetadata, en de opsje "--message-format" is tafoege oan it kommando "cargo install".
  • De gearstaller ymplementearret stipe foar it CFI (Control Flow Integrity) beskermingsmeganisme, dy't kontrôles tafoeget foar elke yndirekte oprop om guon foarmen fan ûndefinieare gedrach te ûntdekken dy't mooglik liede kinne ta in ynbreuk op 'e normale útfieringsopdracht (kontrôlestream) as gefolch fan' gebrûk fan eksploaten dy't feroarje pointers opslein yn it ûnthâld op funksjes.
  • De kompilator hat stipe tafoege foar ferzjes 5 en 6 fan it LLVM-dekkingsfergelikingsformaat, brûkt om koadedekking te evaluearjen tidens testen.
  • Yn 'e gearstaller wurde de easken foar de minimale ferzje fan LLVM ferhege nei LLVM 12.
  • It tredde nivo fan stipe foar it x86_64-unknown-none-platfoarm is ymplementearre. It tredde nivo omfettet basisstipe, mar sûnder automatisearre testen, publisearjen fan offisjele builds, of kontrolearjen oft de koade boud wurde kin.

Derneist kinne wy ​​​​de publikaasje troch Microsoft opmerke fan 'e frijlitting fan Rust foar Windows 0.30-biblioteken, wêrtroch jo de Rust-taal kinne brûke om applikaasjes foar it Windows OS te ûntwikkeljen. De set omfettet twa kratpakketten (finsters en windows-sys), wêrmei jo tagong krije ta de Win API yn Rust-programma's. Koade foar API-stipe wurdt dynamysk oanmakke út metadata dy't de API beskriuwe, wêrtroch jo stipe kinne ymplementearje net allinich foar besteande Win API-oproppen, mar foar petearen dy't yn 'e takomst ferskine. De nije ferzje foeget stipe ta foar it UWP (Universal Windows Platform) doelplatfoarm en ymplementearret de typen Handle en Debug.

Boarne: opennet.ru

Add a comment