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 用户来说也有好消息!此外,我们正在努力用基于 Cargo 的构建系统替换我们基于 make 的构建系统。

第一个特性是,各种“运算符等于”运算符,例如 +=-=,现在可以通过各种 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

第二种形式不再是错误。 最初不允许这样做是为了与其他空声明保持一致,以及为了解决解析歧义。 但是,在 1.0 之后的 Rust 中,这种歧义是不存在的。 宏作者由于需要特殊情况而看到了额外的复杂性。 最后,进行活跃开发的用户有时会在 struct 的空版本和非空版本之间切换,而额外的工作和差异并不理想。

在 Windows 方面,32 位 MSVC 构建现在实现了展开。 这将 i686-pc-windows-msvc 提升到 Tier 1 平台。

最后,我们使用 make 来构建 Rust 已经很长时间了。 然而,我们已经有一个很棒的工具来构建 Rust 程序:Cargo。 在 Rust 1.8 中,对新的构建系统(用 Rust 编写并基于 Cargo)的初始支持已落地。 它还不是默认设置,而且还有很多工作要做。 一旦完全完成,我们将在发行说明中对此进行更多讨论,目前,请阅读 GitHub 问题以了解更多详细信息。

库的稳定化

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

有关更多信息,请参阅详细发行说明

Cargo 功能

Cargo 有一些更新

  • cargo init 可用于在当前工作目录中启动 Cargo 项目,而不是像 cargo new 那样创建一个新的子目录。
  • cargo metadata 是另一个用于获取项目元数据的新子命令。
  • .cargo/config 现在具有 -v--color 的键
  • 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