Rust 1.39 programmēšanas valodas izlaidums

publicēts sistēmas programmēšanas valodas izlaidums 1.39. rūsa, ko dibināja Mozilla projekts. Valoda koncentrējas uz atmiņas drošību, nodrošina automātisku atmiņas pārvaldību un nodrošina iespēju sasniegt augstu uzdevumu paralēlismu, neizmantojot atkritumu savācēju vai izpildlaiku.

Rust automātiskā atmiņas pārvaldība atbrīvo izstrādātāju no manipulācijām ar rādītāju un aizsargā pret problēmām, kas rodas no zema līmeņa atmiņas manipulācijām, piemēram, pēc brīvas piekļuves atmiņai, nulles rādītāja atsauču, bufera pārtēriņu un tamlīdzīgi. Tiek izstrādāts pakotņu pārvaldnieks, lai izplatītu bibliotēkas, nodrošinātu montāžu un pārvaldītu projekta atkarības. krava, kas ļauj ar vienu klikšķi iegūt programmai nepieciešamās bibliotēkas. Repozitorijs tiek atbalstīts bibliotēku mitināšanai crates.io.

Galvenais jauninājumiem:

  • Stabilizēts jauna asinhronās programmēšanas sintakse, kuras pamatā ir funkcija "async", bloks async move { ... } un operators ".await", kas atvieglo apdarinātāju rakstīšanu, kas nebloķē galveno komandu plūsmu. Salīdzinot ar iepriekš piedāvāto API asinhronai ievadei/izvadīšanai, async/.await konstrukcijas ir vienkārši saprotamas, labi lasāmas un ļauj īstenot sarežģītas asinhronas mijiedarbības, izmantojot pazīstamas plūsmas kontroles metodes, kuru pamatā ir cilpas, nosacījuma paziņojumi un izņēmumi.

    Async-await sintakse ļauj izveidot funkcijas, kas var apturēt to izpildi, atgriezt vadību galvenajā pavedienā un pēc tam atsākt izpildi no vietas, kur tās tika pārtrauktas. Piemēram, šāda pauze ir nepieciešama, apstrādājot I/O, kurā var veikt citus darbus, gaidot nākamo datu pienākšanu. Funkcijas un bloki, kas definēti ar "async fn" un "async move", atgriež pazīmi Nākotne, kas definē atlikto asinhrono aprēķinu attēlojumu. Varat tieši uzsākt atlikto aprēķinu un iegūt rezultātu, izmantojot operatoru “.await”. Neviena darbība netiek veikta vai iepriekš plānota, kamēr nav izsaukts .await, kas ļauj izveidot sarežģītas ligzdotas konstrukcijas bez papildu izmaksām.

    async fn first_function() -> u32 { .. }
    ...
    let future = first_function();
    ...
    let rezultāts: u32 = future.await;

  • Stabilizēts "#![feature(bind_by_move_pattern_guards)]", kas ļauj izmantot mainīgos ar saistīšanas veidu "pa gājienu" veidnēs un izmantojiet atsauces uz šiem mainīgajiem izteiksmes sadaļā "ja"spēles". Piemēram, tagad ir atļautas šādas konstrukcijas:

    fn galvenais() {
    let masīvs: Box<[u8; 4]> = Kaste::jauns([1, 2, 3, 4]);

    atbilst masīva {
    summas
    ja skaitļi.iter().sum::() == 10

    => {
    piliens(nums);
    }
    _ => nesasniedzams!(),
    }
    }

  • Indikācija atļauta atribūti definējot funkciju parametrus, aizvērumus un funkciju norādes. Tiek atbalstīti nosacījuma kompilācijas atribūti (cfg, cfg_attr), kas kontrolē diagnostiku, izmantojot lint (atļaut, brīdināt, liegt un aizliegt), un papildu makro izsaukšanas atribūti.

    fn len(
    #[cfg(windows)] šķēle: &[u16], // izmantojiet parametru operētājsistēmā Windows
    #[cfg(not(windows))] šķēle: &[u8], // izmantot citās OS
    ) -> izmantot {
    šķēle.len()
    }

  • Brīdinājumi par problēmām, kas konstatētas, pārbaudot mainīgo lielumu aizņemšanos (aizņēmuma pārbaudītājs), izmantojot NLL (Non-Lexical Lifetimes) tehniku, tulkots liktenīgo kļūdu kategorijā. Atgādināsim, ka verifikācijas sistēma, kas balstīta uz jaunu mehānismu aizņemto mainīgo lielumu dzīves ilguma ņemšanai vērā, ļāva identificēt dažas problēmas, kuras nepamanīja vecais verifikācijas kods. Tā kā kļūdu izvade šādām pārbaudēm var ietekmēt saderību ar iepriekš darbojošos kodu, kļūdu vietā sākotnēji tika izdoti brīdinājumi. Brīdinājumi tagad ir aizstāti ar kļūdām, darbojoties Rust 2018 režīmā. Nākamajā laidienā kļūdu izvade tiks ieviesta arī Rust 2015 režīmā, kas beidzot atbrīvosies no vecā aizņēmuma pārbaudītāja;
  • Funkcijām Vec::new, String::new, LinkedList::new, str::len, [T]::len tiek izmantots atribūts “const”, kas nosaka lietošanas iespēju jebkurā kontekstā konstantu vietā. , str::as_baiti,
    abs, wrapping_abs un overflowing_abs;

  • Jauna API daļa ir pārvietota uz stabilo kategoriju, tostarp metodes, kas ir stabilizētas
    Pin::into_inner, Instant::checked_duration_since un Instant::saturating_duration_since;

  • Kravas pakotnes pārvaldniekam tagad ir iespēja konfigurācijas failiem izmantot paplašinājumu “.toml”. Pievienots sākotnējais atbalsts standarta bibliotēkas izveidei tieši no Cargo. Pievienots karodziņš "--workspace", aizstājot strīdīgo karogu "--all". Metadatiem ir pievienots jauns lauks "publicēt“, kas ļauj publicēt atkarības, norādot git tagu un versijas numuru. Pievienota testa opcija "-Ztimings", lai ģenerētu HTML atskaiti par dažādu kompilācijas posmu izpildes laikiem.
  • Rustc kompilatorā diagnostikas ziņojumi ietver terminālī neiederīgā koda apcirpšanu. Nodrošināts trešā līmeņa atbalsts mērķa platformām
    i686-unknown-uefi un sparc64-unknown-openbsd. Trešais līmenis ietver pamata atbalstu, taču bez automatizētas testēšanas un oficiālo būvējumu publicēšanas.

Avots: opennet.ru

Pievieno komentāru