Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

1.8 release announcement #82

Merged
merged 2 commits into from
Apr 14, 2016
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
256 changes: 256 additions & 0 deletions _posts/2016-04-14-Rust-1.8.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,256 @@
---
layout: post
title: "Announcing Rust 1.8"
author: The Rust Core Team
---

The Rust team is happy to announce the latest version of Rust, 1.8. Rust is a
systems programming language focused on safety, speed, and concurrency.

As always, you can [install Rust 1.8][install] from the appropriate page on our
website, and check out the [detailed release notes for 1.8][notes] on GitHub.
About 1400 patches were landed in this release.

[install]: https://www.rust-lang.org/install.html
[notes]: https://github.com/rust-lang/rust/blob/stable/RELEASES.md#version-180-2016-04-14

### What's in 1.8 stable

There are two new features in Rust 1.8, as well as good news for Windows users!
Additionally, work is underway to replace our `make`-based build system with
one based on Cargo.

The first feature is that the various “operator equals” operators, such as `+=`
and `-=`, are now overloadable via various traits. This change was accepted in
[RFC 953], and looks like this:

```rust
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);
}
```

[RFC 953]: https://github.com/rust-lang/rfcs/blob/master/text/0953-op-assign.md

This will print out `Count { value: 6 }`. Like the other operator traits, an
associated type allows you to use different types on each side of the operator,
as well. See the RFC for more details.

The second feature is very small, and comes from [RFC 218]. Before Rust 1.8, a
`struct` with no fields did not have curly braces:

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

[RFC 218]: https://github.com/rust-lang/rfcs/blob/master/text/0218-empty-struct-with-braces.md

The second form is no longer an error. This was
originally disallowed for consistency with other empty declarations, as well as
a parsing ambiguity. However, that ambiguity is non-existent in post-1.0 Rust,
and macro authors saw additional complexity due to needing a special-case. Also,
users who do active development would sometimes switch between empty and
non-empty versions of a struct, and the extra work and diffs involved was less
than ideal.

On the Windows front, 32-bit MSVC builds [now implement unwinding]. This moves
`i686-pc-windows-msvc` to a Tier 1 platform.

[now implement unwinding]: https://github.com/rust-lang/rust/pull/30448

Finally, we have used `make` to build Rust for a very long time. However,
we already have a wonderful tool for building Rust programs: Cargo. In Rust
1.8, [initial support landed] for a new build system that’s written in Rust,
and based on Cargo. It is not yet the default, and there is much more work to
do. We will talk about this in release notes more once it’s completely done,
for now, please read the GitHub issue for more details.

[initial support landed]: https://github.com/rust-lang/rust/pull/31123

#### Library stabilizations

About 20 library functions and methods are now stable in 1.8. There are three
major groups of changes: UTF-16 related string methods, various APIs related to
time, and the various traits needed for operator overloading mentioned in the
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I missed std::time the first time I read this, but it's a pretty major feature of this release, could that be highlighted a bit more?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm having a hard time coming up with a good summary, ideas?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hm on rereading it's probably fine, so 👍 from me

language section.

Other notable improvements include:

* `<[T]>::clone_from_slice()`, an efficient way to copy the data from one slice
and put it into another slice.
* Various convenience methods on `Ipv4Addr` and `Ipv6Addr`, such as `is_loopback()`,
which returns `true` or `false` if the address is a loopback address according to
RFC 6890.
* Various improvements to `CString`, used for FFI.
* checked, saturated, and overflowing operations for various numeric types.
These aren’t counted in that ‘40’ number above, because there are a _lot_ of
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Isn’t the number 20 rather than 40? Or is 40 including all the new numeric types methods?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes, this was a typo. i've since fixed it

them, but they all do the same thing.

See the [detailed release notes][notes] for more.

#### Cargo features

There were a few updates to Cargo:

* [`cargo init`](https://github.com/rust-lang/cargo/pull/2081) can be used to
start a Cargo project in your current working directory, rather than making a
new subdirectory like `cargo new`.
* [`cargo metadata`](https://github.com/rust-lang/cargo/pull/2196) is another
new subcommand for fetching metadata about a project.
* `.cargo/config` now has [keys for `-v` and
`--color`](https://github.com/rust-lang/cargo/pull/2397)
* Cargo’s ability to have target-specific dependencies [was
enhanced](https://github.com/rust-lang/cargo/pull/2328).


See the [detailed release notes][notes] for more.

### Contributors to 1.8

We had 126 individuals contribute to 1.8. Thank you so much!

* 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