Вышел язык программирования Rust 1.70

Опубликован релиз языка программирования общего назначения Rust 1.70. Также была опубликована серия статей о внутреннем устройстве Rust.

8b8a1eb186603cf3222770cbf1a1d685.JPG

Основные нововведения в Rust 1.70 включают:

  • протокол «sparse» в репозитории пакетов crates.io, реализующий новый способ работы с индексом, в котором отражены доступные версии всех существующих в репозитории пакетов. Протокол позволяет повысить скорость работы с crates.io и решить проблемы с масштабированием. Для сокращения задержек из-за загрузки полного индекса в Sparse вместо доступа к нему с использованием Git задействована прямая загрузка по HTTPS только необходимых индексных данных, охватывающих зависимости конкретного проекта. Для отдачи индексных данных задействован сервис index.crates.io. Для возвращения старого протокола можно использовать настройку «registries.crates-io.protocol»;

  • стабилизацию структур OnceCell и OnceLock, реализующих возможность одноразовой инициализации совместно используемых данных:

 use std::cell::OnceCell;

   let cell = OnceCell::new();

   assert_eq!(cell.set(92), Ok(()));
   assert_eq!(cell.set(62), Err(62));
  • стабилизацию типажа IsTerminal, предлагающего метод is_terminal для определения связи файлового дескриптора с терминалом или TTY:

 use std::io::{stdout, IsTerminal};

   fn main() {
       let use_color = stdout().is_terminal(); // если терминал, то можно использовать коды цвета
   }
  • возможность указания уровней вывода отладочной информации не только в цифровом виде, но в форме строковых имён в опции »-Cdebuginfo» («none» — идентично уровню 0, «limited» — 1 и «full» — 2). Также добавлены два новых уровня «line-directives-only» и «line-tables-only»;

  • запрет на использование нестабильных опций тестирования в стабильных и бета-сборках в интерфейсе с помощью команды строки пакета test, включаемых при указании -Zunstable-options, которые теперь можно использовать только в ночных сборках;

  • перевод новых API в разряд стабильных, в том числе стабилизацию методов и реализации типажей:

  1. NonZero*:: MIN/MAX,

  2. BinaryHeap: retain,

  3. Default for std: collections: binary_heap: IntoIter,

  4. Default for std: collections: btree_map::{IntoIter, Iter, IterMut},

  5. Default for std: collections: btree_map::{IntoKeys, Keys},

  6. Default for std: collections: btree_map::{IntoValues, Values},

  7. Default for std: collections: btree_map: Range,

  8. Default for std: collections: btree_set::{IntoIter, Iter},

  9. Default for std: collections: btree_set: Range,

  10. Default for std: collections: linked_list::{IntoIter, Iter, IterMut},

  11. Default for std: vec: IntoIter,

  12. Default for std: iter: Chain,

  13. Default for std: iter: Cloned,

  14. Default for std: iter: Copied,

  15. Default for std: iter: Enumerate,

  16. Default for std: iter: Flatten,

  17. Default for std: iter: Fuse,

  18. Default for std: iter: Rev,

  19. Default for std: slice: Iter,

  20. Default for std: slice: IterMut,

  21. Rc: into_inner,

  22. Arc: into_inner,

  23. std: cell: OnceCell,

  24. Option: is_some_and,

  25. NonNull: slice_from_raw_parts,

  26. Result: is_ok_and,

  27. Result: is_err_and,

  28. std: sync: atomic: Atomic*:: as_ptr,

  29. std: io: IsTerminal,

  30. std: os: linux: net: SocketAddrExt,

  31. std: os: unix: net: UnixDatagram: bind_addr,

  32. std: os: unix: net: UnixDatagram: connect_addr,

  33. std: os: unix: net: UnixDatagram: send_to_addr,

  34. std: os: unix: net: UnixListener: bind_addr,

  35. std: path: Path: as_mut_os_str,

  36. std: sync: OnceLock;

  • команду «cargo logout» для удаления токена доступа к API из локального реестра в пакетном менеджере cargo. В команду «cargo install» добавлена опция »--ignore-rust-version»;

  • перевод компилятора на использование LLVM 16;

  • реализацию третьего уровня поддержки для платформ loongarch64-unknown-linux-gnu и i586-pc-nto-qnx700 (QNX Neutrino RTOS 7.0). Он подразумевает базовую поддержку без автоматизированного тестирования, публикации официальных сборок и проверки возможности сборки кода.

Версия Rust 1.69.0 вышла в конце апреля. В ней для Cargo была добавлена подкоманда, которая автоматически исправляет некоторые предупреждения компиляции, а также появилась поддержка автоматического исправления части предупреждений Clippy.

© Habrahabr.ru