Rust 1.39 Programlingvo-Eldono

eldonita eldono de la sistemo de programlingvo Rusto 1.39, fondita de la projekto Mozilla. La lingvo temigas memorsekurecon, disponigas aŭtomatan memoradministradon, kaj disponigas rimedon por atingi altan taskan paralelecon sen uzado de rubkolektanto aŭ 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:

  • Stabiligita nova nesinkrona programa sintakso bazita sur la funkcio "async", la nesinkrona movo { ... } bloko, kaj la ".await" operatoro, kiu faciligas skribi pritraktilojn kiuj ne blokas la ĉefan komandfluon. Kompare al la antaŭe ofertita API por nesinkrona I/O, async/.await-konstruaĵoj estas simplaj kompreneblaj, tre legeblaj, kaj ebligas al vi efektivigi kompleksajn nesinkronajn interagojn uzante konatajn flukontrolteknikojn bazitajn sur bukloj, kondiĉaj deklaroj kaj esceptoj.

    La sintakso Async-wait permesas krei funkciojn, kiuj povas paŭzi ilian ekzekuton, redoni kontrolon al la ĉefa fadeno, kaj poste rekomenci ekzekuton de kie ili ĉesis. Ekzemple, tia paŭzo estas postulata dum prilaborado de I/O, en kiu alia laboro povas esti farita atendante la venontan datumon alveni. Funkcioj kaj blokoj difinitaj per "async fn" kaj "sensinkroniga movo" redonas trajton estontaj, kiu difinas prokrastita nesinkrona komputada reprezentado. Vi povas rekte komenci prokrastitan kalkulon kaj akiri la rezulton per la ".wait" operatoro. Neniu ago estas farita aŭ antaŭplanita ĝis .await estas vokita, permesante kompleksajn nestitajn konstrukciojn esti kreitaj sen plia ŝarĝo.

    nesinkrona fn unua_funkcio () -> u32 { .. }
    ...
    lasu estonteco = unua_funkcio();
    ...
    lasu rezulton: u32 = estonteco.atendu;

  • Stabiligita "#![feature(bind_by_move_pattern_guards)]", permesante la uzon de variabloj kun la liga tipo "per-movo" en ŝablonoj kaj uzu referencojn al ĉi tiuj variabloj en la sekcio "se" de la esprimo "matĉo". Ekzemple, la sekvaj konstruoj nun estas permesitaj:

    fn ĉefa () {
    lasu tabelon: Box<[u8; 4]> = Box::new([1, 2, 3, 4]);

    kongrua tabelo {
    nombroj
    se nums.iter().sum::() == 10

    => {
    faligi (nombroj);
    }
    _ => neatingebla!(),
    }
    }

  • Indiko permesita atributoj dum difinado de funkcioparametroj, fermoj kaj funkciomontriloj. Kondiĉaj kompilaj atributoj (cfg, cfg_attr) kiuj kontrolas diagnozon per lint (permesi, averti, nei kaj malpermesas) kaj helpaj makrovokaj atributoj estas subtenataj.

    fn len(
    #[cfg(fenestroj)] tranĉaĵo: &[u16], // uzu la parametron en Vindozo
    #[cfg(ne(fenestroj))] tranĉaĵo: &[u8], // uzu en alia OS
    ) -> uzu {
    tranĉaĵo.len()
    }

  • Avertoj pri problemoj identigitaj dum kontrolado de la prunto de variabloj (pruntkontrolilo) uzante la teknikon NLL (Ne-Leksikaj Vivdaŭroj), tradukita en la kategorion de fatalaj eraroj. Ni rememoru, ke la kontrola sistemo bazita sur nova mekanismo por konsideri la vivdaŭron de pruntitaj variabloj ebligis identigi iujn problemojn, kiuj estis nerimarkitaj de la malnova kontrola kodo. Ĉar erarproduktaĵo por tiaj ĉekoj povus influi kongruecon kun antaŭe funkcianta kodo, avertoj estis komence eligitaj anstataŭe de eraroj. Avertoj nun estis anstataŭigitaj per eraroj dum funkciado en Rust 2018-reĝimo. En la venonta eldono, erara eligo ankaŭ estos efektivigita en Rust 2015-reĝimo, kiu finfine forigos la malnovan pruntkontrolilon;
  • La atributo "const", kiu determinas la eblecon uzi en iu ajn kunteksto anstataŭ konstantojn, estas uzata por la funkcioj Vec::new, String::new, LinkedList::new, str::len, [T]::len , str::as_bajtoj,
    abs, wrapping_abs kaj overflowing_abs;

  • Nova parto de APIoj estis translokigita al la stabila kategorio, inkluzive de metodoj, kiuj estis stabiligitaj
    Pin::into_inner, Instant::checked_duration_since kaj Instant::saturating_duration_since;

  • La administranto de ŝarĝpakaĵoj nun havas la kapablon uzi la etendon ".toml" por agordaj dosieroj. Aldonita prepara subteno por konstruado de la norma biblioteko rekte de Cargo. Aldonis la flagon "--workspace", anstataŭigante la polemikan flagon "--all". Nova kampo estis aldonita al la metadatenoj "eldoni", kiu ebligas al vi publikigi dependecojn per specifo de git-etikedo kaj versio-numero. Aldonita testa opcio "-Ztimings" por generi HTML-raporton pri la ekzekuttempoj de diversaj kompilfazoj.
  • En la rustc-kompililo, diagnozaj mesaĝoj inkluzivas tranĉi la vostojn de kodo, kiu ne konvenas en la terminalon. Disponigis trian nivelon de subteno por celplatformoj
    i686-unknown-uefi kaj sparc64-unknown-openbsd. La tria nivelo implikas bazan subtenon, sed sen aŭtomatigita testado kaj publikigo de oficialaj konstruoj.

fonto: opennet.ru

Aldoni komenton