Выпуск языка программирования Rust 1.76

Новости мира unix. Хотите узнать секрет вечного счастья? Откройте страницу 246.
Ответить
acolyte
Аватара пользователя
Сообщения: 3252
Зарегистрирован: 20.08.2022

#

Выпуск языка программирования Rust 1.76
Дата публикации:Thu, 08 Feb 2024 23:04:58 +0300




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



Методы работы с памятью в Rust избавляют разработчика от ошибок при манипулировании указателями и защищают от проблем, возникающих из-за низкоуровневой работы с памятью, таких как обращение к области памяти после её освобождения, разыменование нулевых указателей, выход за границы буфера и т.п. Для распространения библиотек, обеспечения сборки и управления зависимостями проектом развивается пакетный менеджер Cargo. Для размещения библиотек поддерживается репозиторий crates.io.



Безопасная работа с памятью обеспечивается в Rust во время компиляции через проверку ссылок, отслеживание владения объектами, учёт времени жизни объектов (области видимости) и оценку корректности доступа к памяти во время выполнения кода. Rust также предоставляет средства для защиты от целочисленных переполнений, требует обязательной инициализации значений переменных перед использованием, лучше обрабатывает ошибки в стандартной библиотеке, применяет концепцию неизменяемости (immutable) ссылок и переменных по умолчанию, предлагает сильную статическую типизацию для минимизации логических ошибок.




Основные новшества:
  • В документацию добавлена отдельная секция, описывающая совместимость различных типов аргументов и типов возвращаемых значений функций на уровне ABI. По сравнению с прошлыми версиями гарантирована совместимость на уровне ABI типов "char" и "u32", которые имеют идентичный размер и выравнивание.

    В дополнение к ранее доступному вызову "any::type_name::<T>()", возвращающему строковое описание для типа, указанного в параметре "T", добавлена функция "type_name_of_val(&T)" позволяющая получить информацию о типе на основе любой неименованной ссылки.

    fn get_iter() -> impl Iterator<Item = i32> {
    [1, 2, 3].into_iter()
    }

    fn main() {
    let iter = get_iter();
    let iter_name = std::any::type_name_of_val(&iter);
    let sum: i32 = iter.sum();
    println!("The sum of the `{iter_name}` is {sum}.");
    }

    На выходе получим:

    The sum of the `core::array::iter::IntoIter<i32, 3>` is 6.


    В разряд стабильных переведена новая порция API, в том числе стабилизированы методы и реализации типажей:
    • [url=https://doc.rust-lang.org/stable/std/sync/struct.Arc.html#method.unwrap_or_clone]Arc::unwrap_or_clone[/url]
    • Rc::unwrap_or_clone
      [/url]
    • Result::inspect
      [/url]
    • Result::inspect_err
      [/url]
    • Option::inspect
      [/url]
    • type_name_of_val
      [/url]
    • std::hash::{DefaultHasher, RandomState}
      [/url]
    • ptr::{from_ref, from_mut}
      [/url]
    • ptr::addr_eq
      [/url]
Реализован третий уровень поддержки для платформ {x86_64,i686}-win7-windows-msvc, aarch64-apple-watchos, arm64e-apple-ios и arm64e-apple-darwin. Третий уровень подразумевает базовую поддержку, но без автоматизированного тестирования, публикации официальных сборок и проверки возможности сборки кода.








Дополнительно можно отметить демонстрацию экспериментального планировщика задач scx_rustland, написанного на языке Rust и выполняемого в пространстве пользователя (вынос логики планирования задач из ядра в пространство пользователя реализовано при помощи инструментария sched-ext, использующего BPF). Планировщик оптимизирован для повышения приоритета интерактивных задач на фоне задач, интенсивно нагружающих CPU. Например, в тесте запуска игрового приложения одновременно со сборкой ядра планировщик scx_rustland позволил добиться в игре более высокого FPS, чем при использовании штатного планировщика EEVDF.






Новость позаимствована с opennet.ru
Ссылка на оригинал: https://www.opennet.ru/opennews/art.shtml?num=60575

Жизнь за Нер'зула!

Ответить