ืฉื—ืจื•ืจ ืฉืคืช ืชื›ื ื•ืช Rust 1.39

ื™ืฆื ืœืื•ืจ ืฉื—ืจื•ืจ ืฉืคืช ืชื›ื ื•ืช ืžืขืจื›ืช ื—ืœื•ื“ื” 1.39, ืฉื”ื•ืงืžื” ืขืœ ื™ื“ื™ ืคืจื•ื™ืงื˜ ืžื•ื–ื™ืœื”. ื”ืฉืคื” ืžืชืžืงื“ืช ื‘ื‘ื˜ื™ื—ื•ืช ื–ื™ื›ืจื•ืŸ, ืžืกืคืงืช ื ื™ื”ื•ืœ ื–ื™ื›ืจื•ืŸ ืื•ื˜ื•ืžื˜ื™, ื•ืžืกืคืงืช ืืžืฆืขื™ ืœื”ืฉื’ืช ืžืงื‘ื™ืœื™ื•ืช ื’ื‘ื•ื”ื” ืฉืœ ืžืฉื™ืžื•ืช ืœืœื ืฉื™ืžื•ืฉ ื‘ืื•ืกืฃ ืืฉืคื” ืื• ื–ืžืŸ ืจื™ืฆื”.

ื ื™ื”ื•ืœ ื”ื–ื™ื›ืจื•ืŸ ื”ืื•ื˜ื•ืžื˜ื™ ืฉืœ Rust ืžืฉื—ืจืจ ืืช ื”ืžืคืชื— ืžืžื ื™ืคื•ืœืฆื™ื” ืฉืœ ืžืฆื‘ื™ืขื™ื ื•ืžื’ืŸ ืžืคื ื™ ื‘ืขื™ื•ืช ื”ื ื•ื‘ืขื•ืช ืžืžื ื™ืคื•ืœืฆื™ื” ืฉืœ ื–ื™ื›ืจื•ืŸ ื‘ืจืžื” ื ืžื•ื›ื”, ื›ื’ื•ืŸ ื’ื™ืฉื” ื—ื•ืคืฉื™ืช ืœื–ื™ื›ืจื•ืŸ, ื”ืคื ื™ื™ืช ืžืฆื‘ื™ืข null, ื—ืจื™ื’ื•ืช ืžืื’ืจ ื•ื›ื“ื•ืžื”. ืžื ื”ืœ ื—ื‘ื™ืœื•ืช ืžืคื•ืชื— ืœื”ืคืฆืช ืกืคืจื™ื•ืช, ื”ื‘ื˜ื—ืช ื”ืจื›ื‘ื” ื•ื ื™ื”ื•ืœ ืชืœื•ืช ืขืœ ื™ื“ื™ ื”ืคืจื•ื™ืงื˜. ืžื˜ืขืŸ, ื”ืžืืคืฉืจ ืœืš ืœืงื‘ืœ ืืช ื”ืกืคืจื™ื•ืช ื”ื“ืจื•ืฉื•ืช ืœืชื•ื›ื ื™ืช ื‘ืœื—ื™ืฆื” ืื—ืช. ืžืื’ืจ ื ืชืžืš ื›ื“ื™ ืœืืจื— ืกืคืจื™ื•ืช crates.io.

