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 的构建系统。

第一个功能是各种“运算符等于”运算符(例如 +=-=)现在可以通过各种特征进行重载。此更改在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。在 Rust 1.8 之前,没有字段的 struct 没有花括号

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

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

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

最后,我们使用 make 来构建 Rust 很长时间了。但是,我们已经有一个很棒的工具来构建 Rust 程序:Cargo。在 Rust 1.8 中,初步支持已落地,这是一个用 Rust 编写并基于 Cargo 的新构建系统。它还不是默认的,还有很多工作要做。一旦完全完成,我们将在发布说明中更多地谈论它,现在,请阅读 GitHub 问题以了解更多详细信息。

库稳定化

1.8 中大约有 20 个库函数和方法现在是稳定的。主要有三个方面的变化:与 UTF-16 相关的字符串方法、与时间相关的各种 API 以及语言部分提到的用于运算符重载的各种特征。

查看详细的发布说明以了解更多信息。

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