Skip to content

Commit b000147

Browse files
committed
move all compat notes to their own section
1 parent bc7e502 commit b000147

File tree

1 file changed

+21
-37
lines changed

1 file changed

+21
-37
lines changed

posts/2022-09-22-Rust-1.64.0.md

Lines changed: 21 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -48,35 +48,6 @@ working with C strings. Rust 1.64 also provides
4848
for working with owned C strings using only the `alloc` crate, rather than the
4949
full `std` library.
5050

51-
### New internal layout for network structures
52-
53-
The standard library network data structures
54-
[`Ipv4Addr`](https://doc.rust-lang.org/std/net/struct.Ipv4Addr.html),
55-
[`Ipv6Addr`](https://doc.rust-lang.org/std/net/struct.Ipv6Addr.html),
56-
[`SocketAddrV4`](https://doc.rust-lang.org/std/net/struct.SocketAddrV4.html),
57-
and
58-
[`SocketAddrV6`](https://doc.rust-lang.org/std/net/struct.SocketAddrV6.html)
59-
now use a more compact, memory-efficient layout, rather than using the memory
60-
layout of the underlying OS data structure.
61-
62-
Normally, such a change would be an entirely internal detail of the standard
63-
library, with the only user-visible effect being less memory usage. However,
64-
some crates relied on the internal implementation details of the standard
65-
library, by using
66-
[`std::mem::transmute`](https://doc.rust-lang.org/std/mem/fn.transmute.html) or
67-
similar to access the internal representation and pass it directly to OS
68-
functions.
69-
70-
Such internal implementation details of the standard library are *never*
71-
considered a stable interface. Nonetheless, because multiple crates relied on
72-
this, we first worked with the authors of all of the still-maintained crates
73-
doing so to arrange for the release of new versions, and to yank the old ones,
74-
before making this change. New releases for known affected crates have been out
75-
for typically over a year, and the vast majority of impacted users should be
76-
able to mitigate with a `cargo update` if needed."
77-
78-
See <https://github.com/rust-lang/rust/pull/78802> for more details.
79-
8051
### Enhancing `.await` with `IntoFuture`
8152

8253
Rust 1.64 stabilizes the
@@ -186,14 +157,6 @@ In the future, we hope to provide simpler APIs that require less use of
186157
low-level details like `Poll` and `Pin`, but in the meantime, these helpers
187158
make it easier to write such code.
188159

189-
### Minimum required kernel and glibc versions increased
190-
191-
As [previously
192-
announced](https://blog.rust-lang.org/2022/08/01/Increasing-glibc-kernel-requirements.html),
193-
`linux` targets now require at least Linux kernel 3.2 (except for targets which
194-
already required a newer kernel), and `linux-gnu` targets now require glibc
195-
2.17 (except for targets which already required a newer glibc).
196-
197160
### `rust-analyzer` now available via `rustup`, no longer in preview
198161

199162
Users of `rust-analyzer` can now obtain it via `rustup` on the stable and beta
@@ -209,6 +172,27 @@ These APIs are now usable in const contexts:
209172

210173
- ...
211174

175+
### Compatibility notes
176+
177+
Rust 1.64 includes some changes that might prevent you from upgrading:
178+
179+
* As [previously
180+
announced](https://blog.rust-lang.org/2022/08/01/Increasing-glibc-kernel-requirements.html),
181+
`linux` targets now require at least Linux kernel 3.2 (except for targets which
182+
already required a newer kernel), and `linux-gnu` targets now require glibc
183+
2.17 (except for targets which already required a newer glibc).
184+
185+
* Rust 1.64.0 changes the memory layout of `Ipv4Addr`, `Ipv6Addr`,
186+
`SocketAddrV4` and `SocketAddrV6` to be more compact and memory efficient.
187+
This internal representation was never exposed, but some crates relied on
188+
it anyway by using `std::mem::transmute`, resulting in invalid memory
189+
accesses. Such internal implementation details of the standard library are
190+
*never* considered a stable interface. To limit the damage, we worked with
191+
the authors of all of the still-maintained crates doing so to release fixed
192+
versions, which have been out for more than a year. The vast majority of
193+
impacted users should be able to mitigate with a `cargo update`.
194+
195+
212196
### Other changes
213197

214198
There are other changes in the Rust 1.64 release, including:

0 commit comments

Comments
 (0)