Rust 1.61 Programlingvo-Eldono

La eldono de la ĝeneraluzebla programlingvo Rust 1.61, fondita de la projekto Mozilla, sed nun disvolvita sub la aŭspicioj de la sendependa neprofitcela organizaĵo Rust Foundation, estis publikigita. La lingvo temigas memorsekurecon kaj disponigas la rimedojn por atingi altan laborparalelecon evitante la uzon de rubkolektilo kaj rultempo (rultempo estas reduktita al baza inicialigo kaj prizorgado de la norma biblioteko).

La memormanipulaj metodoj de Rust savas la ellaboranton de eraroj dum manipulado de montriloj kaj protektas kontraŭ problemoj kiuj ekestas pro malaltnivela memortraktado, kiel ekzemple alirado de memorareo post kiam ĝi estis liberigita, dereferencing nulmontriloj, bufrotranspaso, ktp. Por distribui bibliotekojn, provizi konstruaĵojn kaj administri dependecojn, la projekto disvolvas la Cargo-pakaĵmanaĝeron. La deponejo crates.io estas subtenata por gastigado de bibliotekoj.

Memorsekureco estas disponigita en Rust ĉe kompiltempo tra referenckontrolado, konservante trakon de objektoposedo, konservante trakon de objektovivdaŭroj (kampoj), kaj taksante la ĝustecon de memoraliro dum kodekzekuto. Rusto ankaŭ provizas protekton kontraŭ entjeraj superfluoj, postulas devigan inicialigon de variaj valoroj antaŭ uzo, pli bone pritraktas erarojn en la norma biblioteko, aplikas la koncepton de neŝanĝeblaj referencoj kaj variabloj defaŭlte, ofertas fortan senmovan tajpadon por minimumigi logikajn erarojn.

Ĉefaj novigoj:

  • Eblas difini viajn proprajn revenkodojn el la ĉefa funkcio. Origine, la ĉefa funkcio de Rust povis nur resendi tipon "()" (unuo), kiu ĉiam indikis sukcesan elirstatuson krom se la programisto eksplicite vokis la funkcion "process::exit(code)". En Rust 1.26, uzante la malstabilan Terminan trajton en la ĉefa funkcio, eblis redoni la valorojn "Ok" kaj "Err", respondajn al la EXIT_SUCCESS kaj EXIT_FAILURE-kodoj en C-programoj. En Rust 1.61, la Termination-trajto fariĝis stabila, kaj aparta ExitCode-speco estis proponita reprezenti specifan revenkodon, kiu abstraktas platform-specifajn revenspecojn disponigante kaj antaŭdifinitajn konstantojn SUKCESO kaj FIASKO, kaj la metodon De. por redoni kutiman revenkodon. uzu std::process::ExitCode; fn ĉefa () -> Elirkodo { if !check_foo () { return Eliro::de (8); } ExitCode::SUCCESS }
  • Pliaj kapabloj de funkcioj difinitaj per la esprimo "const fn" estis stabiligitaj, kiuj povas esti nomitaj ne nur kiel regulaj funkcioj, sed ankaŭ uzataj en iu ajn kunteksto anstataŭ konstantoj. Tiuj funkcioj estas kalkulitaj je kompiltempo, ne dum rultempo, do ili estas submetitaj al certaj restriktoj, kiel ekzemple la kapablo legi nur de konstantoj. En la nova versio, bazaj operacioj kun funkciomontriloj estas permesitaj ene de konst-funkcioj (krei, preterpasi kaj ĵeti montrilojn estas permesitaj, sed ne voki funkcion per montrilo); trajto limoj por senmarkaj parametroj de konst funkcioj kiel ekzemple T: Kopio; dinamike sendeblaj trajtoj (dyn Trait); impl Trajtaj tipoj por funkcio argumentoj kaj revenaj valoroj.
  • La rivereto pritraktas Stdin, Stdout kaj Stderr en std::io nun havas senmovan vivdaŭron ("'senmova") kiam ŝlosita, permesante konstruojn kiel "lasi ekstere = std::io::stdout().lock();" kun ricevi tenilon kaj meti seruron en unu esprimo.
  • Nova parto de la API estis movita al la kategorio de stalo, inkluzive de la metodoj kaj efektivigoj de trajtoj estis stabiligitaj:
    • Pin::static_mut
    • Pin::static_ref
    • Vec::retain_mut
    • VecDeque::retain_mut
    • Skribu por Kursoro<[u8; N]>
    • std::os::unix::net::SocketAddr::from_pathname
    • std::process::ExitCode
    • std::process::Fino
    • std::fadeno::JoinHandle::estas_finita
  • La atributo "const", kiu determinas la eblecon uzi ĝin en iu ajn kunteksto anstataŭ konstantoj, estas uzata en la funkcioj:
    • <*const T>::offset kaj <*mut T>::offset
    • <*const T>::wrapping_offset kaj <*mut T>::wrapping_offset
    • <*const T>::add kaj <*mut T>::add
    • <*const T>::sub kaj <*mut T>::sub
    • <*const T>::wrapping_add kaj <*mut T>::wrapping_add
    • <*const T>::wrapping_sub kaj <*mut T>::wrapping_sub
    • <[T]>::as_mut_ptr
    • <[T]>::as_ptr_range
    • <[T]>::as_mut_ptr_range

Aldone, vi povas noti la artikolon "Rust: Kritika Retrospektivo" kun resumo de impresoj de la Rust-lingvo post skribado de 100 mil linioj da kodo en ĝi dum la evoluo de la Xous-mikrokerna operaciumo uzata en firmware. Malavantaĝoj inkluzivas malfacile kompreneblan sintakson, nekompletecon kaj daŭran evoluon de la lingvo, mankon de ripeteblaj konstruoj, tipaj problemoj kun dependeca fido en Crates.io, kaj la bezono konservi certan disciplinon por skribi sekuran kodon. Trajtoj, kiuj superis atendojn, inkluzivas ilojn por refaktorigi kodon kaj reverki "hakojn" aldonitajn dum rapida prototipado.

fonto: opennet.ru

Aldoni komenton