宣布 Rust 1.2

2015 年 8 月 6 日 · Rust 核心团队

今天标志着 Rust 1.2 stable 和 1.3 beta 发布周期的完成!请继续阅读重点内容,或查看发布说明了解更多详情。

1.2 stable 有哪些内容?

正如我们先前宣布的那样,Rust 1.2 为编译器带来了两项主要的性能改进

  • 对实际编译器性能的全面改进。代表性的 crate 包括 hyper(编译速度提高 1.16 倍)、html5ever(提高 1.62 倍)、regex(提高 1.32 倍)和 rust-encoding(提高 1.35 倍)。你可以在 Nick Cameron 的初步跟踪站点探索一些性能数据,使用日期范围为 2015-05-15 至 2015-06-25。

  • 并行代码生成现在可以工作了,在 4 核机器上自举时可将速度提高 33%。并行代码生成对于调试构建特别有用,因为它会阻止一些优化;但它也可以与优化一起使用,作为有效的 `-O1` 标志。可以通过向 `rustc` 传递 `-C codegen-units=N` 来激活,其中 `N` 是所需的线程数。

Cargo 的性能也显著提高了

  • 对于大型项目,无需重新编译的构建(“无操作构建”)快得多:对于 Servo,构建时间从 5 秒缩短到 0.5 秒。

  • Cargo 现在支持共享目标目录,可在多个包之间缓存依赖项,从而显著减少复杂项目的构建时间。

1.2 版本还引入了支持对 MSVC(Microsoft Visual C)工具链的支持,与 GNU 变体不同。结果是 Rust 代码现在可以直接链接到使用原生 Windows 工具链构建的代码。编译器在 MSVC 上自举,我们有初步的 nightly 版本,并且正在针对 MSVC 测试所有 rust-lang crate。展开(Unwinding)支持尚不可用(进程在 panic 时中止),但相关工作正在进行中。

在语言方面,Rust 1.2 标志着动态大小类型(DST)工作的完成,允许像 `Rc` 这样的智能指针无缝地应用于数组和 trait 对象,使得 `Rc<[T]>` 可以完全使用。这项最终增强功能适用于标准库中的所有智能指针。对外部智能指针类型的支持在 nightly 版本中可用,并将很快稳定下来。

1.3 beta 有哪些内容?

1.3 周期的最令人兴奋的进展之一是Rustonomicon 的引入,这是一本新书,涵盖“高级和非安全 Rust 编程的黑暗艺术”。虽然这本书仍处于早期阶段,但它已经对 Rust 的一些更微妙的方面提供了不可或缺的覆盖。

1.3 周期也更加注重性能,尽管这里的大部分改进都发生在标准库内

  • 子字符串匹配器现在使用更高效的算法
  • 零填充方面有所改进,加快了 `Vec::resize` 和 `Read::read_to_end` 的速度。
  • `Read::read_to_end` 的实现针对 `stdin` 和 `File` 进行了专门化,从而带来了额外的速度提升。
  • 切片上的 `PartialEq` 实现现在快得多

我们在 Windows 支持方面也取得了进展,初步支持了针对 Windows XP 的构建。虽然我们不打算将 Windows XP 视为“第一等”平台,但只要避开标准库的某些部分,现在就可以为 XP 构建 Rust 代码了。

在 Cargo 方面,我们已实现了根据先前的 RFC 规定的lint 限制(lint capping)支持。其理念是,依赖项中的 lint 不应影响你干净地编译代码的能力,这反过来使得调整 lint 的工作方式变得更容易,而不会在生态系统中造成不必要的麻烦。

1.2 的贡献者

