Rust 1.57 Programlingvo-Eldono

La eldono de la sistema programlingvo Rust 1.57, 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, disponigas aŭtomatan memoradministradon, kaj disponigas la rimedojn por atingi altan taskoparalelecon sen uzado de rubkolektilo aŭ rultempo (rultempo estas reduktita al baza inicialigo kaj prizorgado de la norma biblioteko).

La aŭtomata memoradministrado de Rust eliminas erarojn dum manipulado de montriloj kaj protektas kontraŭ problemoj ekestiĝantaj de malalt-nivela memormanipulado, kiel ekzemple alirado de memorregiono post kiam ĝi estis liberigita, nulaj montriloj dereferences, bufrotranspasoj, ktp. Por distribui bibliotekojn, certigi kunigon kaj administri dependecojn, la projekto disvolvas la Cargo-pakaĵmanaĝeron. La deponejo crates.io estas subtenata por gastigado de bibliotekoj.

Ĉefaj novigoj:

  • La uzo de la makroo "paniko!" stabiliĝis. en kuntekstoj kreitaj dum kompilo, kiel "const fn" deklaroj. Aldone, krom uzi "paniko!" const-deklaroj permesas la uzon de la makroo “asert!”. kaj iuj aliaj normaj bibliotekaj APIoj. Stabiligo ankoraŭ ne kovras la tutan formatan infrastrukturon, do en sia nuna formo la makroo "paniko!" uzeblas nur kun senmovaj ĉenoj (paniko!(“...")) aŭ kun ununura interpola valoro "&str" kiam oni anstataŭigas (paniko!("{}", a)), kiu devus esti limigita al anstataŭigo de "{ }" sen formatado de specifiloj kaj aliaj tipoj. En la estonteco, la aplikebleco de makrooj en konstantaj kuntekstoj estos vastigita, sed la stabiligitaj kapabloj jam sufiĉas por fari asertajn kontrolojn en la kompila stadio: const _: () = asert!(std::mem::size_of::() == 64); const _: () = aserti!(std::mem::size_of::() == 8);
  • La Cargo-pakaĵmanaĝero permesas la uzon de profiloj kun arbitraj nomoj, ne limigitaj al "dev", "liberigo", "testo" kaj "benko". Ekzemple, por ebligi optimumigon ĉe la liga stadio (LTO) nur kiam la finaj produktaj asembleoj estas generitaj, vi povas krei "produktadon" profilon en Cargo.toml kaj aldoni la flagon "lto = vera" al ĝi. Tamen, kiam vi difinas viajn proprajn profilojn, vi devas specifi ekzistantan profilon por heredi de ĝi defaŭltajn agordojn. La ĉi-suba ekzemplo kreas "produktadon" profilon, kiu kompletigas la "liberigan" profilon inkluzivante la flagon "lto = vera". La profilo mem estas aktivigita per vokado de kargo kun la opcio "--profile production", kaj la asembleaj artefaktoj estos metitaj en la dosierujon "celo/produktado". [profile.production] inherits = "liberigo" lto = vera
  • La uzo de try_reserve por la tipoj Vec, String, HashMap, HashSet kaj VecDeque estas stabiligita, kio ebligas al vi rezervi spacon anticipe por certa nombro da elementoj de difinita tipo por redukti la oftecon de memoraj asigno operacioj kaj eviti kraŝoj dum operacio pro manko de memoro.
  • Estas permesite specifi makroojn kun buklaj krampoj en esprimoj kiel "m!{ .. }.method()" kaj "m!{ .. }?".
  • La ekzekuto de la funkcioj File::read_to_end kaj read_to_string estis optimumigita.
  • Subteno por la Unikoda specifo estis ĝisdatigita al versio 14.0.
  • Pligrandigis la nombron da funkcioj markitaj "#[devas_uzi]" por doni averton se la revena valoro estas ignorita, kio helpas identigi erarojn kaŭzitajn de supozado, ke funkcio ŝanĝos valorojn anstataŭ redoni novan valoron.
  • Aldonita eksperimenta backend por kodgenerado uzante libgccjit.
  • Nova parto de la API estis movita al la kategorio de stalo, inkluzive de la metodoj kaj efektivigoj de trajtoj estis stabiligitaj:
    • [T; N]::as_mut_slice
    • [T; N]::as_tranĉaĵo
    • kolektoj::TryReserveError
    • HashMap::try_reserve
    • HashSet::try_reserve
    • String::try_reserve
    • String::try_reserve_exact
    • Vec::provi_rezervi
    • Vec::try_reserve_exact
    • VecDeque::try_reserve
    • VecDeque::try_reserve_exact
    • Iterator::map_dum
    • iter::MapWhile
    • proc_macro::estas_disponebla
    • Command::get_program
    • Command::get_args
    • Command::get_envs
    • Command::get_current_dir
    • CommandArgs
    • CommandEnvs
  • La atributo "const", kiu determinas ĉu ĝi povas esti uzata en iu ajn kunteksto anstataŭ konstantoj, estas uzata en la funkcio hint::unreachable_unchecked.
  • La tria nivelo de subteno estis efektivigita por la armv6k-nintendo-3ds, armv7-unknown-linux-uclibceabihf, m68k-unknown-linux-gnu, aarch64-kmc-solid_asp3, armv7a-kmc-solid_asp3-eabi kaj armv7a-kmc- solid_asp3-eabihf platformoj. La tria nivelo implikas bazan subtenon, sed sen aŭtomatigita testado, publikigado de oficialaj konstruaĵoj aŭ kontrolado ĉu la kodo povas esti konstruita.

fonto: opennet.ru

Aldoni komenton