Rust 1.60 Programlingvo-Eldono

La eldono de la ĝeneraluzebla programlingvo Rust 1.60, 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 rustc-kompililo havas stabiligitan LLVM-bazitan sistemon por generado de priraportadodatenoj uzitaj por taksi kodpriraportadon dum testado. Por ebligi kovrajn datumojn dum kunigo, vi devas uzi la flagon "-Cinstrument-coverage", ekzemple, komencante la kunigon per la komando "RUSTFLAGS="-C instrument-coverage" cargo build". Post rulado de la rulebla dosiero tiel kompilita, la default.proraw-dosiero estos konservita en la nuna dosierujo, por prilaborado, kiun vi povas uzi la llvm-profdata ilo de la llvm-tools-preview komponento. La eligo prilaborita de llvm-profdata povas tiam esti transdonita al llvm-cov por generi komentitan kodan priraportadon. Informoj pri la ligo al la fontkodo estas prenita de la plenumebla dosiero ekzamenata, kiu inkluzivas la necesajn datumojn pri la ligo inter kovrokalkuliloj kaj la kodo. 1| 1|fn ĉefa() { 2| 1| println!("Saluton, mondo!"); 3| 1|}
  • En la administranto de ŝarĝpakaĵo, subteno por la flago "-timings" estis stabiligita, kiu inkluzivas la generacion de detala raporto pri la progreso de la konstruo kaj la ekzekuttempo de ĉiu paŝo. La raporto povas esti utila por optimumigi la agadon de la kunigprocezo.
  • La administranto de ŝarĝpakaĵo ofertas novan sintakson por la mekanismo de kondiĉa kompilo kaj elekto de laŭvolaj dependencajoj, agordita en la dosiero Cargo.toml listigante liston de nomitaj propraĵoj en la sekcio [karakterizaĵoj] kaj aktivigita per ebligado de la propraĵoj dum la pakkonstruaĵo. uzante la flagon "--ecoj". La nova versio aldonas subtenon por dependecoj en apartaj nomspacoj kaj malfortaj dependecoj.

    En la unua kazo, eblas uzi elementojn kun la prefikso "dep:" ene de la sekcio "[trajtoj]" por eksplicite ligi al laŭvola dependeco sen implicite reprezenti ĉi tiun dependecon kiel trajto. En la dua kazo, subteno por markado per la "?"-signo estis aldonita. ("pakaĵo-nomo?/karakteraĵo-nomo") laŭvolaj dependecoj kiuj devus esti inkluditaj nur se iu alia posedaĵo inkluzivas la donitan laŭvolan dependecon. Ekzemple, en la malsupra ekzemplo, ebligi la serde-posedaĵon ebligos la "serde" dependecon, same kiel la "serde"-posedaĵon por la "rgb" dependeco, sed nur se la "rgb" dependeco estas ebligita aliloke: [dependencies] serde = { versio = " 1.0.133", nedeviga = vera } rgb = { versio = "0.8.25", nedeviga = vera } [karakterizaĵoj] serde = ["dep:serde", "rgb?/serde"]

  • Subteno por pliiga kompilo, kiu estis malŝaltita en la lasta eldono, estis resendita. La kompilila cimo, kiu kaŭzis la malfunkciigon de la funkcio, estis solvita.
  • Solvis iujn problemojn pri provizado de Tujaj tempigiloj kun garantio de monotona tempo, kiu konsideras la tempon pasigitan de la sistemo en dormreĝimo. Antaŭe, la OS API estis uzita kiam ajn ebla por funkciigi la tempigilon, kiu ne enkalkulis problemajn situaciojn kiuj rompas la monotonecon de tempo, kiel hardvarproblemoj, la uzo de virtualigo aŭ eraroj en la operaciumo.
  • Nova parto de la API estis movita al la kategorio de stalo, inkluzive de la metodoj kaj efektivigoj de trajtoj estis stabiligitaj:
    • Arko::nova_cikla
    • Rc::nova_cikla
    • tranĉaĵo::EscapeAscii
    • <[u8]>::escape_ascii
    • u8::escape_ascii
    • Vec::spare_capacity_mut
    • EbleUninit::assume_init_drop
    • EbleUninit::assume_init_read
    • i8::abs_diff
    • i16::abs_diff
    • i32::abs_diff
    • i64::abs_diff
    • i128::abs_diff
    • isize::abs_diff
    • u8::abs_diff
    • u16::abs_diff
    • u32::abs_diff
    • u64::abs_diff
    • u128::abs_diff
    • usize::abs_diff
    • Montru por io::ErrorKind
    • De por ExitCode
    • Ne por! (tajpu "neniam")
    • _Op_Asigni<$t>
    • arch::estas_aarch64_feature_detektita!
  • La tria nivelo de subteno estis efektivigita por la platformoj mips64-openwrt-linux-musl* kaj armv7-unknown-linux-uclibceabi (softfloat). 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 kompililo estis ŝanĝita por uzi LLVM 14.

Aldone, vi povas noti:

  • Aldonita subteno por ekfunkciigo de la rustc-kompililo uzante la rustc_codegen_gcc backend, kiu ebligas al vi uzi la libgccjit-bibliotekon de la projekto GCC kiel kodgeneratoro en rustc, kiu permesas al rustc provizi subtenon por arkitekturoj kaj optimumigoj disponeblaj en GCC. Kompililreklamo signifas la kapablon uzi GCC-bazitan kodgeneratoron en rustc por konstrui la rustc-kompililon mem. En la praktika flanko, ĉi tiu funkcio permesas vin konstrui rustprogramojn por arkitekturoj kiuj antaŭe ne estis subtenataj en rustc.
  • Estas disponebla la eldono de la ilaro uutils coreutils 0.0.13, ene de kiu estas disvolvita analogo de la pako GNU Coreutils, reverkita en la Rust-lingvo. Coreutils venas kun pli ol cent iloj, inkluzive de ordigo, kato, chmod, chown, chroot, cp, dato, dd, echo, gastiga nomo, id, ln kaj ls. La celo de la projekto estas krei transplatforman alternativan efektivigon de Coreutils, kapabla funkcii sur Vindozo, Redox kaj Fuchsia platformoj, same kiel distribuadon sub la permesema MIT-licenco, anstataŭe de la GPL-kopyleft-licenco.

    La nova versio plibonigis efektivigojn de multaj iloj, inkluzive de signife plibonigita kongrueco de la cp, dd, df, split kaj tr iloj kun siaj ekvivalentoj de la GNU-projekto. Reta dokumentaro provizita. La klap-analizilo estas uzata por analizi komandliniajn argumentojn, kio plibonigis la eligon por la flago "--help" kaj aldonis subtenon por mallongigoj de longaj komandoj (ekzemple, vi povas specifi "ls -col" anstataŭ "ls -color". ").

fonto: opennet.ru

Aldoni komenton