Опубликован релиз языка программирования общего назначения Rust 1.70. Также была опубликована серия статей о внутреннем устройстве Rust.
Основные нововведения в 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 в разряд стабильных, в том числе стабилизацию методов и реализации типажей:
-
NonZero*::MIN/MAX,
-
BinaryHeap::retain,
-
Default for std::collections::binary_heap::IntoIter,
-
Default for std::collections::btree_map::{IntoIter, Iter, IterMut},
-
Default for std::collections::btree_map::{IntoKeys, Keys},
-
Default for std::collections::btree_map::{IntoValues, Values},
-
Default for std::collections::btree_map::Range,
-
Default for std::collections::btree_set::{IntoIter, Iter},
-
Default for std::collections::btree_set::Range,
-
Default for std::collections::linked_list::{IntoIter, Iter, IterMut},
-
Default for std::vec::IntoIter,
-
Default for std::iter::Chain,
-
Default for std::iter::Cloned,
-
Default for std::iter::Copied,
-
Default for std::iter::Enumerate,
-
Default for std::iter::Flatten,
-
Default for std::iter::Fuse,
-
Default for std::iter::Rev,
-
Default for std::slice::Iter,
-
Default for std::slice::IterMut,
-
Rc::into_inner,
-
Arc::into_inner,
-
std::cell::OnceCell,
-
Option::is_some_and,
-
NonNull::slice_from_raw_parts,
-
Result::is_ok_and,
-
Result::is_err_and,
-
std::sync::atomic::Atomic*::as_ptr,
-
std::io::IsTerminal,
-
std::os::linux::net::SocketAddrExt,
-
std::os::unix::net::UnixDatagram::bind_addr,
-
std::os::unix::net::UnixDatagram::connect_addr,
-
std::os::unix::net::UnixDatagram::send_to_addr,
-
std::os::unix::net::UnixListener::bind_addr,
-
std::path::Path::as_mut_os_str,
-
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.
ссылка на оригинал статьи https://habr.com/ru/articles/739686/
Добавить комментарий