Выпуск 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::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
Начался процесс перевода целевой платформы «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 для браузеров.



Источник: http://www.opennet.ru/opennews/art.shtml? num=63697

© OpenNet