Skip to content

Commit 0d60e8d

Browse files
committed
Update RELEASES.md for 1.2
1 parent e7dbcf8 commit 0d60e8d

File tree

1 file changed

+133
-4
lines changed

1 file changed

+133
-4
lines changed

RELEASES.md

Lines changed: 133 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,144 @@
11
Version 1.2.0 (August 2015)
22
===========================
33

4+
* ~1200 changes, numerous bugfixes
5+
46
Highlights
57
----------
68

7-
* [Parallel codegen][parcodegen] is now working again, which can substantially
8-
speed up large builds in debug mode; It also gets another ~33% speedup when
9-
bootstrapping on a 4 core machine (using 8 jobs). It's not enabled by default,
10-
but will be "in the near future"
9+
* [Dynamically-sized-type coercions][dst] allow smart pointer types
10+
like `Rc` to contain types without a fixed size, arrays and trait
11+
objects, finally enabling use of `Rc<[T]>` and completing the
12+
implementation of DST.
13+
* [Parallel codegen][parcodegen] is now working again, which can
14+
substantially speed up large builds in debug mode; It also gets
15+
another ~33% speedup when bootstrapping on a 4 core machine (using 8
16+
jobs). It's not enabled by default, but will be "in the near
17+
future". It can be activated with the `-C codegen-units=N` flag to
18+
`rustc`.
19+
20+
Breaking Changes
21+
----------------
22+
23+
* The [`to_uppercase`] and [`to_lowercase`] methods on `char` now do
24+
unicode case mapping, which is a previously-planned change in
25+
behavior and considered a bugfix.
26+
* [`mem::align_of`] now specifies [the *minimum alignment* for
27+
T][align], which is usually the alignment programs are interested
28+
in, and the same value reported by clang's
29+
`alignof`. [`mem::min_align_of`] is deprecated. This is not known to
30+
break real code.
31+
32+
Language
33+
--------
1134

35+
* Patterns with `ref mut` now correctly invoke [`DerefMut`] when
36+
matching against dereferencable values.
37+
38+
Libraries
39+
---------
1240

