Rust 1.42 Programlingvo-Eldono

eldonita eldono de la sistemo de programlingvo Rusto 1.42, 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 liberigas la ellaboranton de montrilo-manipulado kaj protektas kontraŭ problemoj ekestiĝantaj de malaltnivela memormanipulado, kiel ekzemple post-liberaj memoraliroj, nulaj montriloj dereferences, bufrotranspaso, kaj similaĵo. 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.

Ĉefa novigoj:

  • Aldonita subteno por ŝablonoj por kongrui partoj de tranĉaĵoj (dinamikaj tabeloj, tranĉaĵo). Antaŭe, ekzaktaj kongruoj estis permesitaj, sed nun eblas uzi konstruaĵojn markitajn ".." por kovri la ceterajn elementojn de la tabelo. Ekzemple:

    fn foo(vortoj: &[&str]) {
    kongrui vortojn {

    // kontrolas la komencajn elementojn de la tabelo kaj ignoras
    elementoj sekvante ilin
    ["Saluton", "Mondo", "!", ..] => println!("Saluton Mondo!"),

    // kontrolas la unuajn du elementojn "Foo" kaj "Bar", kaj la resto ne gravas
    ["Foo", "Bar", ..] => println!("Baz"),

    // ignoras ĉion, sed la lasta elemento devas esti "!".
    [.., “!”] => println!(“!!!”),

    // en la komenca tranĉaĵo ni inkluzivas ĉion krom la lasta elemento, kiu devus esti "z"
    [komenco @ .., "z"] => println!("komencas per: {:?}", komenci),

    // en la fina tranĉaĵo ni metas ĉion krom la unua elemento, kiu devus esti “a”.
    ["a", end @ ..] => println!("finiĝas per: {:?}", fino),

    rest => println!("{:?}", rest),
    }
    }

  • Aldonis novan makroon "kongruas!", kiu prenas esprimon kaj ŝablonon kiel enigaĵon, kaj resendas "vera" se la ŝablono kongruas kun la esprimo. La ŝablono povas uzi “|” operaciojn kaj "se".

    match self.partial_cmp(alia) {
    Kelkaj (Malpli) => vera,
    _ => malvera,
    }

    kongruas!(self.partial_cmp(alia), Kelkaj(Malpli))

    let foo = 'f';
    aserti!(kongruas!(foo, ‘A’..=’Z’ | ‘a’..=’z’));

    lasu trinkejon = Iu (4);
    aserti!(kongruas!(stango, Iu(x) se x > 2));

  • En paniko mesaĝoj montritaj kiam uzata malĝuste
    tipoj Opcio kaj Rezulto, nun montru linionumeroj kun ligo al la kodo kiu faris la probleman vokon, prefere ol ligiloj al la kodo efektiviganta la vokon en libcore. Ekzemple, la ŝanĝo influas vokojn por malvolvi kaj atendi super Option::None, aŭ kraŝas kiam oni uzas unwrap_err, expect, expect_err kaj similajn metodojn sur la Result-tipo.

  • La Cargo-pakaĵmanaĝero disponigas aŭtomatan anstataŭigon de "proc_macro crate" en la "eksteran" blokon por pakaĵoj kun proceduraj makrooj. Ĉi tiu ŝanĝo permesas la "uzon" direktivon esti aplikita al proceduraj makrooj sen devi specifi "eksteran keston proc_macro;" en la kodo. Ekzemple, se la programo uzas la linion "use proc_macro::TokenStream;", tiam la kodo nun restos funkcianta se "extern crate proc_macro;" estas forigita de ĝi.
  • La kapabloj de la norma biblioteko estis vastigitaj. En iter::Malplena aldonis Sendu kaj Sinkronigi subtenon por iuj T-valoroj.
    Vokoj Pin::{map_unchecked, map_unchecked_mut} liverita de devi redoni tipvaloron por la "Sized" efektivigo.
    En io::Kursoro efektivigita PartaEq kaj Eq. La atributo "const" determinas la eblecon de uzo en iu ajn kunteksto anstataŭ konstantoj, aplikita por la Layout::nova metodo.

  • Nova parto de la API estis translokigita al la stabila kategorio, inkluzive de la stabiligita CondVar::wait_while, CondVar::wait_timeout_while,
    DebugMap::ŝlosilo, DebugMap::valoro,
    ManeFaligi::prenu,
    ptr::slice_from_raw_parts_mut kaj ptr::slice_from_raw_parts.

  • La metodo Error::priskribo estas malrekomendita.
  • Provizita duanivela subteno por armv7a-none-eabi kaj riscv64gc-unknown-linux-gnu platformoj. Subteno por la norma biblioteko por la platformo riscv64gc-unknown-linux-gnu estis provizita.
    Apple 32-bitaj platformoj degradita ĝis la tria nivelo de subteno, kiu implicas bazan subtenon, sed sen aŭtomatigita testado kaj publikigo de oficialaj konstruoj. La malaltiĝo en subteno ŝuldiĝas al Apple ne plu subtenas 32-bitajn platformojn.

fonto: opennet.ru

Aldoni komenton