The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Релиз языка программирования Rust 1.27"
Отправлено opennews, 22-Июн-18 14:15 
Состоялся (https://blog.rust-lang.org/2018/06/21/Rust-1.27.html) релиз языка системного программирования Rust 1.27 (http://www.rust-lang.org), развиваемого проектом Mozilla. Язык сфокусирован на безопасной работе с памятью, обеспечивает автоматическое управление памятью и предоставляет средства для достижения высокого параллелизма выполнения заданий, при этом обходясь без использования сборщика мусора и runtime.


Автоматическое управление памятью в Rust избавляет разработчика от манипулирования указателями и защищает от проблем, возникающих из-за низкоуровневой работы с памятью, таких как обращение к области памяти после её освобождения, разыменование нулевых указателей, выход за границы буфера и т.п. Для распространения библиотек, обеспечения сборки и управления зависимостями проектом развивается пакетный менеджер Cargo (http://blog.rust-lang.org/2014/11/20/Cargo.html), позволяющий получить нужные для программы библиотеки  в один клик. Для размещения библиотек поддерживается репозиторий crates.io (https://crates.io/).


В подготовке нового выпуска принял участие 131 разработчик. Основные новшества (https://github.com/rust-lang/rust/blob/master/RELEASES.md#ve...:


-  Добавлена (https://github.com/rust-lang/rust/pull/49664/) поддержка параллельной обработки данных c использованием инструкций SIMD (https://ru.wikipedia.org/wiki/SIMD). В разряд стабильных переведены модули std::arch::x86 (https://doc.rust-lang.org/std/arch/x86/index.html) и std::arch::x86_64 (https://doc.rust-lang.org/std/arch/x86_64/index.html) (std::arch::arm пока остаётся экспериментальным), предоставляющие доступ к процессорным инструкциям SIMD, для определения поддержки которых предложены макрос "is_x86_feature_detected", атрибут '#[target_feature(enable="")]' и проверочная конструкция '#[cfg(target_feature = "...")]'. К инструкциям можно обращаться напрямую, без выноса логики их задействования на плечи компилятора. Например, можно подготовить несколько вариантов обработчиков функции, один из которых использует AVX2, а другой применяется на системах без поддержки SIMD:

   fn foo() {
       #[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
       {
           if is_x86_feature_detected!("avx2") {
                return unsafe { foo_avx2() };
           }
       }
       foo_fallback();
   }


В настоящее время для вызова SIMD в std::arch предлагаются только низкоуровневые примитивы, но в будущих выпусках ожидается появление высокоуровневого интерфейса  std::simd, который пока не прошёл стадию стабилизации. Кроме того, уже развиваются библиотеки для упрощения упрощения применения SIMD, например доступен модуль faster (https://github.com/AdamNiederer/faster), а в модуль  regex добавлен код для использования SIMD для ускорения обработки данных;

-  Предложен (https://github.com/rust-lang/rust/pull/49968/) новый синтаксис для создания объектов trait - "dyn Trait", который синтаксически эквивалентен старому Trait, но унифицирован с учётом нового выражения "impl Trait" (т.е. чтобы не создавать путаницу c impl предлагается явно писать "dyn"). Например, вместо "&Trait" теперь рекомендовано писать "&dyn Trait", вместо "&mut Trait" - "&mut dyn Trait", а вместо "Box‹Trait›" - "Box‹dyn Trait›". Поддержка старого синтаксиса оставлена для обеспечения совместимости но не рекомендована к использованию;

-  Обеспечена (https://github.com/rust-lang/rust/pull/48925/) возможность применения атрибута "#[must_use]" к функциям, а не только к типам. Указание данного атрибута приведёт к выводу предупреждения, если выданное функцией значение в дальнейшем не используется в программе. В стандартной библиотеке данный атрибут уже выставлен (https://github.com/rust-lang/rust/blob/master/RELEASES.md#ve... для функций std::str::replace, Clone::clone, Iterator::collect и ToOwned::to_owned. Например, использование  "#[must_use]" помогает выявить ошибки (https://github.com/rust-lang/rust/pull/50177/) вида выполнения функции без присвоения результата;

-  Стабилизированы атрибуты над базовыми параметрами, такими как типы. Например: "fn foo‹#[lifetime_attr] 'a" и  "#[type_attr] T: 'a›() {}";
-  В разряд стабильных переведена (https://github.com/rust-lang/rust/blob/master/RELEASES.md#ve... новая порция API, в том числе DoubleEndedIterator::rfind/rfold/try_rfold,   Duration::from_micros/from_nanos/subsec_micros/subsec_millis,
    HashMap::remove_entry, Iterator::try_fold/try_for_each,
    NonNull::cast, Option::filter, String::replace_range,
    Take::set_limit,  process::id и  slice::rsplit_mut/rsplit/swap_with_slice;
-  В базовый состав (core) из std  перенесены многие методы для работы с типами [u8], f32 и f64;


-  В пакетный менеджер cargo добавлен флаг  "--target-dir" для изменения целевого каталога. Также добавлен код для автоматического определения тестов, примеров и исполняемых файлов в проекте без их явного упоминания в настройках. В cargo-metadata включены поля authors, categories, keywords, readme и repository. Обеспечено кэширование информации от компилятора (для отключения можно указать CARGO_CACHE_RUSTC_INFO=0);
-  Добавлена возможность поиска в разделе документации на сайте doc.rust-lang.org;

-  Добавлена поддержка новой целевой платформы "armv5te-unknown-linux-musl".


URL: https://blog.rust-lang.org/2018/06/21/Rust-1.27.html
Новость: https://www.opennet.ru/opennews/art.shtml?num=48821

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру