Выпуск Rust 1.89. Около 8% src-пакетов в Debian Sid завязаны на Rust

Опубликован релиз языка программирования Rust 1.89, основанного проектом Mozilla, но ныне развиваемого под покровительством независимой некоммерческой организации Rust Foundation. Язык сфокусирован на безопасной работе с памятью и предоставляет средства для достижения высокого параллелизма выполнения заданий, при этом обходясь без использования сборщика мусора и runtime (runtime сводится к базовой инициализации и сопровождению стандартной библиотеки).

Metodat e punës me kujtesën në Rust e çlirojnë zhvilluesin nga gabimet gjatë manipulimit me treguesit dhe e mbrojnë atë nga problemet që lindin për shkak të punës me kujtesën në nivel të ulët, si qasja në një zonë kujtese pas çlirimit të saj, dereferencimi i treguesve null, dalja jashtë kufijve të buffers etj. Për shpërndarjen e bibliothekave, sigurimin e ndërtimit dhe menaxhimin e varësive, projekti zhvillohet me menaxherin e paketave Cargo. Për mbështetje të bibliothekave, ekziston një repository crates.io.

Puna e sigurt me kujtesën sigurohet në Rust gjatë kompilimit përmes verifikimit të referencave, ndjekjes së pronësisë së objekteve, llogaritjes së kohëzgjatjes së jetës së objekteve (fushave të dukshmërisë) dhe vlerësimit të saktësisë së qasjes në kujtesë gjatë ekzekutimit të kodit. Rust gjithashtu ofron mjete për mbrojtjen nga tejkalimet e numrave të plotë, kërkon inicializimin e detyrueshëm të vlerave të variablave para përdorimit, trajton më mirë gabimet në bibliotekën standarde, aplikon konceptin e referencave dhe variablave të pandryshueshëm (immutable) si standard dhe ofron tipizimin e fortë statik për të minimizuar gabimet logjike.

Novitetet kryesore:

  • Предоставлена возможность использования символа «_» в качестве аргумента обобщённых параметров с признаком «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».
  • Një grup i ri API u kalua në kategorinë e stabilizuar, përfshirë stabilizimin e metodave dhe implementimeve të trait-ëve:
    • Многие встроенные в компилятор функции (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

    Priznaku «const» aplicohet në funksione:

    • <[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 для браузеров.

Burimi: opennet.ru

Купить надежный хостинг для сайтов с защитой от DDoS, VPS VDS серверы 🔥 Купить надежный хостинг для сайтов с защитой от DDoS, VPS VDS серверы | ProHoster