Анонс 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

  • Aaron Turon
  • Abhishek Chanda
  • Adolfo Ochagavía
  • Aidan Hobson Sayers
  • Alan Somers
  • Alejandro Wainzinger
  • Aleksey Kladov
  • Alex Burka
  • Alex Crichton
  • Amanieu d’Antras
  • Andrea Canciani
  • Andreas Linz
  • Andrew Cantino
  • Andrew Horton
  • Andrew Paseltiner
  • Andrey Cherkashin
  • Angus Lees
  • arcnmx
  • Ariel Ben-Yehuda
  • ashleysommer
  • Benjamin Herr
  • Валерий Лашманов
  • Björn Steinbrink
  • bors
  • Brian Anderson
  • Brian Bowman
  • Christian Wesselhoeft
  • Christopher Serr
  • Corey Farwell
  • Craig M. Brandenburg
  • Cyryl Płotnicki-Chudyk
  • Daniel J Rollins
  • Dave Huseby
  • David AO Lozano
  • David Henningsson
  • Devon Hollowood
  • Dirk Gadsden
  • Doug Goldstein
  • Eduard Burtescu
  • Eduard-Mihai Burtescu
  • Eli Friedman
  • Emanuel Czirai
  • Erick Tryzelaar
  • Evan
  • Felix S. Klock II
  • Florian Berger
  • Geoff Catlin
  • ggomez
  • gohyda
  • Gökhan Karabulut
  • Guillaume Gomez
  • ituxbag
  • James Miller
  • Jeffrey Seyfried
  • John Talling
  • Jonas Schievink
  • Jonathan S
  • Jorge Aparicio
  • Joshua Holmer
  • JP Sugarbroad
  • Kai Noda
  • Kamal Marhubi
  • Katze
  • Kevin Brothaler
  • Kevin Butler
  • Manish Goregaokar
  • Markus Westerlind
  • Marvin Löbel
  • Masood Malekghassemi
  • Matt Brubeck
  • Michael Huynh
  • Michael Neumann
  • Michael Woerister
  • mitaa
  • Ms2ger
  • Nathan Kleyn
  • nicholasf
  • Nick Cameron
  • Niko Matsakis
  • Noah
  • NODA, Kai
  • Novotnik, Petr
  • Oliver Middleton
  • Oliver Schneider
  • petevine
  • Philipp Oppermann
  • pierzchalski
  • Piotr Czarnecki
  • pravic
  • Pyfisch
  • Richo Healey
  • Ruud van Asseldonk
  • Scott Olson
  • Sean McArthur
  • Sebastian Wicki
  • Sébastien Marie
  • Seo Sanghyeon
  • Simonas Kazlauskas
  • Simon Sapin
  • srinivasreddy
  • Steve Klabnik
  • Steven Allen
  • Steven Fackler
  • Stu Black
  • Tang Chenglong
  • Ted Horst
  • Ticki
  • tiehuis
  • Tim Montague
  • Tim Neumann
  • Timon Van Overveldt
  • Tobias Bucher
  • Tobias Müller
  • Todd Lucas
  • Tom Tromey
  • Tshepang Lekhonkhobe
  • ubsan
  • Ulrik Sverdrup
  • Vadim Petrochenkov
  • vagrant
  • Valentin Lorentz
  • Varun Vats
  • vegai
  • vlastachu
  • Wangshan Lu
  • York Xiang

ссылка на оригинал статьи https://habrahabr.ru/post/281152/