Релиз языка программирования Rust 1.27

22 июня 2018 года

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

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

В подготовке нового выпуска принял участие 131 разработчик. Основные новшества:

  • Добавлена поддержка параллельной обработки данных c использованием инструкций SIMD. В разряд стабильных переведены модули std::arch::x86(недоступная ссылка) и std::arch::x86_64(недоступная ссылка) (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, а в модуль regex добавлен код для использования SIMD для ускорения обработки данных;

  • Предложен новый синтаксис для создания объектов trait - "dyn Trait", который синтаксически эквивалентен старому Trait, но унифицирован с учётом нового выражения "impl Trait" (т.е. чтобы не создавать путаницу c impl предлагается явно писать "dyn"). Например, вместо "&Trait" теперь рекомендовано писать "&dyn Trait", вместо "&mut Trait" - "&mut dyn Trait", а вместо "Box<Trait>" - "Box<dyn Trait>". Поддержка старого синтаксиса оставлена для обеспечения совместимости но не рекомендована к использованию;
  • Обеспечена возможность применения атрибута "#[must_use]" к функциям, а не только к типам. Указание данного атрибута приведёт к выводу предупреждения, если выданное функцией значение в дальнейшем не используется в программе. В стандартной библиотеке данный атрибут уже выставлен для функций std::str::replace, Clone::clone, Iterator::collect и ToOwned::to_owned. Например, использование "#[must_use]" помогает выявить такие ошибки, как выполнение функции без присвоения результата;
  • Стабилизированы атрибуты над базовыми параметрами, такими как типы. Например: "fn foo<#[lifetime_attr] 'a" и "#[type_attr] T: 'a>() {}";
  • В разряд стабильных переведена новая порция API, в том числе DoubleEndedIterator::rfind/rfold

Источники

править
 
 
Creative Commons
Эта статья содержит материалы из статьи «Релиз языка программирования Rust 1.27», опубликованной OpenNET и распространяющейся на условиях лицензии Creative Commons Attribution (CC BY) — указание автора, источник и лицензию.
 
Эта статья загружена автоматически ботом NewsBots в архив и ещё не проверялась редакторами Викиновостей.
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.

Комментарии

Викиновости и Wikimedia Foundation не несут ответственности за любые материалы и точки зрения, находящиеся на странице и в разделе комментариев.