1.2 stable 版本的发布凝聚了 180 位优秀人士的辛勤工作

  • Aaron Turon
  • Abhishek Chanda
  • Adolfo Ochagavía
  • Aidan Hobson Sayers
  • Akshay Chiwhane
  • Alex Burka
  • Alex Crichton
  • Alex Stokes
  • Alexander Artemenko
  • Alexis Beingessner
  • Andrea Canciani
  • Andrew Foote
  • Andrew Kensler
  • Andrew Straw
  • Ariel Ben-Yehuda
  • Austin Hellyer
  • Barosl Lee
  • Ben Striegel
  • Björn Steinbrink
  • Brian Anderson
  • Brian Campbell
  • Brian Leibig
  • Brian Quinlan
  • Carol (Nichols || Goulding)
  • Chris Hellmuth
  • Christian Stadelmann
  • Chuck Bassett
  • Corey Farwell
  • Cornel Punga
  • Cruz Julian Bishop
  • Dave Huseby
  • David Campbell
  • David Stygstra
  • David Voit
  • Eduard Bopp
  • Eduard Burtescu
  • Eli Friedman
  • Emilio Cobos Álvarez
  • Emily Dunham
  • Eric Ye
  • Erik Michaels-Ober
  • Falco Hirschenberger
  • Felix S. Klock II
  • FuGangqiang
  • Geoffrey Thomas
  • Gleb Kozyrev
  • Guillaume Gomez
  • Gulshan Singh
  • Heejong Ahn
  • Huachao Huang
  • Huon Wilson
  • Ivan Ukhov
  • Iven Hsu
  • Jake Goulding
  • Jake Hickey
  • James Miller
  • Jared Roesch
  • Jeremy Schlatter
  • Jexell
  • Jim Blandy
  • Johann Tuffe
  • Johannes Hoff
  • Johannes Oertel
  • John Hodge
  • Jonathan Reem
  • Joshua Landau
  • Kevin Ballard
  • Kubilay Kocak
  • Lee Jeffery
  • Leo Correa
  • Liigo Zhuang
  • Lorenz
  • Luca Bruno
  • Luqman Aden
  • Manish Goregaokar
  • Marcel Müller
  • Marcus Klaas
  • Marin Atanasov Nikolov
  • Markus Westerlind
  • Martin Pool
  • Marvin Löbel
  • Matej Lach
  • Mathieu David
  • Matt Brubeck
  • Matthew Astley
  • Max Jacobson
  • Maximilian Haack
  • Michael Layzell
  • Michael Macias
  • Michael Rosenberg
  • Michael Sproul
  • Michael Woerister
  • Mihnea Dobrescu-Balaur
  • Mikhail Zabaluev
  • Mohammed Attia
  • Ms2ger
  • Murarth
  • Mário Feroldi
  • Nathan Long
  • Nathaniel Theis
  • Nick Cameron
  • Nick Desaulniers
  • Nick Fitzgerald
  • Nick Hamann
  • Nick Howell
  • Niko Matsakis
  • Nils Liberg
  • OlegTsyba
  • Oliver 'ker' Schneider
  • Oliver Schneider
  • P1start
  • Parker Moore
  • Pascal Hertleif
  • Paul Faria
  • Paul Oliver
  • Peer Aramillo Irizar
  • Peter Atashian
  • Peter Elmers
  • Philip Munksgaard
  • Ralph Giles
  • Rein Henrichs
  • Ricardo Martins
  • Richo Healey
  • Ricky Taylor
  • Russell Johnston
  • Russell McClellan
  • Ryan Pendleton
  • Ryman
  • Rémi Audebert
  • Sae-bom Kim
  • Sean Collins
  • Sean Gillespie
  • Sean Patrick Santos
  • Seo Sanghyeon
  • Simon Sapin
  • Simonas Kazlauskas
  • Steve Gury
  • Steve Klabnik
  • Steven Allen
  • Steven Fackler
  • Steven Walter
  • Sébastien Marie
  • Tamir Duberstein
  • Thomas Karpiniec
  • Tim Ringenbach
  • Tshepang Lekhonkhobe
  • Ulrik Sverdrup
  • Vadim Petrochenkov
  • Wei-Ming Yang
  • Wesley Wiser
  • Wilfred Hughes
  • Will Andrews
  • Will Engler
  • Xuefeng Wu
  • XuefengWu
  • Yongqian Li
  • York Xiang
  • Z1
  • ben fleis
  • benaryorg
  • bluss
  • bors
  • clatour
  • diwic
  • dmgawel
  • econoplas
  • frankamp
  • funkill
  • inrustwetrust
  • joliv
  • klutzy
  • marcell
  • mdinger
  • olombard
  • peferron
  • ray glover
  • saml
  • simplex
  • sumito3478
  • webmobster