Выпуск Rust 1.89. Около 8% src-пакетов в 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.

    Из представляющих интерес для Debian пакетов упомянуты sudo-rs, ntpd-rs, uutils, Sequoia, rpgp, hickory (DNS), Rustls, rav1d и fish. Опциональная поддержка Rust реализована в APT, QEMU (virtiofsd), ядре Linux и Mesa, а также ожидается в LibreOffice. Для преобразования crate-пакетов в src-пакеты Debian реализован инструментарий debcargo.

  • Представлен проект tmux-rs, развивающий клон мультиплексора терминала tmux (консольный оконный менеджер), переписанный с Си на Rust.
  • Разработчик драйвера Tyr из компании Сollabora, опубликовал статью об устройстве работающих на уровне ядра драйверов для GPU и принципах разработки таких драйверов на языке Rust.
  • Продемонстрировано универсальное приложение на языке Rust, способное выполняться как на CPU, так и на различных платформах GPU: CUDA для NVIDIA, SPIR-V для GPU с поддержкой Vulkan, Metal для Apple, DirectX 12 для Windows, WebGPU для браузеров.

Աղբյուր: opennet.ru

Գնել հուսալի հոստինգ կայքերի համար, DDoS պաշտպանությամբ, VPS VDS սերվերներ 🔥 Գնել հուսալի հոստինգ կայքերի համար, DDoS պաշտպանությամբ, VPS VDS սերվերներ | ProHoster