Выпуск языка программирования Rust 1.73. Аудит RustVMM. Переписывание Binder на Rust

Автор Сообщение
news_bot ®

Стаж: 6 лет 3 месяца
Сообщений: 27286

Создавать темы news_bot ® написал(а)
17-Ноя-2023 16:05

Опубликован релиз языка программирования общего назначения Rust 1.74, основанного проектом Mozilla, но ныне развиваемого под покровительством независимой некоммерческой организации Rust Foundation. Язык сфокусирован на безопасной работе с памятью и предоставляет средства для достижения высокого параллелизма выполнения заданий, при этом обходясь без использования сборщика мусора и runtime (runtime сводится к базовой инициализации и сопровождению стандартной библиотеки).
Методы работы с памятью в Rust избавляют разработчика от ошибок при манипулировании указателями и защищают от проблем, возникающих из-за низкоуровневой работы с памятью, таких как обращение к области памяти после её освобождения, разыменование нулевых указателей, выход за границы буфера и т.п. Для распространения библиотек, обеспечения сборки и управления зависимостями проектом развивается пакетный менеджер Cargo. Для размещения библиотек поддерживается репозиторий crates.io.
Безопасная работа с памятью обеспечивается в Rust во время компиляции через проверку ссылок, отслеживание владения объектами, учёт времени жизни объектов (области видимости) и оценку корректности доступа к памяти во время выполнения кода. Rust также предоставляет средства для защиты от целочисленных переполнений, требует обязательной инициализации значений переменных перед использованием, лучше обрабатывает ошибки в стандартной библиотеке, применяет концепцию неизменяемости (immutable) ссылок и переменных по умолчанию, предлагает сильную статическую типизацию для минимизации логических ошибок.
Основные новшества:
  • Добавлена возможность настройки lint-проверок через файл Cargo.toml с манифестом пакетного менеджера. Для определения настроек lint, таких как уровень реагирования (forbid, deny, warn, allow), предложены новые секции "[lints]" и "[workspace.lints]", изменение которых учитывается при принятии решения о пересборке. Например, вместо указания при сборке флагов "-F", "-D", "-W" и "-A" или добавления в код атрибутов "#![forbid(unsafe_code)]" и "#![deny(clippy::enum_glob_use)]" теперь можно использовать в манифесте Cargo:
    [lints.rust]
       unsafe_code = "forbid"
       [lints.clippy]
       enum_glob_use = "deny"
  • В пакетный менеджер Crate добавлена возможность аутентификации при подключении к репозиторию. В базовую поставку включена поддержка размещения параметров аутентификации в хранилищах учётных данных Linux (на базе libsecret), macOS (Keychain) и Windows (Windows Credential Manager), но система изначально сделана модульной и позволяет организовать работу с различными провайдерами для хранения и генерации токенов, например, подготовлен плагин для использования менеджера паролей 1Password. Аутентификация может запрашиваться репозиторием для любых операций, а не только для подтверждения публикации пакетов.
    ~/.cargo/config.toml
       [registry]
       global-credential-providers = ["cargo:token", "cargo:libsecret"]
  • Стабилизирована поддержка проекций возвращаемых типов (impl_trait_projections), позволяющая упоминать Self и T::Assoc в возвращаемых типах, таких как "async fn" и "-> impl Trait".
    struct Wrapper<'a, T>(&'a T);
       // Opaque return types that mention `Self`:
       impl Wrapper<'_, ()> {
           async fn async_fn() -> Self { /* ... */ }
           fn impl_trait() -> impl Iterator { /* ... */ }
       }
       trait Trait<'a> {
           type Assoc;
           fn new() -> Self::Assoc;
       }
       impl Trait<'_> for () {
           type Assoc = ();
           fn new() {}
       }
       // Opaque return types that mention an associated type:
       impl<'a, T: Trait<'a>> Wrapper<'a, T> {
           async fn mk_assoc() -> T::Assoc { /* ... */ }
           fn a_few_assocs() -> impl Iterator<Item = T::Assoc> { /* ... */     }
       }
  • В разряд стабильных переведена новая порция API, в том числе стабилизированы методы и реализации типажей:
  • Признак "const", определяющий возможность использования в любом контексте вместо констант, применён в функциях:
  • В компиляторе, инструментарии, стандартной библиотеке и генерируемых исполняемых файлах приложений повышены требования к платформам Apple: для работы теперь требуются как минимум версии
    macOS 10.12 Sierra, iOS 10 и tvOS 10, выпущенные в 2016 году.
  • Реализован третий уровень поддержки для платформы i686-pc-windows-gnullvm. Третий уровень подразумевает базовую поддержку, но без автоматизированного тестирования, публикации официальных сборок и проверки возможности сборки кода.
  • Реализован второй уровень поддержки целевой платформы loongarch64-unknown-none. Второй уровень поддержки подразумевает гарантию сборки.
Дополнительно можно отметить два события, связанных с языком Rust:
  • Фонд OSTIF (Open Source Technology Improvement Fund), созданный с целью усиления защищённости открытых проектов, опубликовал результаты аудита проекта RustVMM, предоставляющего компоненты для создания специфичных для определённых задач гипервизоров и мониторов виртуальных машин (VMM). В разработке проекта участвуют такие компании, как Intel, Alibaba, Amazon, Google, Linaro и Red Hat.
    На базе RustVMM развиваются гипервизоры Intel Cloud Hypervisor и Dragonball. Аудит подтвердил высокое качество кодовое базы и использование в архитектуре и реализации приёмов, нацеленных на достижение максимальной безопасности. В ходе аудита было выявлено 6 проблем, не имеющих прямого влияния на безопасность.
  • Компания Google представила в списке рассылки разработчиков ядра Linux новую реализацию механизма межпроцессного взаимодействия Binder, переписанную на языке Rust. Переработка выполнена в рамках проекта по усилению защищённости, продвижению приёмов безопасного программирования и повышению эффективности выявления проблем при работе с памятью в Android (около 70% из всех опасных уязвимостей, выявленных в Android, вызваны ошибками при работе с памятью). Реализация Binder на Rust достигла паритета в функциональности с изначальным вариантом на языке Си, проходит все тесты AOSP (Android Open-Source Project) и может использоваться для создания рабочих редакций прошивок. Производительность обеих реализаций находится примерно на одном уровне (отклонения в пределах -1.96% и +1.38%).

===========
Источник:
OpenNet.RU
===========

Похожие новости: Теги для поиска: #_rust
Профиль  ЛС 
Показать сообщения:     

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы

Текущее время: 18-Май 21:27
Часовой пояс: UTC + 5