Выпуск Rust 1.89. Около 8% в Debian Sid завязаны на Rust
Опубликован релиз языка программирования Rust 1.89, основанного проектом Mozilla, но ныне развиваемого под покровительством независимой некоммерческой организации Rust Foundation. Язык сфокусирован на безопасной работе с памятью и предоставляет средства для достижения высокого параллелизма выполнения заданий, при этом обходясь без использования сборщика мусора и runtime (runtime сводится к базовой инициализации и сопровождению стандартной библиотеки).
Методы работы с памятью в Rust избавляют разработчика от ошибок при манипулировании указателями и защищают от проблем, возникающих из-за низкоуровневой работы с памятью, таких как обращение к области памяти после её освобождения, разыменование нулевых указателей, выход за границы буфера и т.п. Для распространения библиотек, обеспечения сборки и управления зависимостями проектом развивается пакетный менеджер Cargo. Для размещения библиотек поддерживается репозиторий crates.io.
Безопасная работа с памятью обеспечивается в Rust во время компиляции через проверку ссылок, отслеживание владения объектами, учёт времени жизни объектов (области видимости) и оценку корректности доступа к памяти во время выполнения кода. Rust также предоставляет средства для защиты от целочисленных переполнений, требует обязательной инициализации значений переменных перед использованием, лучше обрабатывает ошибки в стандартной библиотеке, применяет концепцию неизменяемости (immutable) ссылок и переменных по умолчанию, предлагает сильную статическую типизацию для минимизации логических ошибок.
Основные новшества:
- Предоставлена возможность использования символа »_» в качестве аргумента обобщённых параметров с признаком «const» для выведения значений этих параметров на основе окружающего контекста.
pub fn all_false‹const LEN: usize›() -› [bool; LEN] { [false; _] } Добавлено новое lint-предупреждение «mismatched_lifetime_syntaxes» для решение проблемы неочевидного определения времени жизни в сигнатурах функций при использовании механизма «lifetime elision» (автоматически определяет время жизни ссылок, позволяя обойтись без его ручного указания). Предупреждение выполняет проверку того, что входные и выходные параметры функции принадлежат к одной и той же группе типов. Группы формируются на основе поддержки явного задания времени жизни и возможности автоматического вывода времени жизни компилятором (например, в типах »&'a T» и «ContainsLifetime‹'a›» может явно присутствовать время жизни, но компилятор не может автоматически определить время жизни, в, а типах »&T»,»&'_ T» и «ContainsLifetime‹'_›» допускается как явное задание, так и автоматическое определение).
В атрибуте «target_feature» для систем x86 реализована возможность проверки поддержки расширенных наборов инструкций sha512, sm3, sm4, kl и widekl, а также отдельных функций avx512.
#[target_feature(enable = "avx512bw")] pub fn cool_simd_code(/* .. */) -> /* ... */ { /* ... */ }Обеспечен запуск doctest (тесты, встроенные в документацию) не только для текущей целевой платформы, но и для других платформ, указанных при запуске пакетного менеджера «cargo» («cargo test --doc --target other_target»).
Для функций 'extern «C»' при сборке для целевой платформы «wasm32-unknown-unknown» реализован стандартный C ABI для WebAssembly.
С некоторыми оговорками, касающимися совместимости типов, разрешено использование типов i128 и u128 во внешних Си-функциях (extern «C»), для которых ранее показывалось lint-предупреждение «improper_ctypes_definitions».
- В разряд стабильных переведена новая порция API, в том числе стабилизированы методы и реализации типажей:
- Многие встроенные в компилятор функции (Intrinsics) для процессоров x86, включая функции для AVX512,
SHA512,SM3иSM4. NonZero‹char›File::lockFile::lock_sharedFile::try_lockFile::try_lock_sharedFile::unlockNonNull::from_refNonNull::from_mutNonNull::without_provenanceNonNull::with_exposed_provenanceNonNull::expose_provenanceOsString::leakPathBuf::leakResult::flattenstd::os::linux::net::TcpStreamExt::quickackstd::os::linux::net::TcpStreamExt::set_quickack
- Многие встроенные в компилятор функции (Intrinsics) для процессоров x86, включая функции для AVX512,
Признак «const» применён в функциях:
‹[T; N]›::as_mut_slice‹[u8]›::eq_ignore_ascii_casestr::eq_ignore_ascii_case
Дополнительно можно отметить связанные с Rust события и проекты:
Опубликован отчёт о состоянии пакетов на языке Rust в Debian. Отмечается, что в ветке Debian Unstable (Sid) около 8% src-пакетов в репозитории main связаны сборочными зависимостями как минимум с одним пакетом «librust-*». В Debian 12 подобных пакетов было 4.5%. Также отмечено, что более 3 тысяч пакетов включают код на языке Rust, вынесенный в пакеты librust-…-dev, а 150 src-пакетов поставляют скомпилированные исполняемые файлы или библиотеки Rust.
Представлен проект tmux-rs, развивающий клон мультиплексора терминала tmux (консольный оконный менеджер), переписанный с Си на Rust.
Разработчик драйвера Tyr из компании Сollabora, опубликовал статью об устройстве работающих на уровне ядра драйверов для GPU и принципах разработки таких драйверов на языке Rust.
Продемонстрировано универсальное приложение на языке Rust, способное выполняться как на CPU, так и на различных платформах GPU: CUDA для NVIDIA, SPIR-V для GPU с поддержкой Vulkan, Metal для Apple, DirectX 12 для Windows, WebGPU для браузеров.
Источник: http://www.opennet.ru/opennews/art.shtml? num=63697
© OpenNet