ื”ืขื™ืงืจื™ ื—ื™ื“ื•ืฉื™ื:

  • ืžึฐื™ื•ึผืฆึธื‘ ืชื—ื‘ื™ืจ ืชื›ื ื•ืช ืืกื™ื ื›ืจื•ื ื™ ื—ื“ืฉ ื”ืžื‘ื•ืกืก ืขืœ ื”ืคื•ื ืงืฆื™ื” "async", ื”ื‘ืœื•ืง async move { ... } ื•ืื•ืคืจื˜ื•ืจ ".await", ืžื” ืฉืžืงืœ ืขืœ ื›ืชื™ื‘ืช ืžื˜ืคืœื™ื ืฉืื™ื ื ื—ื•ืกืžื™ื ืืช ื–ืจื™ืžืช ื”ืคืงื•ื“ื” ื”ืจืืฉื™ืช. ื‘ื”ืฉื•ื•ืื” ืœ-API ืฉื”ื•ืฆืข ื‘ืขื‘ืจ ืขื‘ื•ืจ I/O ืืกื™ื ื›ืจื•ื ื™, ืžื‘ื ื™ async/.await ื”ื ืคืฉื•ื˜ื™ื ืœื”ื‘ื ื”, ืงืจื™ืื™ื ืžืื•ื“, ื•ืžืืคืฉืจื™ื ืœืš ืœื™ื™ืฉื ืื™ื ื˜ืจืืงืฆื™ื•ืช ืืกื™ื ื›ืจื•ื ื™ื•ืช ืžื•ืจื›ื‘ื•ืช ื‘ืืžืฆืขื•ืช ื˜ื›ื ื™ืงื•ืช ื‘ืงืจืช ื–ืจื™ืžื” ืžื•ื›ืจื•ืช ื”ืžื‘ื•ืกืกื•ืช ืขืœ ืœื•ืœืื•ืช, ื”ืฆื”ืจื•ืช ืžื•ืชื ื•ืช ื•ื—ืจื™ื’ื™ื.

    ื”ืชื—ื‘ื™ืจ Async-await ืžืืคืฉืจ ืœืš ืœื™ืฆื•ืจ ืคื•ื ืงืฆื™ื•ืช ืฉื™ื›ื•ืœื•ืช ืœื”ืฉื”ื•ืช ืืช ื‘ื™ืฆื•ืขืŸ, ืœื”ื—ื–ื™ืจ ืืช ื”ืฉืœื™ื˜ื” ืœืฉืจืฉื•ืจ ื”ืจืืฉื™ ื•ืœืื—ืจ ืžื›ืŸ ืœื—ื“ืฉ ืืช ื”ื‘ื™ืฆื•ืข ืžื”ืžืงื•ื ืฉื‘ื• ื”ืคืกื™ืงื•. ืœื“ื•ื’ืžื”, ื”ืคืกืงื” ื›ื–ื• ื ื“ืจืฉืช ื‘ืขืช ืขื™ื‘ื•ื“ I/O, ืฉื‘ื” ื ื™ืชืŸ ืœื‘ืฆืข ืขื‘ื•ื“ื” ืื—ืจืช ืชื•ืš ื”ืžืชื ื” ืœืคื™ืกืช ื”ื ืชื•ื ื™ื ื”ื‘ืื” ืฉืชื’ื™ืข. ืคื•ื ืงืฆื™ื•ืช ื•ื‘ืœื•ืงื™ื ื”ืžื•ื’ื“ืจื™ื ืขื "async fn" ื•-"async move" ืžื—ื–ื™ืจื™ื ืชื›ื•ื ื” ืฉืœื ื•, ื”ืžื’ื“ื™ืจ ื™ื™ืฆื•ื’ ื—ื™ืฉื•ื‘ ืืกื™ื ื›ืจื•ื ื™ ื“ื—ื•ื™. ืืชื” ื™ื›ื•ืœ ืœื”ืชื—ื™ืœ ื™ืฉื™ืจื•ืช ื—ื™ืฉื•ื‘ ื“ื—ื•ื™ ื•ืœืงื‘ืœ ืืช ื”ืชื•ืฆืื” ื‘ืืžืฆืขื•ืช ื”ืื•ืคืจื˜ื•ืจ ".await". ืฉื•ื ืคืขื•ืœื” ืœื ืžืชื‘ืฆืขืช ืื• ืžืชื•ื›ื ื ืช ืžืจืืฉ ืขื“ ืฉื ืงืจื .await, ืžื” ืฉืžืืคืฉืจ ืœื™ืฆื•ืจ ืžื‘ื ื™ื ืžืงื•ื ื ื™ื ืžื•ืจื›ื‘ื™ื ืœืœื ืชืงื•ืจื” ื ื•ืกืคืช.

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

  • ืžึฐื™ื•ึผืฆึธื‘ "#![feature(bind_by_move_pattern_guards)]", ื”ืžืืคืฉืจ ืฉื™ืžื•ืฉ ื‘ืžืฉืชื ื™ื ืขื ืกื•ื’ ื”ืงื™ืฉื•ืจ "ืขืœ ื™ื“ื™ ืžื”ืœืš" ื‘ืชื‘ื ื™ื•ืช ื•ื”ืฉืชืžืฉ ื‘ื”ืคื ื™ื•ืช ืœืžืฉืชื ื™ื ืืœื” ื‘ืงื˜ืข "ืื" ืฉืœ ื”ื‘ื™ื˜ื•ื™ "ืœื”ืชืื™ื". ืœื“ื•ื’ืžื”, ื”ืงื•ื ืกื˜ืจื•ืงืฆื™ื•ืช ื”ื‘ืื•ืช ืžื•ืชืจื•ืช ื›ืขืช:

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

    ืœื”ืชืื™ื ืžืขืจืš {
    Nums
    if nums.iter().sum::() == 10

    => {
    drop(nums);
    }
    _ => ืœื ื ื™ืชืŸ ืœื”ื’ื™ืข!(),
    }
    }

  • ืื™ื ื“ื™ืงืฆื™ื” ืžื•ืชืจืช ืชื›ื•ื ื•ืช ื‘ืขืช ื”ื’ื“ืจืช ืคืจืžื˜ืจื™ื ืฉืœ ืคื•ื ืงืฆื™ื•ืช, ืกื’ื™ืจื•ืช ื•ืžืฆื‘ื™ืขื™ ืคื•ื ืงืฆื™ื”. ื ืชืžื›ื•ืช ืชื›ื•ื ื•ืช ืงื•ืžืคื™ืœืฆื™ื” ืžื•ืชื ื•ืช (cfg, cfg_attr) ื”ืฉื•ืœื˜ื•ืช ื‘ืื‘ื—ื•ืŸ ื‘ืืžืฆืขื•ืช ืžื•ืš (ืืคืฉืจ, ืื–ื”ืจื”, ื”ื›ื—ืฉื” ื•ืืกื•ืจ) ื•ืชื›ื•ื ื•ืช ืขื–ืจ ืœืฉื™ื—ื•ืช ืžืืงืจื•.

    fn len(
    #[cfg(windows)] slice: &[u16], // ื”ืฉืชืžืฉ ื‘ืคืจืžื˜ืจ ื‘-Windows
    #[cfg(not(windows))] ืคืจื•ืกื”: &[u8], // ื”ืฉืชืžืฉ ื‘ืžืขืจื›ืช ื”ืคืขืœื” ืื—ืจืช
    ) -> ื”ืฉืชืžืฉ ื‘-{
    slice.len()
    }

  • ืื–ื”ืจื•ืช ืœื’ื‘ื™ ื‘ืขื™ื•ืช ืฉื–ื•ื”ื• ื‘ืขืช ื‘ื“ื™ืงืช ื”ื”ืฉืืœื” ืฉืœ ืžืฉืชื ื™ื (ื‘ื•ื“ืง ื”ื”ืฉืืœื”) ื‘ืืžืฆืขื•ืช ื˜ื›ื ื™ืงืช ื”- NLL (Non-Lexical Lifetimes), ืžึฐืชื•ึผืจื’ึธื ืœืงื˜ื’ื•ืจื™ื” ืฉืœ ื˜ืขื•ื™ื•ืช ืงื˜ืœื ื™ื•ืช. ื”ื‘ื” ื ื–ื›ื™ืจ ืฉืžืขืจื›ืช ื”ืื™ืžื•ืช ื”ืžื‘ื•ืกืกืช ืขืœ ืžื ื’ื ื•ืŸ ื—ื“ืฉ ืœื”ืชื—ืฉื‘ื•ืช ืœืื•ืจืš ื”ื—ื™ื™ื ืฉืœ ืžืฉืชื ื™ื ืฉืื•ืœื™ื ืืคืฉืจื” ืœื–ื”ื•ืช ื›ืžื” ื‘ืขื™ื•ืช ืฉืœื ื”ื‘ื—ื™ื ื• ื‘ืงื•ื“ ื”ืื™ืžื•ืช ื”ื™ืฉืŸ. ืžื›ื™ื•ื•ืŸ ืฉืคืœื˜ ืฉื’ื™ืื” ืขื‘ื•ืจ ื‘ื“ื™ืงื•ืช ื›ืืœื” ืขืฉื•ื™ ืœื”ืฉืคื™ืข ืขืœ ืชืื™ืžื•ืช ืขื ืงื•ื“ ืฉืขื‘ื“ ื‘ืขื‘ืจ, ืื–ื”ืจื•ืช ื”ื•ืฆืื• ื‘ืชื—ื™ืœื” ื‘ืžืงื•ื ืฉื’ื™ืื•ืช. ืื–ื”ืจื•ืช ื”ื•ื—ืœืคื• ื›ืขืช ื‘ืฉื’ื™ืื•ืช ื‘ืขืช ื”ืคืขืœื” ื‘ืžืฆื‘ Rust 2018. ื‘ืžื”ื“ื•ืจื” ื”ื‘ืื”, ืคืœื˜ ืฉื’ื™ืื•ืช ื™ื•ื˜ืžืข ื’ื ื‘ืžืฆื‘ Rust 2015, ืžื” ืฉื™ื™ืคื˜ืจ ืกื•ืคื™ืช ืžื‘ื•ื“ืง ื”ื”ืฉืืœื” ื”ื™ืฉืŸ;
  • ื”ืชื›ื•ื ื” "const", ื”ืงื•ื‘ืขืช ืืช ื”ืืคืฉืจื•ืช ืœื”ืฉืชืžืฉ ื‘ื›ืœ ื”ืงืฉืจ ื‘ืžืงื•ื ื‘ืงื‘ื•ืขื™ื, ืžืฉืžืฉืช ืขื‘ื•ืจ ื”ืคื•ื ืงืฆื™ื•ืช Vec::new, String::new, LinkedList::new, str::len, [T]::len , str::as_bytes,
    ืฉืจื™ืจื™ ื‘ื˜ืŸ, ืขื˜ื™ืคืช_ื‘ื˜ืŸ ื•ื’ื‘ืฉื•ืฉื™ืช_ื‘ื˜ืŸ;

  • ื—ืœืง ื—ื“ืฉ ืฉืœ ืžืžืฉืงื™ API ื”ื•ืขื‘ืจ ืœืงื˜ื’ื•ืจื™ื™ืช ื”ื™ืฆื™ื‘ื•ืช, ื›ื•ืœืœ ืฉื™ื˜ื•ืช ืฉื™ื•ืฆื‘ื•
    ื”ืฆืžื“::into_inner, Instant::checked_duration_since ื•-Instant::saturating_duration_since;

  • ืœืžื ื”ืœ ื—ื‘ื™ืœื•ืช ื”ืžื˜ืขืŸ ื™ืฉ ื›ืขืช ืืช ื”ื™ื›ื•ืœืช ืœื”ืฉืชืžืฉ ื‘ืกื™ื•ืžืช ".toml" ืขื‘ื•ืจ ืงื•ื‘ืฆื™ ืชืฆื•ืจื”. ื ื•ืกืคื” ืชืžื™ื›ื” ืจืืฉื•ื ื™ืช ืœื‘ื ื™ื™ืช ื”ืกืคืจื™ื™ื” ื”ืกื˜ื ื“ืจื˜ื™ืช ื™ืฉื™ืจื•ืช ืž-Cargo. ื”ื•ืกื™ืฃ ืืช ื”ื“ื’ืœ "--workspace", ื‘ืžืงื•ื ื”ื“ื’ืœ ื”ืฉื ื•ื™ ื‘ืžื—ืœื•ืงืช "--all". ืฉื“ื” ื—ื“ืฉ ื ื•ืกืฃ ืœืžื˜ื ื ืชื•ื ื™ื "ืœืคืจืกื", ื”ืžืืคืฉืจ ืœืš ืœืคืจืกื ืชืœื•ืช ืขืœ ื™ื“ื™ ืฆื™ื•ืŸ ืชื’ git ื•ืžืกืคืจ ื’ืจืกื”. ื ื•ืกืคื” ืืคืฉืจื•ืช ื‘ื“ื™ืงื” "-Ztimings" ืœื”ืคืงืช ื“ื•ื— HTML ืฉืœ ื–ืžื ื™ ื”ื‘ื™ืฆื•ืข ืฉืœ ืฉืœื‘ื™ ืงื•ืžืคื™ืœืฆื™ื” ืฉื•ื ื™ื.
  • ื‘ืžื”ื“ืจ rustc, ื”ื•ื“ืขื•ืช ืื‘ื—ื•ืŸ ื›ื•ืœืœื•ืช ื—ื™ืชื•ืš ืฉืœ ื–ื ื‘ื•ืช ื”ืงื•ื“ ืฉืื™ื ื• ืžืชืื™ื ืœืžืกื•ืฃ. ืกื™ืคืงื” ืจืžื” ืฉืœื™ืฉื™ืช ืฉืœ ืชืžื™ื›ื” ืขื‘ื•ืจ ืคืœื˜ืคื•ืจืžื•ืช ื™ืขื“
    i686-unknown-uefi ื•-sparc64-unknown-openbsd. ื”ืจืžื” ื”ืฉืœื™ืฉื™ืช ื›ื•ืœืœืช ืชืžื™ื›ื” ื‘ืกื™ืกื™ืช, ืืš ืœืœื ื‘ื“ื™ืงื•ืช ืื•ื˜ื•ืžื˜ื™ื•ืช ื•ืคืจืกื•ื ืฉืœ ืžื‘ื ื™ื ืจืฉืžื™ื™ื.

ืžืงื•ืจ: OpenNet.ru

ื”ื•ืกืคืช ืชื’ื•ื‘ื”