Rust 1.44 Programlingvo-Eldono

eldonita eldono de la sistemo de programlingvo Rusto 1.44, fondita de la projekto Mozilla. La lingvo temigas memorsekurecon, disponigas aŭtomatan memoradministradon, kaj disponigas ilojn por atingi altan taskan paralelecon sen uzado de rubkolektilo kaj rultempo.

La aŭtomata memoradministrado de Rust eliminas erarojn dum manipulado de montriloj kaj protektas kontraŭ problemoj ekestiĝantaj de malaltnivela memormanipulado, kiel ekzemple alirado de memorregiono post kiam ĝi estis liberigita, nulaj montriloj dereferences, bufrotranspasoj, ktp. Pakaĵmanaĝero estas evoluigita por distribui bibliotekojn, certigi kunigon kaj administri dependecojn per la projekto. kargo, permesante al vi akiri la bibliotekojn necesajn por la programo per unu klako. Deponejo estas subtenata por gastigi bibliotekojn kestoj.io.

En la teksto de la anonco de la nova eldono, la programistoj de Rust okupiĝis pri politiko kaj klare rifuzis publikigi plenan recenzon pri la ŝanĝoj en Rust 1.44 kiel signo de solidareco kun manifestacianoj kontraŭ polica perforto, indikante, ke ĉi tiu afero estas pli grava. ol la interŝanĝo de teknika scio. Baza novigoj:

  • La Cargo-pakaĵmanaĝero integras la komandon "kargo-arbo", kiu montras arb-similan dependecan grafeon. Aldonas ankaŭ la opcio "—duplikatoj" ("ŝarĝarbo -d"), kiu ebligas al vi taksi dependecojn en malsamaj versioj de la sama pako.

    mdbook v0.3.2 (/Users/src/rust/mdbook)
    ├── amoniako v3.0.0
    │ ├── html5ever v0.24.0
    │ │ ├── log v0.4.8
    │ │ │ └── cfg-if v0.1.9
    │ │ ├── mac v0.1.1
    │ │ └── markup5ever v0.9.0
    │ │ ├── protokolo v0.4.8 (*)
    │ │ ├── phf v0.7.24
    │ │ │ └── phf_shared v0.7.24
    │ │ │ ├── siphasher v0.2.3
    │ │ │ └── unicase v1.4.2
    │ │ │ [konstruaj dependecoj] │ │ │ └── version_check v0.1.5
    ...

  • Por aplikoj ne ligitaj al std ("#![no_std]"), subteno por nesinkronaj programaj teknikoj estas efektivigita surbaze de la "sensinkrona" funkcio, la nesinkrona movo { ... } bloko kaj la ".await" funkciigisto, kiu simpligi skribon ne-blokantaj pritraktiloj ĉefa komandfluo.
  • Subteno por etendebla modula hierarkia difinskemo estis aldonita al la analizilo. Ekzemple, la sekva konstruo ne produktos eraron, malgraŭ la fakta foresto de la modulo "foo/bar/baz.rs" (la konstrukcio ankoraŭ estas semantike malvalida kaj povas kaŭzi eraron, sed la ŝanĝoj povas esti viditaj kaj analizitaj ĉe la makroo kaj kondiĉa kompilnivelo):

    #[cfg(FALSA)] mod foo {
    mod trinkejo {
    mod baz;
    }
    }

  • La rustc-kompililo aldonis la kapablon uzi la flagon "-C codegen-units" en pliiga reĝimo. La efektivigo de catch_unwind estis reverkita tiel ke ĝi ne havu efikecon se la malvolva procezo estas malŝaltita kaj neniuj esceptoj estas ĵetitaj.
  • Nivelo 64-subteno estis provizita por la platformoj aarch64-unknown-none, aarch64-unknown-none-softfloat, arm86-apple-tvos kaj x64_XNUMX-apple-tvos. La tria nivelo implikas bazan subtenon, sed sen aŭtomatigita testado kaj publikigo de oficialaj konstruoj.
  • Nova parto de APIoj estis translokigita al la stabila kategorio, inkluzive de stabiligita
    PathBuf::kun_kapacito,
    PathBuf::kapacito,
    PathBuf::malbari,
    PathBuf::rezervo,
    PathBuf::rezervo_preciza,
    PathBuf::shrink_to_fit,
    {f32|f64}::to_int_nemarkita,
    Aranĝo::align_to,
    Aranĝo::pad_to_align,
    Layout::array kaj
    Aranĝo::etendu.

  • Plilongigitaj funkcioj de la norma biblioteko:
    • Aldonita speciala "vec![]" varianto kiu estas rekte reflektita en Vec::new(), permesante "vec![]" esti uzata en kunteksto anstataŭ konstantoj.
    • Efektivigo (impl) de la trajto estis aldonita por konverti::Infallible Hash.
    • OsString efektivigas inteligentajn montrilojn DerefMut и IndexMut, resendante "&mut OsStr".
    • Aldonita subteno por Unikodo 13.
    • Efektivigite en String De<&mut str>.
    • IoSlice efektivigas la trajton Kopio.
    • Vec efektivigita De<[T; N]>.
    • proc_macro::LexError efektivigas fmt::Display kaj Eraro.
  • La atributo "const", kiu determinas ĉu ĝi povas esti uzata en iu ajn kunteksto anstataŭ konstantoj, estas uzata en la metodoj from_le_bytes, to_le_bytes, from_be_bytes, to_be_bytes, from_ne_bytes kaj to_ne_bytes por ĉiuj entjeroj.
  • Aldonita subteno por generado de senmovaj bibliotekoj en ".a" formato anstataŭ ".lib" por GNU-platformoj en Vindozo.
  • La minimumaj postuloj por LLVM estis levitaj al LLVM-versio 8.

fonto: opennet.ru

Aldoni komenton