Skip to content

Commit d599c1e

Browse files
committed
typos and nits
1 parent 51bed0f commit d599c1e

File tree

1 file changed

+5
-5
lines changed

1 file changed

+5
-5
lines changed

text/0000-unsafe-aliased.md

+5-5
Original file line numberDiff line numberDiff line change
@@ -191,14 +191,14 @@ struct UnsafeAliased<T: ?Sized> {
191191

192192
impl<T: ?Sized> !Send for UnsafeAliased<T> {}
193193

194-
impl<T> UnsafeCell<T> {
194+
impl<T: ?Sized> UnsafeAliased<T> {
195195
/// Constructs a new instance of `UnsafeCell` which will wrap the specified
196196
/// value.
197-
pub fn new(value: T) -> UnsafeAliased<T> {
197+
pub fn new(value: T) -> UnsafeAliased<T> where T: Sized {
198198
UnsafeAliased { value }
199199
}
200200

201-
pub fn into_inner(self) -> T {
201+
pub fn into_inner(self) -> T where T: Sized {
202202
self.value
203203
}
204204

@@ -290,7 +290,7 @@ Codegen and Miri changes:
290290

291291
- `UnsafeCell`: disables aliasing (and affects but does not fully disable dereferenceable) behind shared refs, i.e. `&UnsafeCell<T>` is special. `UnsafeCell<&T>` (by-val, fully owned) is not special at all and basically like `&T`; `&mut UnsafeCell<T>` is also not special.
292292
- `UnsafeAliased`: disables aliasing (and affects but does not fully disable dereferenceable) behind mutable refs, i.e. `&mut UnsafeAliased<T>` is special. `UnsafeAliased<&mut T>` (by-val, fully owned) is not special at all and basically like `&mut T`; `&UnsafeAliased<T>` is also not special.
293-
- [`MaybeDangling`](https://github.com/rust-lang/rfcs/pull/3336): disables aliasing and dereferencable *of all references (and boxes) directly inside it*, i.e. `MaybeDanling<&[mut] T>` is special. `&[mut] MaybeDangling<T>` is not special at all and basically like `&[mut] T`.
293+
- [`MaybeDangling`](https://github.com/rust-lang/rfcs/pull/3336): disables aliasing and dereferencable *of all references (and boxes) directly inside it*, i.e. `MaybeDangling<&[mut] T>` is special. `&[mut] MaybeDangling<T>` is not special at all and basically like `&[mut] T`.
294294

295295
# Drawbacks
296296
[drawbacks]: #drawbacks
@@ -326,7 +326,7 @@ This is somewhat like `UnsafeCell`, but for mutable instead of shared references
326326
[unresolved-questions]: #unresolved-questions
327327

328328
- How do we transition code that relies on `Unpin` opting-out of aliasing guarantees, to the new type? Futures and generators just need a compiler patch, but there is probably other code that needs adjusting (e.g., Rust-for-Linux uses pinning to handle all sorts of self-referntial things in the Linux Kernel). Note that all such code is explicitly unsupported right now; the `Unpin` loophole has always explicitly been declared as temporary, unstable, and not something that we promise will actually work.
329-
- The name of the type needs to be bikeshed. `UnsafeAliased` might be too close to `UnsafeCell`, but that is a deliberate choice to indicate that this type has an effect when it appears in the *pointee*, unlike types like `MaybeUninit` or [`MaybeDangling`](https://github.com/rust-lang/rfcs/pull/3336) that have an effect when wrapped around the *pointer*. Like `UnsafeCell`, the aliasing allowed here is "interior". Other possible names: `UnsafeSelfReferential`, `UnsafePinned`, ...
329+
- The name of the type needs to be bikeshed. `UnsafeAliased` might be too close to `UnsafeCell`, but that is a deliberate choice to indicate that this type has an effect when it appears in the *pointee*, unlike types like `MaybeUninit` or [`MaybeDangling`](https://github.com/rust-lang/rfcs/pull/3336) that have an effect on aliasing rules when wrapped around the *pointer*. Like `UnsafeCell`, the aliasing allowed here is "interior". Other possible names: `UnsafeSelfReferential`, `UnsafePinned`, ...
330330
- Relatedly, in which module should this type live?
331331
- Should this type `derive(Copy)`? `UnsafeCell` does not, which is unfortunate because it now means some people might use `T: Copy` as indication that there is no `UnsafeCell` in `T`.
332332
- `Unpin` [also affects the `dereferenceable` attribute](https://github.com/rust-lang/rust/pull/106180), so the same would happen for this type. Is that something we want to guarantee, or do we hope to get back `dereferenceable` when better semantics for it materialize on the LLVM side?

0 commit comments

Comments
 (0)