Мы рады представить новую версию 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 человек. Большое вам спасибо!
- 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
Автор: DarkEld3r