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

RFC: Remove cross-borrowing #112

Merged
merged 2 commits into from
Jun 25, 2014
Merged
Changes from all commits
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
31 changes: 31 additions & 0 deletions active/0032-remove-cross-borrowing.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
- Start Date: 2014-06-09
- RFC PR #: 112
- Rust Issue #: #10504

# Summary

Remove the coercion from `Box<T>` to `&mut T` from the language.

# Motivation

Currently, the coercion between `Box<T>` to `&mut T` can be a hazard because it can lead to surprising mutation where it was not expected.

# Detailed design

The coercion between `Box<T>` and `&mut T` should be removed.

Note that methods that take `&mut self` can still be called on values of type `Box<T>` without any special referencing or dereferencing. That is because the semantics of auto-deref and auto-ref conspire to make it work: the types unify after one autoderef followed by one autoref.

# Drawbacks

Borrowing from `Box<T>` to `&mut T` may be convenient.

# Alternatives

An alternative is to remove `&T` coercions as well, but this was decided against as they are convenient.

The impact of not doing this is that the coercion will remain.

# Unresolved questions

None.