发布 Rust 1.8

2016 年 4 月 14 日 · Rust 核心团队

Rust 团队很高兴宣布 Rust 的最新版本 1.8 发布。Rust 是一门专注于安全、速度和并发性的系统编程语言。

和往常一样,你可以从我们网站的相应页面安装 Rust 1.8,并在 GitHub 上查看 1.8 的详细发布说明。此版本包含了大约 1400 个补丁。

1.8 稳定版的新特性

Rust 1.8 中有两个新特性,此外还有对 Windows 用户来说是个好消息!另外,将我们基于 make 的构建系统替换为基于 Cargo 的构建系统的工作正在进行中。

第一个特性是,各种“运算符等号”运算符,例如 +=-=,现在可以通过各种 trait 进行重载。这项更改已在 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 }。与其他运算符 trait 一样,关联类型也允许您在运算符的每一侧使用不同的类型。更多详细信息请参阅 RFC。

第二个特性非常小,来自 RFC 218。在 Rust 1.8 之前,没有字段的 struct 不能使用大括号:

struct Foo; // works
struct Bar { } // error

第二种形式不再是错误。最初不允许这种形式是为了与其他空声明保持一致,并避免解析歧义。然而,在 Rust 1.0 之后,这种歧义就不存在了。此外,宏作者也因为需要特殊处理而增加了复杂性。最后,活跃的开发者有时需要在结构体的空版本和非空版本之间切换,这额外的改动和差异并不理想。

在 Windows 方面,32 位 MSVC 构建 现在实现了 unwinding。这使得 i686-pc-windows-msvc 成为 Tier 1 平台。

最后,我们使用 make 构建 Rust 已经很长时间了。然而,我们已经有一个出色的工具来构建 Rust 程序:Cargo。在 Rust 1.8 中,初步支持落地了一个用 Rust 编写的、基于 Cargo 的新构建系统。它尚未成为默认选项,还有很多工作要做。一旦完全完成,我们将在发布说明中详细讨论此事;目前,请阅读 GitHub issue 了解更多细节。

标准库稳定化

大约有 20 个标准库函数和方法在 1.8 中稳定了。主要有三组变化:与 UTF-16 相关的字符串方法、各种与时间相关的 API,以及语言部分提到的实现运算符重载所需的各种 trait。

更多详细信息请参阅详细发布说明

Cargo 特性

Cargo 有以下几项更新:

更多详细信息请参阅详细发布说明

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