Bản phát hành ngôn ngữ lập trình Rust 1.42

được phát hành phát hành ngôn ngữ lập trình hệ thống Rỉ 1.42được thành lập bởi dự án Mozilla. Ngôn ngữ này tập trung vào quản lý bộ nhớ an toàn, cung cấp khả năng quản lý bộ nhớ tự động và cung cấp các phương tiện để đạt được tính song song công việc cao đồng thời tránh sử dụng trình thu gom rác và thời gian chạy.

Tính năng quản lý bộ nhớ tự động của Rust giải phóng nhà phát triển khỏi thao tác con trỏ và bảo vệ khỏi các vấn đề phát sinh từ thao tác bộ nhớ cấp thấp, chẳng hạn như truy cập bộ nhớ sau khi rảnh, hủy đăng ký con trỏ null, lỗi tràn bộ đệm, v.v. Một trình quản lý gói đang được phát triển để phân phối các thư viện, đảm bảo việc lắp ráp và quản lý các phần phụ thuộc của dự án. Cargo, cho phép bạn lấy các thư viện bạn cần cho chương trình chỉ bằng một cú nhấp chuột. Một kho lưu trữ được hỗ trợ cho các thư viện lưu trữ thùng.io.

Chính đổi mới:

  • Thêm поддержка шаблонов для сопоставления частей срезов (динамических массивов, slice). Если раньше допускались точные сопоставления, то теперь добавлена возможность использования конструкций с меткой «..» для охвата остающихся элементов массива. Например:

    fn foo(words: &[&str]) {
    match words {

    // проверяет начальные элементы массива с игнорированием
    следующих за ними элементов
    [«Hello», «World», «!», ..] => println!(«Hello World!»),

    // проверяет первые два элемента «Foo» и «Bar», а остальное не важно
    [«Foo», «Bar», ..] => println!(«Baz»),

    // игнорируем всё, но последний элемент должен быть «!».
    [.., «!»] => println!(«!!!»),

    // в срез start включаем всё, кроме последнего элемента, который должен быть «z»
    [start @ .., «z»] => println!(«starts with: {:?}», start),

    // в срез end помещаем всё, кроме первого элемента, который должен быть «a».
    [«a», end @ ..] => println!(«ends with: {:?}», end),

    rest => println!(«{:?}», rest),
    }
    }

  • Добавлен новый макрос «matches!», который принимает на входе выражение и шаблон, а возвращает «true», если шаблон соответствует выражению. В шаблоне возможно использование операций «|» и «if».

    match self.partial_cmp(other) {
    Some(Less) => true,
    _ => sai,
    }

    matches!(self.partial_cmp(other), Some(Less))

    let foo = ‘f’;
    assert!(matches!(foo, ‘A’..=’Z’ | ‘a’..=’z’));

    let bar = Some(4);
    assert!(matches!(bar, Some(x) if x > 2));

  • В panic-сообщениях, выводимых при некорректном использовании
    типов Option и Result, теперь отражаются номера строк со ссылкой на код, осуществивший проблемный вызов, а не ссылки на код реализации вызова в libcore. Например, изменение затрагивает вызов unwrap и expect над Option::None или сбои при использовании unwrap_err, expect, expect_err и подобных методов для типа Result.

  • В пакетном менеджере Cargo обеспечена автоматическая подстановка «proc_macro crate» в блок «extern» для пакетов с процедурными макросами. Данное изменение позволяет применять директиву «use» к процедурным макросам без необходимости указания в коде «extern crate proc_macro;». Например, если в программе используется строка «use proc_macro::TokenStream;», то код теперь останется рабочим, если из него удалить «extern crate proc_macro;».
  • Расширены возможности стандартной библиотеки. В iter::Empty<T> thêm поддержка Send и Sync для любых значений T.
    Вызовы Pin::{map_unchecked, map_unchecked_mut} đã giao hàng от необходимости возвращать значение типа для реализации «Sized».
    В io::Cursor thực hiện PartialEq и Eq. Признак «const», определяющий возможность использования в любом контексте вместо констант, применён для метода Layout::new.

  • В разряд стабильных переведена новая порция API, в том числе стабилизированы CondVar::wait_while, CondVar::wait_timeout_while,
    DebugMap::key, DebugMap::value,
    ManuallyDrop::take,
    ptr::slice_from_raw_parts_mut и ptr::slice_from_raw_parts.

  • Объявлен устаревшим метод Error::description.
  • Обеспечен в второй уровень поддержи для платформ armv7a-none-eabi и riscv64gc-unknown-linux-gnu. Обеспечена поддержка стандартной библиотеки для платформы riscv64gc-unknown-linux-gnu.
    32-разрядные платформы Apple понижены до третьего уровня поддержки, который подразумевает базовую поддержку, но без автоматизированного тестирования и публикации официальных сборок. Понижение уровня поддержки обусловлено прекращением сопровождения компанией Apple 32-разрядных платформ.

Nguồn: opennet.ru

Thêm một lời nhận xét