Rust 1.76 Programlingvo-Eldono

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

  • Aparta sekcio priskribanta la kongruecon de diversaj argumentotipoj kaj redontipoj de funkcioj je la ABI-nivelo estis aldonita al la dokumentado. Kompare kun antaŭaj versioj, kongrueco je la ABI-nivelo estas garantiita por la tipoj "char" kaj "u32", kiuj havas identan grandecon kaj vicigon.
  • Aldone al la antaŭe havebla "any::type_name::" alvoko ()", kiu redonas ĉenan priskribon por la tipo specifita en la parametro "T", estis aldonita la funkcio "type_name_of_val(&T)", kiu permesas al vi akiri informojn pri la tipo bazitajn sur iu ajn nenomita referenco. fn get_iter() -> simpl Iterator { [32, 1, 2].into_iter() } fn main() { let iter = get_iter(); let iter_name = std::any::type_name_of_val(&iter); let sum: i3 = iter.sum(); println!("La sumo de `{iter_name}` estas {sum}."); } La rezulto estas: La sumo de `core::array::iter::IntoIter ` estas 32.
  • Nova parto de la API estis movita al la kategorio de stalo, inkluzive de la metodoj kaj efektivigoj de trajtoj estis stabiligitaj:
    • Arc::unwrap_or_clone
    • Rc::unwrap_or_clone
    • Rezulto::inspekti
    • Rezulto::inspekti_eraron
    • Opcio::inspekti
    • tipo_nomo_de_valoro
    • std::hash::{DefaŭltaHaŝisto, HazardaStato}
    • ptr::{de_referenco, de_muto}
    • ptr::addr_eq
  • La tria nivelo de subteno estis efektivigita por la platformoj {x86_64,i686}-win7-windows-msvc, aarch64-apple-watchos, arm64e-apple-ios kaj arm64e-apple-darwin. La tria nivelo implicas bazan subtenon, sed sen aŭtomata testado, publikigado de oficialaj konstruoj kaj kontrolado de la kapablo konstrui kodon.

Plie, ni povas rimarki la demonstraĵon de la eksperimenta taskoplanilo scx_rustland, skribita en la lingvo Rust kaj efektivigita en la uzantospaco (la forigo de taskoplanada logiko de la kerno al la uzantospaco estas efektivigita per la ilaro sched-ext, kiu uzas BPF). La planilo estas optimumigita por pliigi la prioritaton de interagaj taskoj kontraŭ CPU-intensaj taskoj. Ekzemple, en testo de lanĉo de ludprogramo samtempe kun konstruado de la kerno, la planilo scx_rustland permesis al ni atingi pli altan FPS en la ludo ol uzante la norman EEVDF-planilon.

fonto: opennet.ru

Aĉetu fidindan gastigadon por retejoj kun DDoS-protekto, VPS-VDS-serviloj 🔥 Aĉetu fidindan retejan gastigadon kun DDoS-protekto, VPS VDS-servilojn | ProHoster