Rust 1.61 Programming Language Release

Die algemene programmeertaal Rust 1.61, wat deur die Mozilla-projek gestig is, maar nou ontwikkel is onder die beskerming van die onafhanklike nie-winsgewende organisasie Rust Foundation, is vrygestel. Die taal fokus op geheueveiligheid en bied die middele om hoë werkparallelisme te bereik terwyl die gebruik van 'n vullisverwyderaar en looptyd vermy word (looptyd word verminder tot basiese inisialisering en instandhouding van die standaardbiblioteek).

Rust se geheue hantering metodes red die ontwikkelaar van foute wanneer wysers gemanipuleer word en beskerm teen probleme wat ontstaan ​​as gevolg van laevlak geheue manipulasie, soos toegang tot 'n geheue area nadat dit vrygestel is, herkenning van nulwysers, buffer oorskryding, 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.

Geheueveiligheid word tydens samestellingstyd in Rust verskaf deur verwysingskontrolering, tred te hou met objekeienaarskap, tred te hou met objekleeftye (bestekke), en die korrektheid van geheuetoegang tydens kode-uitvoering te assesseer. Roes bied ook beskerming teen heelgetal oorvloei, vereis verpligte inisialisering van veranderlike waardes voor gebruik, hanteer foute beter in die standaard biblioteek, pas die konsep van onveranderlike verwysings en veranderlikes by verstek toe, bied sterk statiese tik om logiese foute te minimaliseer.

Belangrikste innovasies:

  • Dit is moontlik om u eie terugkeerkodes vanaf die hooffunksie te definieer. Oorspronklik kon Rust se hooffunksie slegs tipe "()" (eenheid) terugstuur, wat altyd 'n suksesvolle uitgangstatus aangedui het, tensy die ontwikkelaar uitdruklik die "process::exit(code)"-funksie genoem het. In Rust 1.26, met behulp van die onstabiele beëindiging-eienskap in die hooffunksie, was dit moontlik om die waardes "Ok" en "Err" terug te gee, wat ooreenstem met die EXIT_SUCCESS- en EXIT_FAILURE-kodes in C-programme. In Rust 1.61 is die Beëindigingseienskap stabiel gemaak, en 'n aparte ExitCode-tipe is voorgestel om 'n spesifieke terugkeerkode voor te stel, wat platformspesifieke opbrengstipes abstraheer deur beide voorafbepaalde konstantes SUKSES en MISLUKKING, en die Van-metode te verskaf. om 'n pasgemaakte terugstuurkode terug te gee. gebruik std::proces::ExitCode; fn main() -> ExitCode { if !check_foo() { return ExitCode::from(8); } Uittreekode::SUKSES }
  • Bykomende vermoëns van funksies wat met die uitdrukking "const fn" gedefinieer is, is gestabiliseer, wat nie net as gereelde funksies genoem kan word nie, maar ook in enige konteks in plaas van konstantes gebruik kan word. Hierdie funksies word tydens samestellingstyd bereken, nie tydens looptyd nie, so hulle is onderhewig aan sekere beperkings, soos die vermoë om slegs vanaf konstantes te lees. In die nuwe weergawe word basiese bewerkings met funksiewysers binne-konst-funksies toegelaat (skep, deurgee en uitsaai van wysers word toegelaat, maar nie 'n funksie per wyser oproep nie); eienskapgrense vir generiese parameters van konstfunksies soos T: Kopieer; dinamies versendbare eienskappe (dyn Trait); impl Eienskaptipes vir funksieargumente en terugkeerwaardes.
  • Die stroom hanteer Stdin, Stdout en Stderr in std::io het nou 'n statiese leeftyd ("'static") wanneer gesluit, wat voorsiening maak vir konstrukte soos "let out = std::io::stdout().lock();" met 'n handvatsel te kry en 'n slot in een uitdrukking te stel.
  • 'n Nuwe gedeelte van die API is na die kategorie stal geskuif, insluitend die metodes en implementering van eienskappe is gestabiliseer:
    • Pin::static_mut
    • Pin::static_ref
    • Vec::retain_mut
    • VecDeque::retain_mut
    • Skryf vir Cursor<[u8; N]>
    • std::os::unix::net::SocketAddr::from_pathname
    • std::proses::Uittrekkode
    • std::proses::Beëindiging
    • std::draad::JoinHandle::is_klaar
  • Die "const"-kenmerk, wat die moontlikheid bepaal om dit in enige konteks in plaas van konstantes te gebruik, word in funksies gebruik:
    • <*const T>::offset en <*mut T>::offset
    • <*const T>::wrapping_offset en <*mut T>::wrapping_offset
    • <*konst T>::add en <*mut T>::add
    • <*konst T>::sub en <*mut T>::sub
    • <*const T>::wrapping_add en <*mut T>::wrapping_add
    • <*const T>::wrapping_sub en <*mut T>::wrapping_sub
    • <[T]>::as_mut_ptr
    • <[T]>::as_ptr_range
    • <[T]>::as_mut_ptr_range

Daarbenewens kan u let op die artikel "Rust: A Critical Retrospective" met 'n opsomming van indrukke van die Rust-taal nadat u 100 duisend reëls kode daarin geskryf het tydens die ontwikkeling van die Xous-mikrokernbedryfstelsel wat in firmware gebruik word. Nadele sluit in moeilik verstaanbare sintaksis, onvolledigheid en voortgesette ontwikkeling van die taal, gebrek aan herhaalbare bouwerk, tipiese probleme met afhanklikheidsvertroue in Crates.io, en die behoefte om 'n sekere dissipline te handhaaf om veilige kode te skryf. Kenmerke wat verwagtinge oortref het, sluit in gereedskap vir herfaktorering van kode en herbewerking van "hacks" wat bygevoeg is tydens vinnige prototipering.

Bron: opennet.ru

Voeg 'n opmerking