Опубликован релиз языка программирования Rust 1.89, основанного проектом Mozilla, но ныне развиваемого под покровительством независимой некоммерческой организации Rust Foundation. Язык сфокусирован на безопасной работе с памятью и предоставляет средства для достижения высокого параллелизма выполнения заданий, при этом обходясь без использования сборщика мусора и runtime (runtime сводится к базовой инициализации и сопровождению стандартной библиотеки).
Методы работы с памятью в Rust избавляют разработчика от ошибок при манипулировании указателями и защищают от проблем, возникающих из-за низкоуровневой работы с памятью, таких как обращение к области памяти после её освобождения, разыменование нулевых указателей, выход за границы буфера и т.п. Для распространения библиотек, обеспечения сборки и управления зависимостями проектом развивается пакетный менеджер Cargo. Для размещения библиотек поддерживается репозиторий crates.io.
Безопасная работа с памятью обеспечивается в Rust во время компиляции через проверку ссылок, отслеживание владения объектами, учёт времени жизни объектов (области видимости) и оценку корректности доступа к памяти во время выполнения кода. Rust также предоставляет средства для защиты от целочисленных переполнений, требует обязательной инициализации значений переменных перед использованием, лучше обрабатывает ошибки в стандартной библиотеке, применяет концепцию неизменяемости (immutable) ссылок и переменных по умолчанию, предлагает сильную статическую типизацию для минимизации логических ошибок.
Основные новшества:
- Предоставлена возможность использования символа “_” в качестве аргумента обобщённых параметров с признаком “const” для выведения значений этих параметров на основе окружающего контекста. pub fn all_false() -> [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
- File::lock
- File::lock_shared
- File::try_lock
- File::try_lock_shared
- File::unlock
- NonNull::from_ref
- NonNull::from_mut
- NonNull::without_provenance
- NonNull::with_exposed_provenance
- NonNull::expose_provenance
- OsString::leak
- PathBuf::leak
- Result::flatten
- std::os::linux::net::TcpStreamExt::quickack
- std::os::linux::net::TcpStreamExt::set_quickack
Признак “const” применён в функциях:
- <[T; N]>::as_mut_slice
- <[u8]>::eq_ignore_ascii_case
- str::eq_ignore_ascii_case
- Многие встроенные в компилятор функции (Intrinsics) для процессоров x86, включая функции для AVX512, SHA512, SM3 и SM4.
- Начался процесс перевода целевой платформы “x86_64-apple-darwin” с первого уровня поддержки на второй (Apple планирует прекратить поддержку архитектуры x86_64). Первый уровень поддержки подразумевает формирование бинарных сборок, проведение досконального тестирования и предоставление наивысшей гарантии поддержки платформы – каждое изменение в компиляторе проверяется выполнением полного тестового набора. Второй уровень поддержки подразумевает гарантию сборки, но отсутствие гарантий при прохождении тестового набора.
- Реализован третий уровень поддержки платформ “loongarch32-unknown-none” и “loongarch32-unknown-none-softfloat”. Третий уровень подразумевает базовую поддержку, но без автоматизированного тестирования, публикации официальных сборок и проверки возможности сборки кода.
Дополнительно можно отметить связанные с 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 для браузеров.