41+
* The [`Extend`] trait, which grows a collection from an iterator, is
42+
implemented over iterators of references, for `String`, `Vec`,
43+
`LinkedList`, `VecDeque`, `EnumSet`, `BinaryHeap`, `VecMap`,
44+
`BTreeSet` and `BTreeMap`. [RFC][extend-rfc].
45+
* The [`iter::once`] function returns an iterator that yields a single
46+
element.
47+
* The [`iter::empty`] function returns an iterator that yields no
48+
elements.
49+
* The [`matches`] and [`rmatches`] methods on `str` return iterators
50+
over substring matches.
51+
* [`Cell`] and [`RefCell`] both implement [`Eq`].
52+
* A number of methods for wrapping arithmetic are added to the
53+
integral types, [`wrapping_div`], [`wrapping_rem`],
54+
[`wrapping_neg`], [`wrapping_shl`], [`wrapping_shr`]. These are in
55+
addition to the existing [`wrapping_add`], [`wrapping_sub`], and
56+
[`wrapping_mul`] methods, and alternatives to the [`Wrapping`]
57+
type.. It is illegal for the default arithmetic operations in Rust
58+
to overflow; the desire to wrap must be explicit.
59+
* The `{:#?}` formatting specifier [displays the alternate,
60+
pretty-printed][debugfmt] form of the `Debug` formatter. This
61+
feature was actually introduced prior to 1.0 with little
62+
fanfare.
63+
* [`fmt::Formatter`] implements [`fmt::Write`], a `fmt`-specific trait
64+
for writing data to formatted strings, similar to [`io::Write`].
65+
* [`fmt::Formatter`] adds 'debug builder' methods, [`debug_struct`],
66+
[`debug_tuple`], [`debug_list`], [`debug_set`], [`debug_map`]. These
67+
are used by code generators to emit implementations of [`Debug`].
68+
* `str` has new [`to_uppercase`][strup] and [`to_lowercase`][strlow]
69+
methods that convert case, following Unicode case mapping.
70+
* It is now easier to handle to poisoned locks. The [`PoisonError`]
71+
type, returned by failing lock operations, exposes `into_inner`,
72+
`get_ref`, and `get_mut`, which all give access to the inner lock
73+
guard, and allow the poisoned lock to continue to operate. The
74+
`is_poisoned` method of [`RwLock`] and [`Mutex`] can poll for a
75+
poisoned lock without attempting to take the lock.
76+
* On Unix the [`FromRawFd`] trait is implemented for [`Stdio`], and
77+
[`AsRawFd`] for [`ChildStdin`], [`ChildStdout`], [`ChildStderr`].
78+
On Windows the `FromRawHandle` trait is implemented for `Stdio`,
79+
and `AsRawHandle` for `ChildStdin`, `ChildStdout`,
80+
`ChildStderr`.
81+
* [`io::ErrorKind`] has a new variant, `InvalidData`, which indicates
82+
malformed input.
83+
84+
Misc
85+
----
86+
87+
* `rustc` employs smarter heuristics for guessing at [typos].
88+
* `rustc` emits more efficient code for [no-op conversions between
89+
unsafe pointers][nop].
90+
* Fat pointers are now [passed in pairs of immediate arguments][fat],
91+
resulting in faster compile times and smaller code.
92+
93+
[`Extend`]: http://doc.rust-lang.org/nightly/std/iter/trait.Extend.html
94+
[extend-rfc]: https://github.com/rust-lang/rfcs/blob/master/text/0839-embrace-extend-extinguish.md
95+
[`iter::once`]: http://doc.rust-lang.org/nightly/std/iter/fn.once.html
96+
[`iter::empty`]: http://doc.rust-lang.org/nightly/std/iter/fn.empty.html
97+
[`matches`]: http://doc.rust-lang.org/nightly/std/primitive.str.html#method.matches
98+
[`rmatches`]: http://doc.rust-lang.org/nightly/std/primitive.str.html#method.rmatches
99+
[`Cell`]: http://doc.rust-lang.org/nightly/std/cell/struct.Cell.html
100+
[`RefCell`]: http://doc.rust-lang.org/nightly/std/cell/struct.RefCell.html
101+
[`wrapping_add`]: http://doc.rust-lang.org/nightly/std/primitive.i8.html#method.wrapping_add
102+
[`wrapping_sub`]: http://doc.rust-lang.org/nightly/std/primitive.i8.html#method.wrapping_sub
103+
[`wrapping_mul`]: http://doc.rust-lang.org/nightly/std/primitive.i8.html#method.wrapping_mul
104+
[`wrapping_div`]: http://doc.rust-lang.org/nightly/std/primitive.i8.html#method.wrapping_div
105+
[`wrapping_rem`]: http://doc.rust-lang.org/nightly/std/primitive.i8.html#method.wrapping_rem
106+
[`wrapping_neg`]: http://doc.rust-lang.org/nightly/std/primitive.i8.html#method.wrapping_neg
107+
[`wrapping_shl`]: http://doc.rust-lang.org/nightly/std/primitive.i8.html#method.wrapping_shl
108+
[`wrapping_shr`]: http://doc.rust-lang.org/nightly/std/primitive.i8.html#method.wrapping_shr
109+
[`Wrapping`]: http://doc.rust-lang.org/nightly/std/num/struct.Wrapping.html
110+
[`fmt::Formatter`]: http://doc.rust-lang.org/nightly/std/fmt/struct.Formatter.html
111+
[`fmt::Write`]: http://doc.rust-lang.org/nightly/std/fmt/trait.Write.html
112+
[`io::Write`]: http://doc.rust-lang.org/nightly/std/io/trait.Write.html
113+
[`debug_struct`]: http://doc.rust-lang.org/nightly/core/fmt/struct.Formatter.html#method.debug_struct
114+
[`debug_tuple`]: http://doc.rust-lang.org/nightly/core/fmt/struct.Formatter.html#method.debug_tuple
115+
[`debug_list`]: http://doc.rust-lang.org/nightly/core/fmt/struct.Formatter.html#method.debug_list
116+
[`debug_set`]: http://doc.rust-lang.org/nightly/core/fmt/struct.Formatter.html#method.debug_set
117+
[`debug_map`]: http://doc.rust-lang.org/nightly/core/fmt/struct.Formatter.html#method.debug_map
118+
[`Debug`]: http://doc.rust-lang.org/nightly/std/fmt/trait.Debug.html
119+
[strup]: http://doc.rust-lang.org/nightly/std/primitive.str.html#method.to_uppercase
120+
[strlow]: http://doc.rust-lang.org/nightly/std/primitive.str.html#method.to_lowercase
121+
[`to_uppercase`]: http://doc.rust-lang.org/nightly/std/primitive.char.html#method.to_uppercase
122+
[`to_lowercase`]: http://doc.rust-lang.org/nightly/std/primitive.char.html#method.to_lowercase
123+
[`PoisonError`]: http://doc.rust-lang.org/nightly/std/sync/struct.PoisonError.html
124+
[`RwLock`]: http://doc.rust-lang.org/nightly/std/sync/struct.RwLock.html
125+
[`Mutex`]: http://doc.rust-lang.org/nightly/std/sync/struct.Mutex.html
126+
[`FromRawFd`]: http://doc.rust-lang.org/nightly/std/os/unix/io/trait.FromRawFd.html
127+
[`AsRawFd`]: http://doc.rust-lang.org/nightly/std/os/unix/io/trait.AsRawFd.html
128+
[`Stdio`]: http://doc.rust-lang.org/nightly/std/process/struct.Stdio.html
129+
[`ChildStdin`]: http://doc.rust-lang.org/nightly/std/process/struct.ChildStdin.html
130+
[`ChildStdout`]: http://doc.rust-lang.org/nightly/std/process/struct.ChildStdout.html
131+
[`ChildStderr`]: http://doc.rust-lang.org/nightly/std/process/struct.ChildStderr.html
132+
[`io::ErrorKind`]: http://doc.rust-lang.org/nightly/std/io/enum.ErrorKind.html
133+
[debugfmt]: https://www.reddit.com/r/rust/comments/3ceaui/psa_produces_prettyprinted_debug_output/
134+
[`DerefMut`]: http://doc.rust-lang.org/nightly/std/ops/trait.DerefMut.html
135+
[`mem::align_of`]: http://doc.rust-lang.org/nightly/std/mem/fn.align_of.html
136+
[align]: https://github.com/rust-lang/rust/pull/25646
137+
[`mem::min_align_of`]: http://doc.rust-lang.org/nightly/std/mem/fn.min_align_of.html
138+
[typos]: https://github.com/rust-lang/rust/pull/26087
139+
[nop]: https://github.com/rust-lang/rust/pull/26336
140+
[fat]: https://github.com/rust-lang/rust/pull/26411
141+
[dst]: https://github.com/rust-lang/rfcs/blob/master/text/0982-dst-coercion.md
13142
[parcodegen]: https://github.com/rust-lang/rust/pull/26018
14143

15144

0 commit comments

Comments
 (0)