Rust 1.39 Famoahana ny fiteny fandaharana

MIVOAKA famotsorana ny fiteny fandaharana amin'ny rafitra Harafesina 1.39, naorin'ny tetikasa Mozilla. Mifantoka amin'ny fiarovana ny fitadidiana ilay fiteny, manome fitantanana fitadidiana mandeha ho azy, ary manome fitaovana hanatrarana ny fitovizan'asa avo lenta nefa tsy mampiasa mpanangom-pako na fotoana fiasana.

Ny fitantanana fahatsiarovana mandeha ho azy an'i Rust dia manafaka ny mpamorona amin'ny fanodinkodinana pointer ary miaro amin'ny olana ateraky ny fanodinkodinana fahatsiarovana ambany, toy ny fidirana tsy misy fitadidiana aorian'ny fahatsiarovan-tena, ny tsy fahampian'ny pointer tsy misy dikany, ny fihoaran'ny buffer, sy ny toy izany. Misy mpitantana fonosana novolavolaina mba hizarana tranomboky, hiantohana ny fivoriambe ary hitantanana ny fiankinan-doha amin'ny tetikasa. entana, ahafahanao mahazo ny tranomboky ilaina amin'ny programa amin'ny tsindry iray. Misy tahiry iray tohanana mba hampiantranoana tranomboky crates.io.

tena fanavaozana:

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

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

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

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

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

  • Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ toetra ΠΏΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠΉ ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ условной компиляции (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), nandika Π² разряд Ρ„Π°Ρ‚Π°Π»ΡŒΠ½Ρ‹Ρ… ошибок. Напомним, Ρ‡Ρ‚ΠΎ систСма ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π° основС Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° ΡƒΡ‡Ρ‘Ρ‚Π° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΆΠΈΠ·Π½ΠΈ заимствованных ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π΄Π°Π»Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹ΡΠ²Π»ΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡΡ‚Π°Π²Π°Π»ΠΈΡΡŒ Π½Π΅Π·Π°ΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹ΠΌΠΈ старым ΠΊΠΎΠ΄ΠΎΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ. Π’Π°ΠΊ ΠΊΠ°ΠΊ Π²Ρ‹Π²ΠΎΠ΄ ошибки для ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ ΠΌΠΎΠ³ ΠΏΠΎΠ²Π»ΠΈΡΡ‚ΡŒ Π½Π° ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ с Ρ€Π°Π½Π΅Π΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ, вмСсто ошибок ΠΏΠ΅Ρ€Π²ΠΎΠ΅ врСмя Π²Ρ‹Π΄Π°Π²Π°Π»ΠΈΡΡŒ прСдупрСТдСния. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ 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;

  • Ampahany vaovao amin'ny API no nafindra ho amin'ny sokajy stable, ao anatin'izany ny fomba niorina
    Pin::into_inner, Instant::checked_duration_since ΠΈ Instant::saturating_duration_since;

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

Source: opennet.ru

Add a comment