[Перевод] Анонс Rust 1.8
Мы рады представить новую версию Rust — 1.8. Rust — это системный язык программирования, нацеленный на безопасную работу с памятью, скорость и параллельное выполнение кода.
Как обычно, вы можете установить Rust 1.8 с соответствующей страницы официального сайта, а также ознакомиться с подробным списком изменений в этой версии на GitHub. В этот релиз вошло порядка 1400 патчей.
Что вошло в стабильную версию 1.8
В релиз вошли две новые возможности, а ещё у нас есть хорошие новости для пользователей Windows! Также продолжаются работы по замене make
в нашей билд-системе на Cargo.
Во-первых, различные операторы составного присваивания, такие как +=
и -=
, теперь могут быть перегружены через соответствующие трейты. Это изменение было результатом RFC 953 и выглядит следующим образом:
use std::ops::AddAssign;
#[derive(Debug)]
struct Count {
value: i32,
}
impl AddAssign for Count {
fn add_assign(&mut self, other: Count) {
self.value += other.value;
}
}
fn main() {
let mut c1 = Count { value: 1 };
let c2 = Count { value: 5 };
c1 += c2;
println!("{:?}", c1);
}
Данный код выведет Count { value: 6 }
. Подобно другим трейтам-операторам, ассоциированные типы позволяют использовать разные типы с обеих сторон оператора. За подробностями обращайтесь к RFC.
Вторая возможность намного проще и является результатом RFC 218. До версии 1.8 в Rust структуры, не содержащие данных, не могли использовать фигурные скобки:
struct Foo; // ок
struct Bar { } // ошибка
Отныне второй вариант не приводит к ошибке. Изначально это было запрещено для единообразия с другими «пустыми объявлениями» и однозначности парсинга. Однако, в следующих за 1.0 версиях Rust проблема неоднозначности была решена, а авторы макросов сталкивались с дополнительными сложностями из-за необходимости поддерживать оба случая. К тому же при активной разработке периодически возникает необходимость переходить от пустых структур к непустым и наоборот, что приводит к дополнительной работе и усложняет восприятие изменений в патчах.
Была реализована раскрутка стека для 32-битных MSVC билдов. Это переводит i686-pc-windows-msvc
в разряд основных платформ.
Мы использовали make
для сборки Rust в течении долгого времени, при этом у нас есть удивительный инструмент для сборки программ на Rust — Cargo. В версии 1.8 появилась начальная поддержка новой системы сборки, которая написана на Rust и использует Cargo в качестве основы. Эта система пока ещё не используется по умолчанию, и предстоит проделать ещё немало работы. Мы сообщим, когда она подойдёт к концу, а пока, если вас интересуют подробности, загляните на GitHub.
Стабилизация библиотек
В версии 1.8 было стабилизировано порядка 20 функций и методов, которые можно разделить на три основные группы: поддержка UTF-16, разнообразные функции для работы с временем и дополнительные трейты для упомянутой выше перегрузки операторов.
Возможности Cargo
Было сделано несколько улучшений:
- Стало возможным использовать
cargo init
для инициализации Cargo-проекта в текущей директории вместо создания новой поддиректории командойcargo new
. - Появилась дополнительная команда
cargo metadata
для получения информации о проекте. - В
.cargo/config
теперь можно задавать ключи для-v
и--color
. - Улучшены возможности по работе с специфичными для платформы зависимостями.
Для дополнительной информации смотрите полный список изменений.
Разработчики версии 1.8
В релизе версии 1.8 участвовало 126 человек. Большое вам спасибо!
Список разработчиков 1.8