-
Notifications
You must be signed in to change notification settings - Fork 505
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
Update for nested receivers. #724
Conversation
cc @cramertj I don't really know if this is worded correctly, but I figured I'd get the conversation started. I also wanted to double check if people are satisfied with how the object safety rules are worded. |
Seems reasonable enough to me! |
struct S; | ||
impl<A> Super<A> for S {} | ||
impl WithSelf for S {} | ||
let obj: Box<dyn WithSelf> = Box::new(S); // ERROR: cannot use `Self` type parameter |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't see how this falls out of the rules listed above. Is this an extra rule, or some combination I am not understanding?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Seems like Niko hasn't had time to address this. Let's file an issue for now and then Niko can follow up on that one?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yea, I wasn't expecting to fix it in this PR, I was just a little confused.
Filed #756.
@cramertj can you take another look at the changes and approve the PR? |
af6c31b
to
83a31a6
Compare
Ping @Centril I think this should be ready to go. |
struct S; | ||
impl<A> Super<A> for S {} | ||
impl WithSelf for S {} | ||
let obj: Box<dyn WithSelf> = Box::new(S); // ERROR: cannot use `Self` type parameter |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
83a31a6
to
f183df7
Compare
Sorry y'all, I had this on my list to review .. but I'll check out the associated issue |
@@ -98,24 +98,28 @@ Associated functions whose first parameter is named `self` are called *methods* | |||
and may be invoked using the [method call operator], for example, `x.foo()`, as | |||
well as the usual function call notation. | |||
|
|||
If the type of the `self` parameter is specified, it is limited to one of the | |||
following types: | |||
If the type of the `self` parameter is specified, it is limited to semantic |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What's a "semantic type"? In the PL research community this has a very specific meaning (which you can read about e.g. in this paper), but I doubt that is what you mean.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Indeed, it's not the "semantic type system" notion in PL research. Rather, this means to say that the Self
here is not meant literally (as in those characters making up Self
). So it could be a type alias to e.g. Rc<TheImplementingType>
. Ideas for a better wording?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
"unfolded type"? "fully expanded type"? "resolved type"?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
"resolved type" seems good.
Update books. This required some changes in how the books are tested due to some changes in rust-lang/book. It uses new syntax that is not compatible with bare `rustdoc --test`. This changes it so that it uses rustbook to run the tests, which is essentially the same as `mdbook test`. ## reference 7 commits in 11e893f..64239df 2020-01-18 21:24:08 +0100 to 2020-02-10 19:05:13 +0100 - Update for nested receivers. (rust-lang/reference#724) - clarify note re. leading `::` in 2018 (rust-lang/reference#752) - Update macro-ambiguity.md (rust-lang/reference#754) - typo fix: add missing `by` (rust-lang/reference#753) - fix `TypeParamBounds` link on trait objects (rust-lang/reference#749) - reorganize docs on references (rust-lang/reference#745) - add MacroRepOp usage for ? (rust-lang/reference#744) ## book 49 commits in 87dd6843678575f8dda962f239d14ef4be14b352..6fb3705e5230311b096d47f7e2c91f9ce24393d0 2020-01-20 15:20:40 -0500 to 2020-02-12 13:48:57 -0500 - Fix nomicon links. (rust-lang/book#2253) - Update to Rust 1.41.0 (rust-lang/book#2244) - Listing 19-6: use ptr.add instead of ptr.offset (rust-lang/book#2201) - Remove unneeded mutable reference - Clarify deref coercion explanation - Fix typo in link to 1.30 book - Acknowledge Murphy's Law - Clarify that buffer overread is UB in C - Change from "must" to "idiomatic" about comments - Fancy quotes - Make HashMap types match previous example; add fwd ref to ch 13 - Tweak wording to array clarification - Merge remote-tracking branch 'origin/pr/2236' - Update all our crates (rust-lang/book#2235) - Reword git caveat - Merge remote-tracking branch 'origin/pr/2234' - Merge remote-tracking branch 'origin/pr/2230' - println! is a macro (rust-lang/book#2224) - Update a translated version link (rust-lang/book#2221) - move `Macro invocation` from section on tuple to section on mac… (rust-lang/book#2206) - Do not limit `Self` usage in trait implementation (rust-lang/book#2197) - Merge remote-tracking branch 'origin/pr/2191' - Fix wrapping - Merge remote-tracking branch 'origin/pr/2187' - Updated appendix 07 to reflect deprecation of rustup install (rust-lang/book#2181) - Make links to the Nomicon consistent - Merge remote-tracking branch 'origin/pr/2180' - Merge remote-tracking branch 'origin/pr/2175' - Merge remote-tracking branch 'origin/pr/2171' - Merge remote-tracking branch 'origin/pr/2170' - Clarify and make consistent the explanation of unions - Merge remote-tracking branch 'origin/pr/2166' - Handle dev or test in the Finished output line - Link to macros by example rather than macros (rust-lang/book#2164) - Merge remote-tracking branch 'origin/pr/2147' - Fix parens (rust-lang/book#2132) - Clarify type inference with closures requires calling the closures - Update link to French translation (rust-lang/book#2119) - Merge remote-tracking branch 'origin/pr/2108' - Add an explicit cross reference to data type - Merge remote-tracking branch 'origin/pr/2105' - ch15-02-deref: Improve explanation on immut-to-mut (rust-lang/book#2030) - Remove unnecessary quotes - Make markdown link identifier match - Remove extra newline - Merge remote-tracking branch 'origin/pr/2004' - Extract code and output; script formatting and updating them (rust-lang/book#2231) - Switch "Finally" to "Next" to reflect new chapters having been… (rust-lang/book#2098) - ch19-06 added curly braces to macro output (rust-lang/book#2050) ## rust-by-example 2 commits in 1c2bd024d13f8011307e13386cf1fea2180352b5..32facd5522ddbbf37baf01e4e4b6562bc55c071a 2020-01-20 12:18:36 -0300 to 2020-02-11 09:25:06 -0300 - Add missing `dyn` in code sample (rust-lang/rust-by-example#1306) - Improve grammar in a few sections (rust-lang/rust-by-example#1305) ## edition-guide 1 commits in 1a2390247ad6d08160e0dd74f40a01a9578659c2..37f9e6848411188a1062ead1bd8ebe4b8aa16899 2019-12-29 10:40:55 -0800 to 2020-02-10 14:36:14 +0100 - Fixed typo (rust-lang/edition-guide#196) ## embedded-book 4 commits in 4d78994915af1bde9a95c04a8c27d8dca066232a..b2e1092bf67bd4d7686c4553f186edbb7f5f92db 2020-01-14 08:25:25 +0000 to 2020-01-30 08:45:46 +0000 - Make typestate initialization notes correct (rust-embedded/book#224) - Mention discovery book more prominently (rust-embedded/book#219) - Replace nursery links with rust-lang links (rust-embedded/book#222) - Add a Glossary appendix page (rust-embedded/book#223)
Stabilized in rust-lang/rust#64325.