[Перевод] Анонс 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

© Habrahabr.ru