Новости и события » Hi-Tech » Выпуск языка программирования Rust 1.33

Выпуск языка программирования Rust 1.33

Состоялся релиз языка системного программирования Rust 1.33, развиваемого проектом Mozilla. Язык сфокусирован на безопасной работе с памятью, обеспечивает автоматическое управление памятью и предоставляет средства для достижения высокого параллелизма выполнения заданий, при этом обходясь без использования сборщика мусора и runtime.

Автоматическое управление памятью в Rust избавляет разработчика от манипулирования указателями и защищает от проблем, возникающих из-за низкоуровневой работы с памятью, таких как обращение к области памяти после ее освобождения, разыменование нулевых указателей, выход за границы буфера и т. п. Для распространения библиотек, обеспечения сборки и управления зависимостями проектом развивается пакетный менеджер Cargo, позволяющий получить нужные для программы библиотеки в один клик. Для размещения библиотек поддерживается репозиторий crates.io.

В подготовке нового выпуска приняли участие 163 разработчика. Основные новшества:

  • Расширены возможности функций, определенных с использованием выражения "const fn". Функции, определенные через "const fn", могут вызываться не только как обычные функции, но и использоваться в любом контексте вместо констант. Данные функции вычисляются на этапе компиляции, а не в ходе выполнения, поэтому на них накладываются определенные ограничения, такие как запрет булевых операторов ("&&" и "||") и возможность чтение только из констант.

    В новом выпуске добавлена возможность вызова функций, определенных через выражение "const unsafe" (ранее допускался только вызов функций, определенных через "const fn"). Также обеспечена поддержка инициализированных константами присвоений let (например, "let mut x = 1" и "let mut x = 1"), явно типизированных шаблонов вида "const fn foo((x, y): (u8, u8)) {... }", операторов присвоения ("x=y" и "x += y") и обособленных выражений (например, "3;")

    Указанные изменения позволили применить признак "const" для многих функций и методов стандартной библиотеки, включая overflowing_{add, sub, mul, shl, shr}, rotate_left, rotate_right, wrapping_{add, sub, mul, shl, shr}, is_positive, is_negative, get, count_ones, count_zeros, leading_zeros, trailing_zeros, swap_bytes, from_be, from_le, to_be, to_le и Ipv4Addr::new;
  • Представлена концепция закрепления объектов в определенной области памяти (Pinning), основанная на использовании типа std::pin::Pin&8249;P&8250; и типажа (trait) std::marker::Unpin. Закрепление гарантирует, что объекты не будут перемещены и их размещение в памяти будет постоянным.
  • Добавлена возможность импортирования элементов как "_, что позволяет импортировать реализации (impl) без определения отдельного имени в пространстве имен. Например "use std::io::Read as _;"
  • В разряд стабильных переведена новая порция API, в том числе стабилизированы методы unix::FileExt::read_exact_at, unix::FileExt::write_all_at, Option::transpose, Result::transpose, convert::identity, pin::Pin, marker::Unpin, marker::PhantomPinned, Vec::resize_with, VecDeque::resize_with, Duration::as_millis, Duration::as_micros и Duration::as_nanos;
  • В пакетный менеджер Cargo добавлена поддержка пересборки пакетов (crate) в случает изменения файла во время начальной сборки.
  • В репозитории Crates.io для публикации новых пакетов теперь обязательно требуется подтверждение своего email.

Свежие новости Украины на сегодня и последние события в мире экономики и политики, культуры и спорта, технологий, здоровья, происшествий, авто и мото

Вверх