Rust 1.73 Programlingvo-Eldono

La eldono de la ĝeneraluzebla programlingvo Rust 1.73, 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:

  • La formato de mesaĝoj elsenditaj de la defaŭlta programa kraŝtraktilo (paniko) estis restrukturita. La teksto specifita en la makroo "paniko!" nun estas montrita sur aparta linio sen citiloj, igante la mesaĝon pli facile legebla kaj forigante konfuzon kiam nestitaj citaĵoj ĉeestas aŭ dividitaj trans pluraj linioj. fn main() { let file = "ferris.txt"; paniko!("ho ne! {dosiero:?} ne trovita!"); } Estis fadeno 'ĉefa' panikita ĉe 'ho ne! "ferris.txt" ne trovita!', src/main.rs:3:5 Fadeno 'main' panikiĝis ĉe src/main.rs:3:5: ho ne! "ferris.txt" ne trovita!

    La eligo de mesaĝoj montritaj kiam la "assert_eq" kaj "assert_ne" makrooj estas ekigitaj ankaŭ estis reverkita. fn main() { assert_eq!("🦀", "🐟", "ferriso ne estas fiŝo"); } Estis fadeno 'ĉefa' panikita ĉe 'aserto malsukcesis: `(maldekstre == dekstre)` maldekstre: `"🦀"`, dekstre: `"🐟"`: ferris ne estas fiŝo', src/main.rs: 2 :5 Fadeno 'ĉefa' panikiĝis ĉe src/main.rs:2:5: aserto `left == right` malsukcesis: ferris ne estas fiŝo maldekstre: “🦀” dekstre: “🐟”

  • Konforme al RFC 3184, la kapablo rekte manipuli faden-lokajn (thread_local) LocalKey-stokajn ŝlosilojn estis aldonita > kaj LocalKey > per la uzo de get(), set(), take() kaj replace() metodoj, anstataŭ uzi "kun(|interna| ...)" fermo, kiu forigas la bezonon fari plian komencan kodon por la defaŭltaj valoroj specifitaj por novaj fadenoj kiam vi uzas la makroon "thread_local!" fadeno_loka! { statikaj AFEROJ: Ĉelo > = Ĉelo::nova(Vec::nova()); } fn f() { // estis AFORO.kun(|i| i.aro(vec![32, 1, 2])); // fariĝis AFEROJ.aro(vec![3, 1, 2]); // ... // estis lasita v = AFEROJ.kun(|i| i.prenu()); // iĝis let v: Vec = AFEROJ.prenu(); }
  • Nova parto de la API estis movita al la kategorio de stalo, inkluzive de la metodoj kaj efektivigoj de trajtoj estis stabiligitaj:
    • Sensigna {entjero}::div_ceil
    • Sensubskribita {entjero}::next_multiple_of
    • Sensubskribita {entjero}::checked_next_multiple_of
    • std::ffi::FromBytesUntilNulError
    • std::os::unix::fs::chown
    • std::os::unix::fs::fchown
    • std::os::unix::fs::lfchown
    • LocalKey:: >::ricevu
    • LocalKey:: >::aro
    • LocalKey:: >::prenu
    • LocalKey:: >>::anstatauxigi
    • LocalKey:: >::kun_pruntepreni
    • LocalKey:: >>::kun_prunti_mut
    • LocalKey:: >::aro
    • LocalKey:: >::prenu
    • LocalKey:: >>::anstatauxigi
  • La atributo "const", kiu determinas la eblecon uzi ĝin en iu ajn kunteksto anstataŭ konstantoj, estas uzata en la funkcioj:
    • rc::Malforta::nova
    • sync::Malforta::nova
    • NonNull::as_ref
  • La kompililo disponigas registradon de versio-informoj en la sekcio ".comment", simile al GCC kaj Clang.
  • La tria nivelo de subteno estis efektivigita por la platformoj aarch64-unknown-teeos, csky-unknown-linux-gnuabiv2, riscv64-linux-android, riscv64gc-unknown-hermit, x86_64-unikraft-linux-musl kaj x86_64-unknown-linux -ohos. La tria nivelo implikas bazan subtenon, sed sen aŭtomatigita testado, publikigado de oficialaj konstruaĵoj aŭ kontrolado ĉu la kodo povas esti konstruita.
  • La dua nivelo de subteno por la cela platformo wasm32-wasi-preview1-fadenoj estis efektivigita. La dua nivelo de subteno implikas kunvenan garantion.

fonto: opennet.ru

Aldoni komenton