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 1 commit
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
251 changes: 251 additions & 0 deletions _posts/2016-04-14-Rust-1.8.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,251 @@
---
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
Copy link
Contributor

Choose a reason for hiding this comment

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

Nit: no terminating semicolon here

Copy link
Member Author

Choose a reason for hiding this comment

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

gah, i always mess this up

```

[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, and is equivalent to the first. This was
Copy link
Contributor

Choose a reason for hiding this comment

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

Nit: they are not entirely equivalent -- e.g., in the first form, you can do let x = Foo; but you must do let y = Bar { };

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. Allowing both forms is slightly less consistent, but the ergonomics
of these two cases was deemed worth it.
Copy link
Contributor

Choose a reason for hiding this comment

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

I feel like this is a bit more defensive than necessary. From my point-of-view, permitting { } is more consistent, not less. That is, struct Foo; is a kind of shorthand for the combination of struct Foo { } and const Foo: Foo = Foo { };. The fact that we only permitted the shorthand before was a bit odd.


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/30448
Copy link
Member

Choose a reason for hiding this comment

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

This is the same link as the MSVC one above


#### 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 small updates to Cargo:
Copy link
Member

Choose a reason for hiding this comment

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

Configuration via environment variables was a relatively large change, perhaps that could be mentioned here in lieu of -v and --color in .cargo/config?

Copy link
Member

Choose a reason for hiding this comment

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

Actually rust-lang/cargo#2328 was a pretty major feature that landing in Cargo this cycle

Copy link
Member

Choose a reason for hiding this comment

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

rust-lang/cargo#2196 (cargo metadata) was also a pretty major feature added this release


* [`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.toml` now has [keys for `-v` and `--color`](https://github.com/rust-lang/cargo/pull/2397)
Copy link
Member

Choose a reason for hiding this comment

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

This is actually in .cargo/config, not Cargo.toml


See the release notes for the full list of changes.
Copy link
Member

Choose a reason for hiding this comment

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

Could this hyperlink to the notes?


### Contributors to 1.7

We had 126 individuals contribute to 1.7. Thank you so much!
Copy link
Member

Choose a reason for hiding this comment

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

"1.7" here and the heading above


* 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