Rust 1.66 Programlingvo-Eldono

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

  • En nombradoj kun entjeraj prezentoj (la atributo "#[repr(Int)]", eksplicita indiko de la diskriminanto (varia nombro en la nombrado) estas permesita, eĉ se la nombrado enhavas kampojn. #[repr(u8)] enum Foo { A(u8), # diskriminanto 0 B(i8), # diskriminanto 1 C(bool) = 42, # diskriminanto 42 }
  • Aldonita funkcio core::hint::black_box kiu simple resendas la ricevitan valoron. Ĉar la kompililo opinias, ke ĉi tiu funkcio faras ion, la funkcio black_box povas esti uzata por malŝalti kompililojn por bukloj dum elfarado de koda agado-testado aŭ dum ekzamenado de generita maŝinkodo (por ke la kompililo ne konsideru la kodon neuzata kaj forigu ĝin). Ekzemple, en la malsupra ekzemplo, black_box(v.as_ptr()) malhelpas la kompililon pensi ke la vektoro v ne estas uzata. uzu std::hint::nigra_skatolo; fn push_cap(v: &mut Vec) { for i in 0..4 { v.push(i); nigra_kesto(v.as_ptr()); }}
  • La pakaĵmanaĝero "kargo" ofertas la komandon "forigi", kiu ebligas al vi forigi dependecojn de la manifesto Cargo.toml de la komandlinio.
  • Nova parto de la API estis movita al la kategorio de stalo, inkluzive de la metodoj kaj efektivigoj de trajtoj estis stabiligitaj:
    • proc_macro::Span::source_text
    • u*::{checked_add_signed, overflowing_add_signed, saturating_add_signed, wrapping_add_signed}
    • i*::{checked_add_unsigned, overflowing_add_unsigned, saturating_add_unsigned, wrapping_add_unsigned}
    • i*::{checked_sub_unsigned, overflowing_sub_unsigned, saturating_sub_unsigned, wrapping_sub_unsigned}
    • BTreeSet::{unua, lasta, pop_unua, pop_lasta}
    • BTreeMap::{unua_ŝlosilvaloro, lasta_ŝlosilvaloro, unua_eniro, lasta_eniro, pop_unua, pop_lasta}
    • Aldonu AsFd-efektivigojn por stdio-ŝlosiltipoj kiam vi uzas WASI.
    • impli ProvuDe > por Skatolo<[T; N]>
    • kerno::sugesto::nigra_skatolo
    • Daŭro::try_from_secs_{f32,f64}
    • Opcio::unzip
    • std::os::fd
  • La gamoj "..X" kaj "..=X" estas permesitaj en ŝablonoj.
  • Konstruante la antaŭan finaĵon de la rustc-kompililo kaj la LLVM-backend, LTO (Link Time Optimization) kaj BOLT (Binara Optimumigo kaj Layout Tool) optimumreĝimoj estas uzataj por pliigi la agadon de la rezulta kodo kaj redukti memorkonsumon.
  • Efektivigita nivelo 5 subteno por armv5te-none-eabi kaj thumbvXNUMXte-none-eabi platformoj. La tria nivelo implicas bazan subtenon, sed sen aŭtomatigita testado, publikigado de oficialaj konstruoj kaj kontrolado de la kapablo konstrui la kodon.
  • Aldonita subteno por ligi al macOS Ĝeneralaj Bibliotekoj.

Aldone, ni povas noti la inkludon en la GCC-kodbazo de la antaŭfina kompililo de la Rust-lingvo (gccrs). La fasado estas inkluzivita en la branĉo GCC 13, kiu estos liberigita en majo 2023. Komencante kun GCC 13, la norma GCC ilaro povos esti uzata por kompili Rust-programojn sen neceso instali la rustc-kompililon konstruitan per LLVM-evoluoj. La Rust-efektivigo en GCC 13 estos en beta-stato, ne ebligita defaŭlte.

fonto: opennet.ru

Aldoni komenton