Rust 1.39 Programming Language Release

gepubliseer stelsel programmeertaal vrystelling Roes 1.39, gestig deur die Mozilla-projek. Die taal fokus op geheueveiligheid, verskaf outomatiese geheuebestuur en bied 'n manier om hoΓ« taakparallelisme te bereik sonder om 'n vullisverwyderaar of looptyd te gebruik.

Rust se outomatiese geheuebestuur spaar die ontwikkelaar daarvan om wysers te manipuleer en beskerm teen probleme wat voortspruit uit laevlakgeheuemanipulasie, soos om toegang tot 'n geheuearea te kry nadat dit vrygestel is, die herkenning van nulwysers, bufferoorskryding, ens. Om biblioteke te versprei, samestelling te verseker en afhanklikhede te bestuur, ontwikkel die projek 'n pakketbestuurder Cargo, wat jou in staat stel om die biblioteke wat jy nodig het vir die program in een klik te kry. 'n Bewaarplek word ondersteun om biblioteke te huisves kratte.io.

Die belangrikste innovasies:

  • Π‘Ρ‚Π°Π±ΠΈΠ»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ Π½ΠΎΠ²Ρ‹ΠΉ синтаксис асинхронного программирования, основанный Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Β«asyncΒ», Π±Π»ΠΎΠΊΠ΅ async move { … } ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ Β«.awaitΒ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΏΡ€ΠΎΡ‰Π°ΡŽΡ‚ написаниС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², Π½Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… основной ΠΏΠΎΡ‚ΠΎΠΊ ΠΊΠΎΠΌΠ°Π½Π΄. По ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Ρ€Π°Π½Π΅Π΅ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π²ΡˆΠΈΠΌΡΡ API для асинхронного Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π° конструкции async/.await просты для восприятия, Ρ…ΠΎΡ€ΠΎΡˆΠΎ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ слоТныС асинхронныС взаимодСйствия с использованиСм ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΈΡ‘ΠΌΠΎΠ² управлСния ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ выполнСния Π½Π° основС Ρ†ΠΈΠΊΠ»ΠΎΠ², условных ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ.

    Бинтаксис Async-await позволяСт ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ своё Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² основной ΠΏΠΎΡ‚ΠΎΠΊ, Π° Π·Π°Ρ‚Π΅ΠΌ Π²ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ с Ρ‚ΠΎΠ³ΠΎ мСста, Π³Π΄Π΅ ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ остановлСны. НапримСр, подобная приостановка вострСбована ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π²ΠΎ врСмя оТидания поступлСния ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ ΠΏΠΎΡ€Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Π±Π»ΠΎΠΊΠΈ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Π΅ Ρ‡Π΅Ρ€Π΅Π· Β«async fnΒ» ΠΈ Β«async moveΒ», Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ Ρ‚ΠΈΠΏΠ°ΠΆ toekomstige, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠΉ прСдставлСниС ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ Π½Π° Π±ΡƒΠ΄ΡƒΡ‰Π΅Π΅ асинхронного вычислСния. НСпосрСдствСнно ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ΅ вычислСниС ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° Β«.awaitΒ». Π”ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° Β«.awaitΒ» Π½ΠΈΠΊΠ°ΠΊΠΈΡ… дСйствий Π½Π΅ производится ΠΈ Π½Π΅ планируСтся Π·Π°Ρ€Π°Π½Π΅Π΅, Ρ‡Ρ‚ΠΎ позволяСт ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ слоТныС Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ конструкции Π±Π΅Π· Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Ρ… расходов.

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

  • Π‘Ρ‚Π°Π±ΠΈΠ»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ Β«#![feature(bind_by_move_pattern_guards)]Β», ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ с Ρ‚ΠΈΠΏΠΎΠΌ привязки Β«by-moveΒ» Π² ΡˆΠ°Π±Π»ΠΎΠ½Π°Ρ… ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ссылки Π½Π° эти ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π² сСкции Β«ifΒ» выраТСния Β«ooreenstem metΒ«. НапримСр, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ допустимы ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ конструкции:

    fn hoof() {
    let array: Box<[u8; 4]> = Box::new([1, 2, 3, 4]);

    match array {
    getalle
    if nums.iter().sum::() == 10

    => {
    drop(nums);
    }
    _ => unreachable!(),
    }
    }

  • Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ eienskappe ΠΏΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠΉ ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ условной компиляции (cfg, cfg_attr), ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ диагностикой Ρ‡Π΅Ρ€Π΅Π· lint (allow, warn, deny ΠΈ forbid) ΠΈ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ Π²Ρ‹Π·ΠΎΠ²Π° макросов.

    fn len(
    #[cfg(windows)] slice: &[u16], // ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π² Windows
    #[cfg(not(windows))] slice: &[u8], // ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… ОБ
    ) -> usize {
    slice.len()
    }

  • ΠŸΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΡ ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ…, выявлСнных ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ заимствования ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… (borrow checker) c использованиСм Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΈ NLL (Non-Lexical Lifetimes), vertaal Π² разряд Ρ„Π°Ρ‚Π°Π»ΡŒΠ½Ρ‹Ρ… ошибок. Напомним, Ρ‡Ρ‚ΠΎ систСма ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π° основС Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° ΡƒΡ‡Ρ‘Ρ‚Π° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΆΠΈΠ·Π½ΠΈ заимствованных ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π΄Π°Π»Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹ΡΠ²Π»ΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡΡ‚Π°Π²Π°Π»ΠΈΡΡŒ Π½Π΅Π·Π°ΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹ΠΌΠΈ старым ΠΊΠΎΠ΄ΠΎΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ. Π’Π°ΠΊ ΠΊΠ°ΠΊ Π²Ρ‹Π²ΠΎΠ΄ ошибки для ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ ΠΌΠΎΠ³ ΠΏΠΎΠ²Π»ΠΈΡΡ‚ΡŒ Π½Π° ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ с Ρ€Π°Π½Π΅Π΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ, вмСсто ошибок ΠΏΠ΅Ρ€Π²ΠΎΠ΅ врСмя Π²Ρ‹Π΄Π°Π²Π°Π»ΠΈΡΡŒ прСдупрСТдСния. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Rust 2018 прСдупрСТдСния Π·Π°ΠΌΠ΅Π½Π΅Π½Ρ‹ Π½Π° ошибки. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ выпускС Π²Ρ‹Π²ΠΎΠ΄ ошибки Ρ‚Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Rust 2015, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ старого borrow checker;
  • ΠŸΡ€ΠΈΠ·Π½Π°ΠΊ Β«constΒ», ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ использования Π² любом контСкстС вмСсто констант, ΠΏΡ€ΠΈΠΌΠ΅Π½Ρ‘Π½ для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Vec::new, String::new, LinkedList::new, str::len, [T]::len, str::as_bytes,
    abs, wrapping_abs ΠΈ overflowing_abs;

  • 'n Nuwe gedeelte van API's is na die stabiele kategorie oorgeplaas, insluitend metodes wat gestabiliseer is
    Pin::into_inner, Instant::checked_duration_since ΠΈ Instant::saturating_duration_since;

  • Π’ ΠΏΠ°ΠΊΠ΅Ρ‚Π½Ρ‹ΠΉ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ cargo Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ использования для Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Β«.tomlΒ». Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° сборки стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ нСпосрСдствСнно ΠΈΠ· Cargo. Π”ΠΎΠ±Π°Π²Π»Π΅Π½ Ρ„Π»Π°Π³ Β«β€”workspaceΒ», замСнивший Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎ воспринимаСмый Ρ„Π»Π°Π³ Β«β€”allΒ». Π’ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ Π½ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅ Β«publiseerΒ«, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅Π΅ ΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ зависимости, указывая Ρ‚Π΅Π³ Π² git ΠΈ Π½ΠΎΠΌΠ΅Ρ€ вСрсии. Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° тСстовая опция Β«-ZtimingsΒ» для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ HTML-ΠΎΡ‚Ρ‡Π΅Ρ‚Π° ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… стадий компиляции.
  • Π’ компиляторС rustc Π² диагностичСских сообщСниях Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ ΠΎΠ±Ρ€Π΅Π·Π°Π½ΠΈΠ΅ хвостов ΠΊΠΎΠ΄Π°, Π½Π΅ ΡƒΠΌΠ΅Ρ‰Π°ΡŽΡ‰Π΅Π³ΠΎΡΡ Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π». ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡Π΅Π½ Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Ρ†Π΅Π»Π΅Π²Ρ‹Ρ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ
    i686-unknown-uefi ΠΈ sparc64-unknown-openbsd. Π’Ρ€Π΅Ρ‚ΠΈΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ Π±Π°Π·ΠΎΠ²ΡƒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ, Π½ΠΎ Π±Π΅Π· Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ тСстирования ΠΈ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… сборок.

Bron: opennet.ru

Voeg 'n opmerking