Rust 1.58 Programming Language Release

Die vrystelling van die algemene programmeertaal Rust 1.58, wat deur die Mozilla-projek gestig is, maar nou ontwikkel is onder die vaandel van die onafhanklike nie-winsgewende organisasie Rust Foundation, is gepubliseer. Die taal fokus op geheueveiligheid, verskaf outomatiese geheuebestuur en bied die middele om hoë taakparallellisme te bereik sonder om 'n vullisverwyderaar of looptyd te gebruik (looptyd word verminder tot basiese inisialisering en instandhouding van die standaardbiblioteek).

Rust se outomatiese geheuebestuur red die ontwikkelaar van foute wanneer wysers gemanipuleer word en beskerm teen probleme wat ontstaan ​​as gevolg van laevlakgeheuemanipulasie, soos toegang tot 'n geheuearea nadat dit vrygestel is, herkenning van nulwysers, bufferoorskryding, ens. Om biblioteke te versprei, bouwerk te verskaf en afhanklikhede te bestuur, ontwikkel die projek die Cargo-pakketbestuurder. Die crates.io-bewaarplek word ondersteun vir die aanbieding van biblioteke.

Belangrikste innovasies:

  • In lynformateringsblokke, bykomend tot die voorheen beskikbare vermoë om veranderlikes wat eksplisiet na 'n reël gelys is te vervang volgens nommer en naam, word die vermoë om arbitrêre identifiseerders te vervang deur die uitdrukking "{identifiseerder}" by die lyn te voeg, geïmplementeer. Byvoorbeeld: // Voorheen ondersteunde konstruksies: println!("Hallo, {}!", get_person()); println!("Hallo, {0}!", get_person()); println!("Hallo, {persoon}!", persoon = kry_persoon()); // nou kan jy spesifiseer laat persoon = kry_persoon(); println!("Hallo, {persoon}!");

    Identifiseerders kan ook direk in formatering opsies gespesifiseer word. laat (wydte, presisie) = get_format(); vir (naam, telling) in get_scores() { println!("{naam}: {telling:width$.precision$}"); }

    Die nuwe vervanging werk in alle makro's wat stringformaat-definisie ondersteun, met die uitsondering van die "paniek!"-makro. in die 2015- en 2018-weergawes van die Rust-taal, waarin paniek!("{ident}") as 'n gewone snaar behandel word (in Rust 2021 werk die vervanging).

  • Die gedrag van die std::proces::Opdragstruktuur op die Windows-platform is verander sodat wanneer opdragte uitgevoer word, om sekuriteitsredes, dit nie meer na uitvoerbare lêers in die huidige gids soek nie. Die huidige gids is uitgesluit omdat dit gebruik kan word om kwaadwillige kode uit te voer as programme in onvertroude gidse (CVE-2021-3013) uitgevoer word. Die nuwe uitvoerbare opsporingslogika behels die soek van die Rust-gidse, die toepassingsgids, die Windows-stelselgids en die dopgehou wat in die PATH-omgewingsveranderlike gespesifiseer word.
  • Die standaardbiblioteek het die aantal funksies gemerk "#[must_use]" uitgebrei om 'n waarskuwing uit te reik as die terugkeerwaarde geïgnoreer word, wat help om foute te identifiseer wat veroorsaak word deur aan te neem dat 'n funksie waardes sal verander eerder as om 'n nuwe waarde terug te gee.
  • 'n Nuwe gedeelte van die API is na die kategorie stal geskuif, insluitend die metodes en implementering van eienskappe is gestabiliseer:
    • Metadata::is_simlink
    • Pad::is_simlink
    • {heelgetal}::versadiging_div
    • Opsie::unwrap_unchecked
    • Resultaat::unwrap_unchecked
    • Resultaat::unwrap_err_unchecked
  • Die "const"-kenmerk, wat die moontlikheid bepaal om dit in enige konteks in plaas van konstantes te gebruik, word in funksies gebruik:
    • Duur::nuut
    • Duration::checked_add
    • Duration::saturating_add
    • Duur::checked_sub
    • Duration::saturating_sub
    • Duur::checked_mul
    • Duur::saturating_mul
    • Duur::checked_div
  • Toegestane herkenning van "*const T"-wysers in "konst"-kontekste.
  • In die Cargo-pakketbestuurder is die rust_version-veld by die pakketmetadata gevoeg, en die "--message-format"-opsie is by die "cargo install"-opdrag gevoeg.
  • Die samesteller implementeer ondersteuning vir die CFI (Control Flow Integrity) beskermingsmeganisme, wat kontroles voor elke indirekte oproep byvoeg om sommige vorme van ongedefinieerde gedrag op te spoor wat moontlik kan lei tot 'n skending van die normale uitvoeringsbevel (beheervloei) as gevolg van die gebruik van uitbuitings wat wysers wat in die geheue gestoor is op funksies verander.
  • Die samesteller het ondersteuning bygevoeg vir weergawes 5 en 6 van die LLVM-dekkingsvergelykingsformaat, wat gebruik word om kodedekking tydens toetsing te evalueer.
  • In die samesteller word die vereistes vir die minimum weergawe van LLVM verhoog tot LLVM 12.
  • Die derde vlak van ondersteuning vir die x86_64-unknown-none-platform is geïmplementeer. Die derde vlak behels basiese ondersteuning, maar sonder outomatiese toetsing, publisering van amptelike bouwerk, of kontrolering of die kode gebou kan word.

Daarbenewens kan ons kennis neem van die publikasie deur Microsoft van die vrystelling van Rust vir Windows 0.30-biblioteke, wat jou toelaat om die Rust-taal te gebruik om toepassings vir die Windows-bedryfstelsel te ontwikkel. Die stel bevat twee kratpakkette (windows en windows-sys), waardeur jy toegang tot die Win API in Rust-programme kan kry. Kode vir API-ondersteuning word dinamies gegenereer uit metadata wat die API beskryf, wat jou toelaat om ondersteuning te implementeer nie net vir bestaande Win API-oproepe nie, maar vir oproepe wat in die toekoms sal verskyn. Die nuwe weergawe voeg ondersteuning by vir die UWP (Universal Windows Platform) teikenplatform en implementeer die Hanteer- en Debug-tipes.

Bron: opennet.ru

Voeg 'n opmerking