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

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

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

Основные новшества:

  • Типажи (trait) FnOnce, FnMut и Fn реализованы для размещаемых в куче boxed-типов Box‹dyn FnOnce›, Box‹dyn FnMut› и Box‹dyn Fn›;
  • Добавлена возможность приведения замыканий к небезопасным указателям на функции (unsafe fn);
  • Реализована возможность вызова макроса «dbg!» без аргументов для отображения в stderr имени файла и номера строки без инспектирования переменной, что удобно для отладки срабатывания условных выражений;
  • В типы для чисел с плавающей запятой f32 и f64 добавлен метод «copysign» для копирования знака из одного числа в другое;
  • В типы Range* добавлен метод «contains», позволяющий проверить попадание указанного значения в диапазон;
  • Добавлен метод Ref: Cell: map_split, позволяющие отразить и разделить заимствованное значение RefCell для разных компонентов заимствованных данных;
  • Добавлен метод RefCell: replace_with для замены текущего значения RefCell и возвращения старого значения в качестве результата;
  • Добавлен метод ptr: hash для хэширования указателя или ссылки по адресу, а не адресуемому значению;
  • Добавлен метод Option: copied для копирования содержимого опций Option‹&T› или Option‹&mut T›;
  • В разряд стабильных переведена новая порция API, в том числе стабилизированы методы f32:: copysign, f64:: copysign, RefCell: replace_with, RefCell: map_split, ptr: hash, Range: contains, RangeFrom: contains, RangeTo: contains, RangeInclusive: contains, RangeToInclusive: contains и Option: copied;
  • В clippy (linter) добавлена проверка drop_bounds, срабатывающая при добавлении привязки «T: Drop» в функцию;
  • В компилятор добавлена поддержка новой целевой платформы wasm32-unknown-wasi (интерфейс WASI для использования WebAssembly вне браузера);
  • Инструментарий Rust адаптирован для дистрибутивов на основе стандартной Си-библиотеки Musl.

© OpenNet