Skip to content

Commit 5332a6c

Browse files
authored
Merge pull request #132 from rust-lang/1.12.1-announcement
Announcement for Rust 1.12.1
2 parents a3025aa + 8260005 commit 5332a6c

File tree

1 file changed

+171
-0
lines changed

1 file changed

+171
-0
lines changed

_posts/2016-10-20-Rust-1.12.1.md

Lines changed: 171 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,171 @@
1+
---
2+
layout: post
3+
title: "Announcing Rust 1.12.1"
4+
author: The Rust Core Team
5+
---
6+
7+
The Rust team is happy to announce the latest version of Rust, 1.12.1. Rust is a
8+
systems programming language with a focus on reliability, performance, and
9+
concurrency.
10+
11+
As always, you can [install Rust 1.12.1][install] from the appropriate page on our
12+
website, or install via [rustup] with `rustup update stable`.
13+
14+
[install]: https://www.rust-lang.org/install.html
15+
16+
### What's in 1.12.1 stable
17+
18+
Wait... one-point-twelve-point... one?
19+
20+
In [the release announcement for 1.12][one-twelve] a few weeks ago, we said:
21+
22+
[one-twelve]: https://blog.rust-lang.org/2016/09/29/Rust-1.12.html
23+
24+
> The release of 1.12 might be one of the most significant Rust releases since
25+
> 1.0.
26+
27+
It was true. One of the biggest changes was turning on a large compiler
28+
refactoring, [MIR], which re-architects the internals of the compiler. The
29+
overall process went like this:
30+
31+
[MIR]: https://blog.rust-lang.org/2016/04/19/MIR.html
32+
33+
* Initial MIR support landed in nightlies back in Rust 1.6.
34+
* While work was being done, a flag, `--enable-orbit`, was added so that
35+
people working on the compiler could try it out.
36+
* Back [in October], we would always attempt to build MIR, even though it
37+
was not being used.
38+
* A flag was added, `-Z orbit`, to allow users on nightly to try and use MIR
39+
rather than the traditional compilation step ('trans').
40+
* After substantial testing over months and months, for Rust 1.12, [we enabled
41+
MIR by default].
42+
* In Rust 1.13, [MIR will be the only option].
43+
44+
[in October]: https://github.com/rust-lang/rust/pull/28748
45+
[we enabled MIR by default]: https://github.com/rust-lang/rust/pull/34096
46+
[MIR will be the only option]: https://github.com/rust-lang/rust/pull/35764
47+
48+
A change of this magnitude is huge, and important. So it's also important to do
49+
it right, and do it carefully. This is why this process took so long; we
50+
regularly tested the compiler against every crate on crates.io, we asked people
51+
to try out `-Z orbit` on their private code, and after six weeks of beta, no
52+
significant problems appeared. So we made the decision to keep it on by default
53+
in 1.12.
54+
55+
But large changes still have an element of risk, even though we tried to reduce
56+
that risk as much as possible. And so, after release, 1.12 saw a fair number of
57+
regressions that we hadn't detected in our testing. Not all of them are
58+
directly MIR related, but when you change the compiler internals so much, it's
59+
bound to ripple outward through everything.
60+
61+
### Why make a point release?
62+
63+
Now, given that we have a six-week release cycle, and we're halfway towards
64+
Rust 1.13, you may wonder why we're choosing to cut a patch version of Rust
65+
1.12 rather than telling users to just wait for the next release. We have
66+
previously said something like "point releases should only happen in extreme
67+
situations, such as a security vulnerability in the standard library."
68+
69+
The Rust team cares deeply about the stability of Rust, and about our users'
70+
experience with it. We could have told you all to wait, but we want you to know
71+
how seriously we take this stuff. We think it's worth it to demonstrate our
72+
commitment to you by putting in the work of making a point release in this
73+
situation.
74+
75+
Furthermore, given that this is not security related, it's a good time to
76+
practice actually cutting a point release. We've never done it before, and the
77+
release process is [semi-automated] but still not completely so. Having a point
78+
release in the world will also [shake out any bugs][bugs] in dealing with point
79+
releases in other tooling as well, like [rustup]. Making sure that this all goes
80+
smoothly and getting some practice going through the motions will be useful if
81+
we ever need to cut some sort of *emergency* point release due to a security
82+
advisory or anything else.
83+
84+
[semi-automated]: https://forge.rust-lang.org/release-process.html
85+
[rustup]: https://www.rustup.rs/
86+
[bugs]: https://github.com/rust-lang/rust/pull/37173#issuecomment-253938822
87+
88+
This is the first Rust point release since [Rust 0.3.1], all the way back in in
89+
2012, and marks 72 weeks since Rust 1.0, when we established our six week
90+
release cadence along with a commitment to aggressive stability
91+
guarantees. While we're disappointed that 1.12 had these regressions, we're
92+
really proud of Rust's stability and will to continue expanding our efforts to
93+
ensure that it's a platform you can rely on. We want Rust to be the most
94+
reliable programming platform in the world.
95+
96+
[Rust 0.3.1]: https://mail.mozilla.org/pipermail/rust-dev/2012-July/002152.html
97+
98+
### A note about testing on beta
99+
100+
One thing that you, as a user of Rust, can do to help us fix these issues
101+
sooner: test your code against the beta channel! Every beta release is a
102+
release candidate for the next stable release, so for the cost of an extra
103+
build in CI, you can help us know if there's going to be some sort of problem
104+
before it hits a stable release! It's really easy. For example, on
105+
[Travis](https://travis-ci.org/), you can use this as your `.travis.yml`:
106+
107+
```yaml
108+
language: rust
109+
rust:
110+
- stable
111+
- beta
112+
```
113+
114+
And you'll test against both. Furthermore, if you'd like to make it so that any
115+
beta failure doesn't fail your own build, do this:
116+
117+
```yaml
118+
matrix:
119+
allow_failures:
120+
- rust: beta
121+
```
122+
123+
The beta build may go red, but your build will stay green.
124+
125+
Most other CI systems, such as [AppVeyor](https://www.appveyor.com/), should
126+
support [something
127+
similar](https://www.appveyor.com/docs/build-configuration/#allow-failing-jobs).
128+
Check the documentation for your specific continuous integration product for
129+
full details.
130+
131+
### Full details
132+
133+
There were nine issues fixed in 1.12.1, and all of those fixes have been
134+
backported to 1.13 beta as well.
135+
136+
* [ICE: 'rustc' panicked at 'assertion failed: concrete_substs.is_normalized_for_trans()' #36381][36381]
137+
* [Confusion with double negation and booleans][36856]
138+
* [rustc 1.12.0 fails with SIGSEGV in release mode (syn crate 0.8.0)][36875]
139+
* [Rustc 1.12.0 Windows build of `ethcore` crate fails with LLVM error][36924]
140+
* [1.12.0: High memory usage when linking in release mode with debug info][36926]
141+
* [Corrupted memory after updated to 1.12][36936]
142+
* ["Let NullaryConstructor = something;" causes internal compiler error: "tried to overwrite interned AdtDef"][37026]
143+
* [Fix ICE: inject bitcast if types mismatch for invokes/calls/stores][37112]
144+
* [debuginfo: Handle spread_arg case in MIR-trans in a more stable way.][37153]
145+
146+
[36381]: https://github.com/rust-lang/rust/issues/36381
147+
[36856]: https://github.com/rust-lang/rust/issues/36856
148+
[36875]: https://github.com/rust-lang/rust/issues/36875
149+
[36924]: https://github.com/rust-lang/rust/issues/36924
150+
[36926]: https://github.com/rust-lang/rust/issues/36926
151+
[36936]: https://github.com/rust-lang/rust/issues/36936
152+
[37026]: https://github.com/rust-lang/rust/issues/37026
153+
[37112]: https://github.com/rust-lang/rust/issues/37112
154+
[37153]: https://github.com/rust-lang/rust/issues/37153
155+
156+
In addition, there were four more regressions that we decided not to include
157+
in 1.12.1 for various reasons, but we'll be working on fixing those as soon
158+
as possible as well.
159+
160+
* [ICE, possibly related to associated types of associated types?][36325]
161+
* [Compilation of a crate using a large static map fails on latest i686-pc-windows-gnu Beta][36799]
162+
* [Regression: "no method found" error when calling same method twice, with HRTB impl][37154]
163+
* [ICE: fictitious type sizing_type_of][37109]
164+
165+
[36325]: https://github.com/rust-lang/rust/issues/36325
166+
[36799]: https://github.com/rust-lang/rust/issues/36799
167+
[37154]: https://github.com/rust-lang/rust/issues/37154
168+
[37109]: https://github.com/rust-lang/rust/issues/37109
169+
170+
You can see the full diff from 1.12.0 to 1.12.1
171+
[here](https://github.com/rust-lang/rust/pull/37173).

0 commit comments

Comments
 (0)