Релиз языка программирования 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
Источники
правитьЛюбой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.